Android-我如何从合成器文件中保存更长的TTS波文件?
使用从TTS渲染wav文件的典型方法Android-我如何从合成器文件中保存更长的TTS波文件?,android,text-to-speech,Android,Text To Speech,使用从TTS渲染wav文件的典型方法 HashMap<String, String> myHashRender = new HashMap(); myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, translatedtexttodisplay); tts.synthesizeToFile(translatedtexttodisplay, myHashRende
HashMap<String, String> myHashRender = new HashMap();
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, translatedtexttodisplay);
tts.synthesizeToFile(translatedtexttodisplay, myHashRender, destFileName);
HashMap myHashRender=newhashmap();
myHashRender.put(TextToSpeech.Engine.KEY\u PARAM\u outrance\u ID,translatedtexttodisplay);
synthezetofile(translatedtexttodisplay、myHashRender、destFileName);
我通常得到44字节的文件,没有数据。我确实从单字TTS输出中获得了可行的文件(以千字节为单位)。我做错了什么?对于那些遵循这一思路的人来说,答案是 SetOnPatternanceProgressListener在调用合成WAV之前;然后将所有实际复制到文件的操作放在侦听器的onDone()方法中。这样它就不会过早地写出文件,严重地截断它 写出来很长很难看,但重要的部分在这里:
HashMap<String, String> myHashRender = new HashMap();
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "id");
tts.setOnUtteranceProgressListener(new TtsUtteranceListener());
tts.synthesizeToFile(translatedtexttodisplay, myHashRender, destFileName);
此外,我还使用了
// wait here for file to be created
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
showToast("Oops! Exception!");
e.printStackTrace();
}
当然。重要的是,这似乎就是解决问题的方法。您是否设置了一个
onutternanceProgressListener
?如果没有它,TTS有时会行为不端。你也可能试图在文件写完之前打开它。我很惊讶有701人看到了这个帖子,而没有人选择评论。奇怪的
// wait here for file to be created
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
showToast("Oops! Exception!");
e.printStackTrace();
}