3 votos

¿Cómo puedo ejecutar "decir--archivo de salida" sin que cuelga (y peor) con más de 310 bytes de entrada?

Para mi no comercial curiosidad, estoy interesado en la transformación de algunos de Lewis Carroll trabajo en la máquina de voz generada. Al enviar la salida a un dispositivo de audio, el say comando para hacer esto incluso con cantidades muy grandes de entrada:

$ wc ~/Downloads/lewis-carroll.txt 
    7066   55439  311589 /Users/xxxx/Downloads/lewis-carroll.txt

$ date; time say -f ~/Downloads/lewis-carroll.txt; date
Wed Oct  3 00:24:38 EDT 2018

real    368m11.986s
user    0m0.009s
sys 0m0.011s
Wed Oct  3 06:32:50 EDT 2018

Al enviar la salida a un archivo, aparece también el trabajo con cantidades muy pequeñas de entrada de texto:

$ date; head -c 310 ~/Downloads/lewis-carroll.txt | time say -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
Thu Oct  4 08:46:18 EDT 2018
        0.17 real         0.08 user         0.02 sys
Thu Oct  4 08:46:18 EDT 2018
-rw-r--r--  1 xxxx  staff  81426 Oct  4 08:46 lewis-carroll.aac

Con más de entrada, no funciona:

$ date; time head -c 311 ~/Downloads/lewis-carroll.txt | say -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
Thu Oct  4 08:46:40 EDT 2018

(se bloquea!)

^C

real    0m30.243s
user    0m0.090s
sys 0m0.028s
Thu Oct  4 08:47:11 EDT 2018
-rw-r--r--  1 xxxx  staff  80865 Oct  4 08:46 lewis-carroll.aac

Eso es sólo el comienzo de los problemas. Intenta ejecutar say también se cuelgue, no importa cuán pequeña sea la entrada o en el que la salida se supone que debe ir (por ejemplo, say Hello). Peor aún, tan pronto como el primer say comando se bloquea, Chrome se inicia beachballing. Felizmente, hay una sencilla solución para devolver el sistema a la operación normal:

$ pkill speechsynthesisd say

(La solución se encuentra aquí.)

Puedo entender Apple querer poner límites de velocidad (o algo así) en la síntesis de voz, para evitar que la gente de la generación de hoteles de audiolibros. (Lo cual sería bueno; eso no es lo que estoy tratando de hacer.) Este sería un muy mal camino para implementar la limitación de velocidad.

No entiendo este error tan mal que otro software (como Chrome) algo va mal.

Yo hice algo como esto en el 2012 (en un par de kilobytes de texto) sin ejecutar en algo como esto. No tengo suficiente historia para reproducir que.

¿Hay alguna forma de evitar este lío?

Correr en: macOS 10.13.6 (17G65)

Actualización:

Como @ashley, soy capaz de convertir una gran parte de el diccionario del habla:

$ date; time head -c 2000 /usr/share/dict/words | say -o words.aac; date; ls -l words.aac
Mon Oct  8 09:54:50 EDT 2018

real    0m2.552s
user    0m0.555s
sys 0m0.111s
Mon Oct  8 09:54:53 EDT 2018
-rw-r--r--  1 xxxx  staff  543542 Oct  8 09:54 words.aac

Mirando más detenidamente en mi entrada, descubrí que era en formato de DOS (líneas final con CR-LF) en lugar de macOS nativo del formato Unix (líneas final con LF). He hecho una copia en el último formato, la eliminación de seis caracteres CR desde el comienzo de mi archivo ... y ahora say puede manejar seis menos caracteres antes de colgar:

$ date; head -c 304 ~/Downloads/lewis-carroll-lf.txt | time say -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
Mon Oct  8 09:49:51 EDT 2018
        0.18 real         0.09 user         0.02 sys
Mon Oct  8 09:49:52 EDT 2018
-rw-r--r--  1 xxxx  staff  81426 Oct  8 09:49 lewis-carroll.aac
$ date; head -c 305 ~/Downloads/lewis-carroll-lf.txt | time say -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
Mon Oct  8 09:49:55 EDT 2018
Command terminated abnormally.
       29.72 real         0.09 user         0.02 sys
Mon Oct  8 09:50:25 EDT 2018
-rw-r--r--  1 xxxx  staff  80865 Oct  8 09:49 lewis-carroll.aac

(Voy a agregar más información acerca de mi entrada en el final de esta pregunta).

Como a @ashley otras sugerencias:

  • He tratado de romper la entrada en archivos más pequeños y la conversión de ellos de forma individual. Esto es muy útil en la exploración de lo que estoy jugando con. Tengo que saltar a través de muchos, muchos aros para hacer este trabajo. (Este documento aún más si sirve de ayuda.)

  • Yo estaba esperando para hacer todo esto desde la línea de comandos, sin necesidad de recurrir a la captura de audio. Puede que termine siendo mi mejor opción para la fabricación de un gran archivo de audio.

  • Puedo reproducir este problema con la voz Alex -- el valor predeterminado para mí, y mi preferencia en este momento, pero no el de Daniel voz (aunque tengo que conseguir 79699 en lugar de 69867):

    $ date; head -c 305 ~/Downloads/lewis-carroll-lf.txt | time say -v Daniel -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
    Mon Oct  8 19:53:11 EDT 2018
            0.68 real         0.08 user         0.03 sys
    Mon Oct  8 19:53:11 EDT 2018
    -rw-r--r--  1 xxxx  staff  79699 Oct  8 19:53 lewis-carroll.aac
    $ date; head -c 305 ~/Downloads/lewis-carroll-lf.txt | time say -v Alex -o lewis-carroll.aac; date; ls -l lewis-carroll.aac
    Mon Oct  8 19:53:21 EDT 2018
    Command terminated abnormally.
           21.75 real         0.08 user         0.02 sys
    Mon Oct  8 19:53:43 EDT 2018
    -rw-r--r--  1 xxxx  staff  80865 Oct  8 19:53 lewis-carroll.aac
    

    Esto sugiere una obvia solución.... Yo voy a probar en un rato.


