我正在使用谷歌的非官方tts api创建一个TTS应用程序,它工作正常,但api一次最多只能处理100个字符,但我的应用程序可能必须发送包含多达300个字符的字符串。
这是我的代码
try {
String text = "bonjour comment allez-vous faire";
text=text.replace(" ", "%20");
String oLanguage="fr";
MediaPlayer player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource("http://translate.google.com/translate_tts?tl=" + oLanguage + "&q=" + text);
player.prepare();
player.start();
} catch (Exception e) {
// TODO: handle exception
}
所以我的问题是
如何检查字符串中的字符数,并仅发送100个字符限制内的完整字词。
如何检测第一组TTS何时完成,以便我可以发送第二组以避免两个语音相互重叠
我是否需要在此过程中使用Asynctask?
答案 0 :(得分:0)
1.如何检查字符串中的字符数,并仅发送100个字符限制内的完整单词。
ArrayList<String> arr = new ArrayList<String>();
int counter = 0;
String textToSpeach = "Your long text";
if(textToSpeach.length()>100)
{
for(int i =0 ; i<(textToSpeach.length()/100)+1;i++)
{
String temp = textToSpeach.substring(0+counter,99+counter);
arr.add(temp.substring(0, temp.lastIndexOf(" ")));
counter = counter + 100;
}
}
2.如何检测第一组TTS何时完成,以便我可以发送第二组以避免两种语音相互重叠
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// pass next block
}
});
3.我是否需要在此过程中使用Asynctask?
现在我没有看到任何需要。
答案 1 :(得分:0)
简单:这不是公共API,不要使用它。使用Andorid的内置TTS引擎进行语音合成。它没有字符串长度限制。