控制Google TTS API的输入

时间:2012-04-17 10:55:42

标签: android string android-asynctask media-player google-api

我正在使用谷歌的非官方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
    }

所以我的问题是

  1. 如何检查字符串中的字符数,并仅发送100个字符限制内的完整字词。

  2. 如何检测第一组TTS何时完成,以便我可以发送第二组以避免两个语音相互重叠

  3. 我是否需要在此过程中使用Asynctask?

2 个答案:

答案 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引擎进行语音合成。它没有字符串长度限制。