android播放多个声音

时间:2017-07-20 19:23:06

标签: android audio android-mediaplayer soundpool

在我的Android应用中,用户可以点击不同的视图来制作钢琴音色。我的声音存储在原始文件夹(do_note.mp3,re_note.mp3,...)

我的问题是,当用户点击视图时,会产生声音但是在6或7次点击后声音停止并且之后不再发出声音。 这是我的功能代码:

public int playSound(String tag){



            id = context.getResources().getIdentifier(tag, "raw", context.getPackageName());


            int soundId = sp.load(context, id,1);

            MediaPlayer mPlayer = MediaPlayer.create(context,id);

            mPlayer.start();



        }

2 个答案:

答案 0 :(得分:1)

始终检查mPlayer是否已停止

        @Override
        public void onClick(View v) {

            if(mPlayer.isPlaying())
            {  
                mPlayer.stop();
                mPlayer.reset();
            } 
            try {

                AssetFileDescriptor afd;
                afd = getAssets().openFd("your.sound");
                mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
                mPlayer.prepare();
                mPlayer.start();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    });

您可以更改onClick()方法并将代码放入函数

希望这有助于你

答案 1 :(得分:1)

感谢JakSok

你的回答指导我找到解决方案,事实上我必须为我的MediaPlayer调用重置和释放方法,这是我的解决方案:

 if(mPlayer.isPlaying()) {
        mPlayer.stop();
    }

        int id = getResources().getIdentifier(fileName, "raw", getPackageName());
        mPlayer.reset();
        mPlayer.release();
        mPlayer = MediaPlayer.create(this,id);
        mPlayer.start();