0

アクティビティでこの単純なメソッドを定義します。

private void playSound(final boolean ttsOn) {
    // TODO Auto-generated method stub
    int water = 0;      
    SoundPool pl;
    pl = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);

    water = pl.load(this, R.raw.water_boiling, 0);

    pl.setOnLoadCompleteListener(new OnLoadCompleteListener() {

        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
            // TODO Auto-generated method stub
            soundPool.play(sampleId, 1f, 1f, 0, 0, 1);
            if(ttsOn)
                speakOut();
        }
    });

これはどこですかspeakOut()

private void speakOut() {

    tts.setLanguage(Locale.ITALIAN);
    tts.speak(n.Message, TextToSpeech.QUEUE_FLUSH, null);
} 

しかし、これは私のmp3ファイルを再現し、私のttsは同時に話します。

質問は次のとおりです。

mp3 の後に tts を再現するにはどうすればよいですか?

4

2 に答える 2

1

サウンド ファイルの長さを把握し、R.raw.water_boilingこの長さのカウントダウン タイマーを設定して、電話speakOut()をかけonFinish()ます。

于 2013-04-23T07:31:53.987 に答える
0

私はこの方法で問題を解決します:

private void playSound(final boolean ttsOn) {
    // TODO Auto-generated method stub
    int water = 0;      
    SoundPool pl;
    pl = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);

    water = pl.load(this, R.raw.system_alert_003, 0);



    pl.setOnLoadCompleteListener(new OnLoadCompleteListener() {

        @Override
        public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
            // TODO Auto-generated method stub
            soundPool.play(sampleId, 1f, 1f, 0, 0, 1);
            if(ttsOn)
            {
                myMediaTimer = new Timer();
                myMediaTimer.schedule(new TimerTask() {         
                    @Override
                    public void run() {
                        speakOut();
                    }

                }, DURATION_MEDIA_FILE);

            }
        }
    });


    Log.i("onCrete","WATER FILE: "+water);

}

これには、mp3 ファイルの長さの知識が必要な場合でも。

于 2013-04-23T10:38:08.833 に答える