当您播放多一个声音时如何停止媒体播放器?

时间:2015-12-02 19:41:53

标签: android audio android-studio android-mediaplayer

我的应用程序是一个音乐键盘,允许用户通过按下将播放特定声音的按钮来创建自己的音乐,如果用户按下多个按钮,则会有更多声音同时播放。

我想在调用onPause()时停止所有声音。但我意识到,如果同一个媒体播放器对象播放多个声音,它只会停止归因于它的最后一个声音,而其他声音则继续播放。

用户接听电话并让我的应用听起来仍在播放会非常不愉快:p

任何帮助都将不胜感激。

@Override
protected void onPause() {
    super.onPause();

    try {
        while (mMediaPlayer.isPlaying()) {
            mMediaPlayer.stop();
            mMediaPlayer.release();
       }
    }catch (IllegalStateException e){

//Do nothing

      }

    }

修改

我尝试实现SoundPool API,但由于我的应用程序非常动态(用户可以上传他们的样本并使用麦克风录制)。我已经实现了一切并且运行良好,现在将其更改为另一个API而不是MediaPlayer会很麻烦。 有没有办法阻止归因于MediaPlayer对象并且当前正在播放的所有声音?可能访问其他一些类并使用其他方法来阻止所有声音?

2 个答案:

答案 0 :(得分:0)

我建议您查看SoundPool API。它看起来很适合您的任务。它允许您预加载声音文件并独立播放它们。

  

SoundPool类管理和播放应用程序的音频资源。

     

SoundPool是一组样本,可以从APK内部的资源或文件系统中的文件加载到内存中。 SoundPool库使用MediaPlayer服务将音频解码为原始的16位PCM单声道或立体声流。这允许应用程序附带压缩流,而不必承受CPU负载和播放期间解压缩的延迟。

答案 1 :(得分:0)

经过一些研究和反复试验后,我发现没有办法阻止同一个MediaPlayer物体播放的所有声音,你只能控制归于它的最后声音,所有其他声音继续直到他们结束或应用程序被破坏。

好的,我做的是:

我为音乐键盘的每个键音创建了一个对象,并使用以下代码覆盖onPause():

@Override
protected void onPause() {
    super.onPause();


    if (mAudioManager.isMusicActive()){
        for (MediaPlayer aMMediaPlayer : mMediaPlayer) {
            if (aMMediaPlayer != null) {
                try {
                    if (aMMediaPlayer.isPlaying()) {
                        aMMediaPlayer.stop();
                        aMMediaPlayer.release();
                    }
                } catch (IllegalStateException e) {

                    //Do nothing
                }
            }

        }
    }

}