Al usar el comando say
puedo darle una opción -o (file name)
para que se grabe en un archivo. Sin embargo, eso suprime la salida de audio.
¿Hay una manera de hacer que haga ambas cosas en un solo comando?
Al usar el comando say
puedo darle una opción -o (file name)
para que se grabe en un archivo. Sin embargo, eso suprime la salida de audio.
¿Hay una manera de hacer que haga ambas cosas en un solo comando?
Parece difícil o imposible con el comando say
incorporado.
Es posible que puedas redirigir el audio de say
a un AUNetSend que escucha que a su vez escribe a disco y reproduce el audio; vea el secuestro de audio a continuación.
Puede usar el código abierto espeak
y ffplay
herramientas para lograr esto. El siguiente comando dice "Hola mundo" y crea un archivo .wav
de la grabación:
espeak --stdout "hello world" | tee -a hello.wav | ffplay -i -
El comando combina tres herramientas:
espeak
convierte el texto en audio. tee
se usa para desviar una copia de stdout
a un archivo. ffplay
reproduce el audio. espeak
puede leer desde un archivo o página web usando el indicador f
:
espeak --stdout -f myfile.txt | tee -a myfile.wav | ffplay -i -
Otra herramienta como ffmpeg
o iTunes se puede usar para convertir el archivo wav
en un archivo MP3 o AAC.
Para instalar espeak y ffplay, usa HomeBrew o MacPorts . Con HomeBrew configurado, el comando de instalación es:
brew install espeak ffmpeg
Como alternativa, una buena opción es utilizar una herramienta de terceros como Secuestro de audio :
Graba cualquier audio, con Audio Hijack! Guarde el audio desde aplicaciones como iTunes, Skype o Safari, o desde dispositivos de hardware como micrófonos y mezcladores.
Esta captura de pantalla muestra a Audio Hijack tomando salida de Skype, grabando en un disco y reproduciendo a través del altavoz.
En un comando con el comando say
incorporado, no; en dos comandos integrados ( say
y afplay
), sí:
$ say -o /tmp/output-file.aiff Hello
$ afplay /tmp/output-file.aiff
En mi ejemplo, esto introduce un retraso muy pequeño:
$ time sh -c "say Hello"
real 0m0.778s
user 0m0.008s
sys 0m0.012s
$ time sh -c "say -o /tmp/output-file.aiff Hello && afplay /tmp/output-file.aiff"
real 0m1.048s
user 0m0.050s
sys 0m0.048s
Lea otras preguntas en las etiquetas command-line