Aquí está mi entrada de corriente:

$ head -n 11 ~/Downloads/lewis-carroll-lf.txt
Alice was beginning to get very tired of sitting by her sister on the
bank, and of having nothing to do: once or twice she had peeped into the
book her sister was reading, but it had no pictures or conversations in
it, 'and what is the use of a book,' thought Alice 'without pictures or
conversations?'

So she was considering in her own mind (as well as she could, for the
hot day made her feel very sleepy and stupid), whether the pleasure
of making a daisy-chain would be worth the trouble of getting up and
picking the daisies, when suddenly a White Rabbit with pink eyes ran
close by her.
$ head -n 11 ~/Downloads/lewis-carroll-lf.txt | od -c
0000000    A   l   i   c   e       w   a   s       b   e   g   i   n   n
0000020    i   n   g       t   o       g   e   t       v   e   r   y    
0000040    t   i   r   e   d       o   f       s   i   t   t   i   n   g
0000060        b   y       h   e   r       s   i   s   t   e   r       o
0000100    n       t   h   e  \n   b   a   n   k   ,       a   n   d    
0000120    o   f       h   a   v   i   n   g       n   o   t   h   i   n
0000140    g       t   o       d   o   :       o   n   c   e       o   r
0000160        t   w   i   c   e       s   h   e       h   a   d       p
0000200    e   e   p   e   d       i   n   t   o       t   h   e  \n   b
0000220    o   o   k       h   e   r       s   i   s   t   e   r       w
0000240    a   s       r   e   a   d   i   n   g   ,       b   u   t    
0000260    i   t       h   a   d       n   o       p   i   c   t   u   r
0000300    e   s       o   r       c   o   n   v   e   r   s   a   t   i
0000320    o   n   s       i   n  \n   i   t   ,       '   a   n   d    
0000340    w   h   a   t       i   s       t   h   e       u   s   e    
0000360    o   f       a       b   o   o   k   ,   '       t   h   o   u
0000400    g   h   t       A   l   i   c   e       '   w   i   t   h   o
0000420    u   t       p   i   c   t   u   r   e   s       o   r  \n   c
0000440    o   n   v   e   r   s   a   t   i   o   n   s   ?   '  \n  \n
0000460    S   o       s   h   e       w   a   s       c   o   n   s   i
0000500    d   e   r   i   n   g       i   n       h   e   r       o   w
0000520    n       m   i   n   d       (   a   s       w   e   l   l    
0000540    a   s       s   h   e       c   o   u   l   d   ,       f   o
0000560    r       t   h   e  \n   h   o   t       d   a   y       m   a
0000600    d   e       h   e   r       f   e   e   l       v   e   r   y
0000620        s   l   e   e   p   y       a   n   d       s   t   u   p
0000640    i   d   )   ,       w   h   e   t   h   e   r       t   h   e
0000660        p   l   e   a   s   u   r   e  \n   o   f       m   a   k
0000700    i   n   g       a       d   a   i   s   y   -   c   h   a   i
0000720    n       w   o   u   l   d       b   e       w   o   r   t   h
0000740        t   h   e       t   r   o   u   b   l   e       o   f    
0000760    g   e   t   t   i   n   g       u   p       a   n   d  \n   p
0001000    i   c   k   i   n   g       t   h   e       d   a   i   s   i
0001020    e   s   ,       w   h   e   n       s   u   d   d   e   n   l
0001040    y       a       W   h   i   t   e       R   a   b   b   i   t
0001060        w   i   t   h       p   i   n   k       e   y   e   s    
0001100    r   a   n  \n   c   l   o   s   e       b   y       h   e   r
0001120    .  \n                                                        
0001122

1voto

Ashley Puntos 2261

Lo he intentado, pero no puedo reproducir este problema.

En mi máquina (también ejecuta 10.13.6 17G65):

$ date; time head -c 2000 /usr/share/dict/words | say -o words.aac; date; ls -l words.aac
Sun  7 Oct 2018 21:17:52 BST
real    0m2.630s
user    0m0.519s
sys 0m0.152s
Sun  7 Oct 2018 21:17:55 BST
-rw-r--r--  1 ashley  staff  532880  7 Oct 21:17 words.aac

Estoy usando /usr/share/dict/words (ver /usr/share/dict/README) porque no tengo lewis-carroll.txt. He sido incapaz de hacer say colgar.

Quizás say está ahogando en lewis-carroll.txt (pero sólo al enviar la salida a un archivo, lo que parece extraño)?

Dos ideas de la parte superior de mi cabeza para evitar esto, si el de arriba no ayuda...

  1. Enviar una frase a say a un tiempo, luego se recombinan los archivos de salida.

  2. O bien, tener say enviar al dispositivo de salida de audio, pero record que con, por ejemplo Audio Hijack.

(Bien escrito pregunta, por cierto: mucho detalle relevante, concisa presentado.)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X