Come rendere "dire" il comando parla E restituisce il file allo stesso tempo

4

Quando si utilizza il comando say , posso assegnargli un'opzione -o (file name) affinché registri su un file. Tuttavia, ciò sopprime l'uscita audio.

C'è un modo per farlo eseguire entrambi in un unico comando?

    
posta redFur 21.08.2015 - 13:15
fonte

2 risposte

3

Sembra difficile o impossibile con il comando built-in say .

Potresti essere in grado di reindirizzare l'audio da say ad un ascolto AUNetSend che a sua volta scrive su disco e suona l'audio; vedi Audio Hijack di seguito.

espeak e ffplay

Puoi utilizzare l'open source espeak e ffplay strumenti per raggiungere questo obiettivo. Il seguente comando dice "Hello world" e crea un file .wav della registrazione:

espeak --stdout "hello world" | tee -a hello.wav | ffplay -i -

Il comando combina tre strumenti:

  • espeak converte il testo in audio.
  • tee è usato per deviare una copia di stdout in un file.
  • ffplay riproduce l'audio.

espeak può leggere da un file o da una pagina Web utilizzando il flag f :

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

È possibile utilizzare un altro strumento come ffmpeg o iTunes per convertire il file wav in un file MP3 o AAC.

install

Per installare espeak e ffplay, usa HomeBrew o MacPorts . Con HomeBrew impostato, il comando install è:

brew install espeak ffmpeg

Hijack audio

In alternativa, una buona opzione è utilizzare uno strumento di terze parti come Hijack audio :

Record any audio, with Audio Hijack! Save audio from applications like iTunes, Skype or Safari, or from hardware devices like microphones and mixers.

Questa schermata mostra Audio Hijack in uscita da Skype, registrazione su disco e riproduzione attraverso l'altoparlante.

    
risposta data 21.08.2015 - 13:38
fonte
4

In un comando con il comando say incorporato, no; in due comandi incorporati ( say e afplay ), sì:

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

Nel mio esempio, questo introduce un ritardo molto piccolo:

$ 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
    
risposta data 06.10.2018 - 22:45
fonte

Leggi altre domande sui tag