2016-08-18 2 views
0

Ich versuche eine Lösung zu finden, warum mein Code nicht richtig funktioniert. Ich benutzte die Lösung von Recording synthesized text-to-speech to a file in Python, und es hat irgendwie nicht für mich gearbeitet. Die Frage ist, warum 2 Methoden/Funktionen text_to_wav und all_texts_to_files nicht für mich arbeiten.So speichern Sie die Ausgabe von PyTTSx in WAV-Datei

import json 
import pyttsx 
from openpyxl import load_workbook 
import subprocess 

class Ver2ProjectWithTTS(object): 

    def __init__(self): 
     self.list_merge = [] 

    def do_the_job(self): 
     self.read_json_file() 
     self.read_xml_file() 
     #self.say_something() 
     self.all_texts_to_files() 

    def read_json_file(self): 
     with open("json-example.json", 'r') as df: 
      json_data = json.load(df) 
      df.close() 
     for k in json_data['sentences']: 
      text_json = k['text'] 
      speed_json = int(k['speed']) 
      volume_json = float(k['volume']) 
      dict_json = {'text': text_json, 'speed': speed_json, 'volume': volume_json} 
      self.list_merge.append(dict_json) 

    def read_xml_file(self): 
     tree = et.parse('xml-example.xml') 
     root = tree.getroot() 
     for k in range(0, len(root)): 
      text_xml = root[k][0].text 
      speed_xml = int(root[k][1].text) 
      volume_xml = float(root[k][2].text) 
      dict_xml = {'text': text_xml, 'speed': speed_xml, 'volume': volume_xml} 
      self.list_merge.append(dict_xml) 

    def say_something(self): 
     for item in self.list_merge: 
      engine = pyttsx.init() 
      engine.getProperty('rate') 
      engine.getProperty('volume') 
      engine.setProperty('rate', item['speed']) 
      engine.setProperty('volume', item['volume']) 
      engine.say(cleared_text) 
      engine.runAndWait() 

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

    def all_texts_to_files(self): 
     for item in self.list_merge: 
      cleared_text = self.clear_text_from_underscores(item['text']) 
      self.text_to_wav(cleared_text, item['text']) 

if __name__ == '__main__': 
    a = Ver2ProjectWithTTS() 
    a.do_the_job() 

Fehlercode hier:

#In my project: 
line 91, in <module> a.do_the_job() 
line 21, in do_the_job self.all_texts_to_files() 
line 85, in all_texts_to_files self.text_to_wav(cleared_text, item['text']) 
line 80, in text_to_wav subprocess.call(["espeak", "-w"+file_name+".wav", text]) 
#in subprocess: 
line 523, in call return Popen(*popenargs, **kwargs).wait() 
line 711, in __init__ errread, errwrite) 
line 959, in _execute_child startupinfo) 
WindowsError: [Error 2] The system cannot find the file specified 
+0

ist es auf dem Weg? – dabhand

+0

Ja, es ist auf dem Weg. – degath

+0

Enthält das 'item ['text']' den Dateinamen mit vollem Pfad, wenn ja, versuche es mit 'file_name' innerhalb der' text_to_wav' Methode und überprüfe es – Mourya

Antwort

0

Vorausgesetzt, dass Sie auf einen Sieg os Python verwenden, Sie den vollständigen Pfad zum subprocess, und natürlich die volle Ausgabedatei Pfad angeben müssen zB;

espeak_path = "C:/Program Files/eSpeak/command_line/espeak.exe" 
file_name = "C:/temp/test" 
subprocess.call([espeak_path,"-w"+file_name+".wav", text]) 
+0

sys.path.insert (0, espeak_module) – pyaddict

+0

obwohl du möglicherweise ein sys.path für Python am Anfang enthalten, – pyaddict

+0

kann es beim Aufruf von Teilprozesse übersehen werden, die kein Problem auf einem Linux-Betriebssystem scheint. – pyaddict

-1
from gtts import gTTS 
import os 
tts = gTTS(text='hi how r u', lang='en') 
tts.save("good.wav") 
os.system("mpg321 good.wav") 

dieser Code ausgegeben wird in ur Python-Ordner gespeichert werden, in dem u installiert. für verschiedene Audio-Format nur Erweiterungsdatei ändern.

+0

Es scheint nicht zu speichern eine '.wav' Datei, weil Sie das Suffix angegeben haben. Für den gleichen Text haben die generierten Audiodateien unabhängig vom Suffix Bit für Bit identische Dateien. –

Verwandte Themen