我在 Activity 中定义了下面的方法:
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呢?
为了在播放 mp3 文件之后再播放 TTS,您可以使用 setOnCompletionListener() 方法来监听 mp3 文件的播放完成事件。在这个回调函数中,您可以调用 speakOut() 方法来播放 TTS。
需要修改 playSound 中的代码:
pl.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
// TODO Auto-generated method stub
soundPool.setOnCompletionListener(new SoundPool.OnCompletionListener() {
@Override
public void onCompletion(SoundPool soundPool) {
if(ttsOn) speakOut();
}
});
soundPool.play(sampleId, 1f, 1f, 0, 0, 1);
}
});
这样在mp3 播放完成后tts会运行, 实现了mp3播放完毕再运行tts。