2016-08-18 2 views
0

코드가 제대로 작동하지 않는 해결책을 찾으려고합니다. 나는 Recording synthesized text-to-speech to a file in Python에서 해결책을 사용하고, 그것은 저를 위해 약간 일하지 않았다. 질문은 왜 2 개의 메소드/함수 text_to_wav와 all_texts_to_files가 나에게 효과가 없는지입니다. 여기PyTTSx의 출력을 wav 파일에 저장하는 방법

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() 

오류 코드 :

#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

은 경로의 espeak입니까? – dabhand

+0

예, 경로에 있습니다. – degath

+0

'item [ 'text']'파일 이름에 전체 경로가 포함되어 있습니까? 그렇다면'text_to_wav' 메서드 내에서'file_name'을 출력하고 – Mourya

답변

0

당신이 하위 프로세스에 물론 전체 출력 파일 경로를 전체 경로를 지정해야합니다 , 당신은 승리의 운영 체제에 파이썬을 사용하는 가정 예;

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

처음에는 파이썬을위한 sys.path가 포함되어있을 수도 있습니다. – pyaddict

+0

리눅스 운영체제에서 문제가되지 않는 서브 프로세스를 호출 할 때 간과 될 수 있습니다. – 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") 

이 코드 는 출력 U가 설치 UR 파이썬 폴더에 저장됩니다 것입니다. 다양한 오디오 형식의 은 확장 파일 만 변경합니다.

+0

접미사를 지정했기 때문에'.wav' 파일을 저장하는 것 같지 않습니다. 같은 텍스트의 경우, 생성 된 오디오 파일은 접미사에 관계없이 비트 단위로 동일한 파일을 갖습니다. –

관련 문제