myc_100 2013-08-08 06:41 采纳率: 10%
浏览 896

Android:调整 SounPool 和TTS

我在 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呢?

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-11 15:35
    关注

    为了在播放 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。

    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建