10 votos

¿Cómo hacer que el comando "say" hable Y genere resultados en el archivo al mismo tiempo?

Cuando uso el comando say puedo darle una opción -o (nombre del archivo) para que grabe en un archivo. Sin embargo, eso suprime la salida de audio.

¿Hay alguna forma de hacer que haga ambas cosas en un solo comando?

8voto

dangerousdave Puntos 111

En un solo comando con el comando incorporado say, no; en dos comandos incorporados (say y afplay), sí:

$ say -o /tmp/output-file.aiff Hola
$ afplay /tmp/output-file.aiff

En mi ejemplo, esto introduce un pequeño retraso:

$ time sh -c "say Hola" 

real    0m0.778s
user    0m0.008s
sys 0m0.012s

$ time sh -c "say -o /tmp/output-file.aiff Hola && afplay /tmp/output-file.aiff"

real    0m1.048s
user    0m0.050s
sys 0m0.048s

4voto

Steve Evans Puntos 155

Parece difícil o imposible con el comando say incorporado.

Puede ser capaz de redirigir el audio de say a través de un AUNetSend que a su vez escribe en disco y reproduce el audio; consulte Audio Hijack a continuación.

espeak y ffplay

Puede usar las herramientas de código abierto espeak y ffplay para lograr esto. El siguiente comando tanto dice "Hola mundo" como crea un archivo .wav de la grabación:

espeak --stdout "hola mundo" | tee -a hola.wav | ffplay -i -

El comando combina tres herramientas:

  • espeak convierte el texto en audio.
  • tee se utiliza para desviar una copia de stdout a un archivo.
  • ffplay reproduce el audio.

espeak puede leer desde un archivo o página web utilizando la bandera f:

espeak --stdout -f myfile.txt | tee -a myfile.wav | ffplay -i -

Otra herramienta como ffmpeg o iTunes se puede utilizar para convertir el archivo wav a un archivo MP3 o AAC.

Instalación

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

brew install espeak ffmpeg

Audio Hijack

Alternativamente, una buena opción es utilizar una herramienta de terceros como Audio Hijack:

¡Grabe cualquier audio con Audio Hijack! Guarde audio de aplicaciones como iTunes, Skype o Safari, o de dispositivos de hardware como micrófonos y mezcladores.

Esta captura de pantalla muestra Audio Hijack tomando la salida de Skype, grabando en disco y reproduciendo a través del altavoz.

Audio Hijack dividiendo audio

0 votos

¡Gracias por la extensa y fantástica respuesta! Sin embargo, estoy tratando de hacer algo muy específico con el comando "say".

0 votos

Entonces, Audio Hijack y enrutar a través del módulo AUNetSend probablemente sea tu mejor opción. Buena suerte.

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