0

Google の非公式 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

シンプル:これはパブリックAPIではないため、使用しないでください。Andoridの組み込みTTSエンジンを音声合成に使用します。文字列の長さの制限はありません。

于 2012-04-17T13:18:47.630 に答える
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 の最初のグループが終了したことを検出して、2 番目のグループを送信して両方の音声が互いに重ならないようにするにはどうすればよいですか?

    player.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) {

            // pass next block
        }
    });

3.このプロセスに Asynctask を使用する必要はありますか?

今のところ、その必要はないと思います。

于 2012-04-17T11:09:45.120 に答える