有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MediaPlayer:声音相互叠加

我有一个带有多个按钮(大约17个)的音板,每个按钮都链接到一个按钮。mp3声音

问题是,当一个声音播放时,我按下另一个按钮,这两个按钮都在后台播放

我想能够停止播放声音,并启动新的一个时,一个不同的按钮被按下。此外,是否有能力通过再次按下按钮来停止当前播放的声音

另外,我也不太喜欢这样的代码:private MediaPlayer[]mPlayers=new MediaPlayer[17]

数字(在本例中为17)决定了可以播放声音的次数。之后,似乎再也不能播放声音了。有没有一种方法可以使这个不确定

我没有粘贴我活动中的所有代码,而是附加了突出的代码,并按照它在主要活动中出现的顺序对其进行编号。java文件

谢谢大家的帮助

    private int mNextPlayer = 0;


2) a.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.startAnimation(animAlpha);

                startSound(R.raw.likethebattle);

            }

        });


3) public void onDestroy() {
        super.onDestroy(); // <---------------------- This needed to be there
        for (int i = 0; i < mPlayers.length; ++i)
            if (mPlayers[i] != null)
                try {
                    mPlayers[i].release();
                    mPlayers[i] = null;
                } catch (Exception ex) {
                    // handle...
                }
    }

4)    private void startSound(int id) {
        try {


            if (mPlayers[mNextPlayer] != null) {

                mPlayers[mNextPlayer].reset();
                mPlayers[mNextPlayer].prepare();

                mPlayers[mNextPlayer].stop();
                mPlayers[mNextPlayer].release();
                mPlayers[mNextPlayer] = null;
            }
            mPlayers[mNextPlayer] = MediaPlayer.create(this, id);
            mPlayers[mNextPlayer].start();
        } catch (Exception ex) {
            // handle
        } finally {
            ++mNextPlayer;
            mNextPlayer %= mPlayers.length;
        }

    }


共 (1) 个答案

  1. # 1 楼答案

    看起来你现在正在玩MediaPlayer。startSound(id)当前不会停止播放声音。在里面 finally { ++mNextPlayer; mNextPlayer %= mPlayers.length; } 将计数器移动到数组中的下一个玩家,下次输入startSound()方法时,计数器不会指向之前启动的玩家,因此无法阻止它