2012-03-28 10 views
7

Estoy intentando encontrar una forma de tomar un discurso sintetizado y grabarlo en un archivo de audio. Actualmente estoy usando pyttsx como mi biblioteca de texto a voz, pero no hay un mecanismo para guardar la salida en un archivo, solo reproducirlo directamente desde los altavoces. He investigado detecting and recording audio y PyAudio, pero parece que reciben información de un micrófono en lugar de redirigir el audio saliente a un archivo. ¿Hay alguna manera conocida de hacer esto?Grabación de texto a voz sintetizado en un archivo en Python

Respuesta

4

Puede llamar al espeak con el argumento -w usando subprocess.

import subprocess 

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

textToWav('hello world','hello') 

Esto escribirá file_name.wav sin leer en voz alta. Si su texto está en un archivo (por ejemplo, text.txt), necesita llamar a espeak con el parámetro -f ("-f" + texto). Recomiendo leer el espeak man pages para ver todas las opciones que tiene.

Espero que esto ayude.

+0

impresionante, que hizo ¡el truco! ¡Gracias! – petrichor

1

Puede utilizar un contenedor SAPI más avanzado para guardar la salida en el archivo wav. Por ejemplo, usted puede intentar

https://github.com/DeepHorizons/tts

El código debería tener este aspecto:

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

Este es un ejemplo que le da acceso a la 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) 
Cuestiones relacionadas