2012-03-28 14 views
7

Sto tentando di trovare un modo per riprendere il parlato sintetizzato e registrarlo in un file audio. Attualmente sto usando pyttsx come libreria di sintesi vocale, ma non esiste un meccanismo per salvare l'output in un file, riproducendolo solo direttamente dagli altoparlanti. Ho esaminato detecting and recording audio e PyAudio, ma questi sembrano prendere input da un microfono piuttosto che reindirizzare l'audio in uscita su un file. C'è un modo noto per farlo?Registrazione sintesi vocale sintetizzata in un file in Python

risposta

4

È possibile chiamare espeak con l'argomento -w utilizzando subprocess.

import subprocess 

def textToWav(text,file_name): 
    subprocess.call(["espeak", "-w"+file_name+".wav", text]) 

textToWav('hello world','hello') 

Scriverà file_name.wav senza leggere ad alta voce. Se il tuo testo è in un file (ad es. Text.txt) devi chiamare espeak con il parametro -f ("-f" + testo). Ti consiglio di leggere lo espeak man pages per visualizzare tutte le opzioni disponibili.

Spero che questo aiuti.

+0

impressionante, che ha fatto il trucco! Grazie! – petrichor

1

È possibile utilizzare wrapper SAPI più avanzato per salvare l'output nel file wav. Per esempio si può provare

https://github.com/DeepHorizons/tts

Il codice dovrebbe essere così:

import tts.sapi 
voice = tts.sapi.Sapi() 
voice.set_voice("Joey") 
voice.create_recording('hello.wav', "Hello") 
2

Ecco un esempio che consente di accedere alle API NSSpeechSynthesizer

#!/usr/bin/env python 

from AppKit import NSSpeechSynthesizer 
import sys 
import Foundation 


if len(sys.argv) < 2: 
    text = raw_input('type text to speak> ') 
else: 
    text = sys.argv[1] 

nssp = NSSpeechSynthesizer 
ve = nssp.alloc().init() 
ve.setRate_(100) 
url = Foundation.NSURL.fileURLWithPath_('yourpath/test.aiff') 
ve.startSpeakingString_toURL_(text,url) 
Problemi correlati