Android:协调SounPool和TTS

Posted

技术标签:

【中文标题】Android:协调SounPool和TTS【英文标题】:Android: Coordinate SounPool and TTS 【发布时间】:2013-04-23 07:11:33 【问题描述】:

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

【问题讨论】:

我从来没有用过这个,但也许就是这样。你能添加 if 条件 status == 0 developer.android.com/reference/android/media/… 你也可以看看这个***.com/questions/4436055/… 【参考方案1】:

您应该知道您的声音文件R.raw.water_boiling 的持续时间,为此持续时间设置一个倒计时并在onFinish() 中调用speakOut()

【讨论】:

【参考方案2】:

我是这样解决问题的:

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 文件的持续时间。

【讨论】:

以上是关于Android:协调SounPool和TTS的主要内容,如果未能解决你的问题,请参考以下文章

Android嵌套滚动与协调滚动的几种实现方式

Android 协调者布局:ConstraintLayout Barrier

Android 协调者布局 DimensionRatio

android - 协调启动其他应用程序的意图

Android开发笔记(一百三十四)协调布局CoordinatorLayout

android CoordinatorLayout使用