Android-我如何从合成器文件中保存更长的TTS波文件?

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

使用从TTS渲染wav文件的典型方法

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