2012-03-28 31 views
7

Próbuję znaleźć sposób, aby wziąć syntezator mowy i nagrać go do pliku audio. Obecnie używam pyttsx jako mojej biblioteki do zamiany tekstu na mowę, ale nie ma mechanizmu zapisywania danych wyjściowych do pliku, a jedynie odtwarzania bezpośrednio z głośników. Zajrzałem do detecting and recording audio oraz PyAudio, ale wydaje się, że pobierają one dane z mikrofonu, a nie przekierowują dźwięk wychodzący do pliku. Czy istnieje znany sposób na zrobienie tego?Nagrywanie zsyntetyzowanego zamiany tekstu na mowę w pliku w języku Python

Odpowiedz

4

Można wywołać espeak z argumentem -w przy użyciu subprocess.

import subprocess 

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

textToWav('hello world','hello') 

Spowoduje to zapis file_name.wav bez czytania na głos. Jeśli twój tekst znajduje się w pliku (na przykład text.txt), musisz zadzwonić espeak z parametrem -f ("-f" + tekst). Zalecam przeczytanie espeak man pages, aby zobaczyć wszystkie dostępne opcje.

Mam nadzieję, że to pomoże.

+0

niesamowite, że zrobił sztuczka! Dzięki! – petrichor

1

Możesz użyć bardziej zaawansowanego opakowania SAPI do zapisania danych wyjściowych do pliku wav. Na przykład można spróbować

https://github.com/DeepHorizons/tts

Kod powinien wyglądać następująco:

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

Oto przykład, który daje dostęp do 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) 
Powiązane problemy