Cómo hacer que el comando “decir” diga Y envíe el archivo al mismo tiempo

4

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?

    
pregunta redFur 21.08.2015 - 13:15

2 respuestas

3

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.

espeak and ffplay

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.

Instalar

Para instalar espeak y ffplay, usa HomeBrew o MacPorts . Con HomeBrew configurado, el comando de instalación es:

brew install espeak ffmpeg

Secuestro de audio

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.

    
respondido por el Graham Miln 21.08.2015 - 13:38
4

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
    
respondido por el user10543 06.10.2018 - 22:45

Lea otras preguntas en las etiquetas