0

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

4

2 回答 2

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吗?

现在我认为没有任何必要。

于 2012-04-17T11:09:45.120 回答
0

简单:这不是公共 API,不要使用它。使用 Andorid 的内置 TTS 引擎进行语音合成。它没有字符串长度限制。

于 2012-04-17T13:18:47.630 回答