【问题标题】:android play multiple soundsandroid播放多种声音
【发布时间】:2017-07-20 19:23:05
【问题描述】:

在我的安卓应用中,用户可以点击不同的视图来产生钢琴音色。我的声音存储在原始文件夹中 (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();



        }

【问题讨论】:

  • Soundpool 更适合这种类型的应用程序。

标签: android audio android-mediaplayer soundpool


【解决方案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() 方法并将代码放入您的函数中

希望对你有帮助

【讨论】:

  • 嗨,还是有同样的问题,我可以播放一些声音然后什么都没有播放。我查看了 LogCat 并观察到该警告: setSubtitleAnchor in MediaPlayer
【解决方案2】:

谢谢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();

【讨论】:

    猜你喜欢
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    相关资源
    最近更新 更多