MediaPlayer:声音在彼此之上播放
MediaPlayer: Sounds playing over the top of each other
我有一个带有多个按钮(大约 17 个)的音板,每个按钮都链接到一个 .mp3 声音。
问题是当一个声音正在播放时我按下另一个按钮,两者都在后台播放。
我希望能够在按下不同的按钮时停止播放声音并开始播放新的声音。另外,是否可以通过再次按下按钮来停止当前正在播放的声音?
另外,我不太喜欢这样的代码部分:private MediaPlayer[] mPlayers = new MediaPlayer[17];
数字(在本例中为 17)决定了声音可以播放的次数。在那之后,似乎无法再播放任何声音。有没有办法使这个无限期?
我没有粘贴我的 activity 中的所有代码,而是附上了重要代码并按照它在我的 activity 上出现的顺序对其进行了编号。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;
}
}
您似乎没有停止当前正在播放的 MediaPlayer。 startSound(id) 不会停止当前播放的声音。在
finally {
++mNextPlayer;
mNextPlayer %= mPlayers.length;
}
您将计数器移动到数组中的下一个玩家,下次您进入 startSound() 方法时,您的计数器不会指向先前启动的玩家,因此它无法停止它。
我有一个带有多个按钮(大约 17 个)的音板,每个按钮都链接到一个 .mp3 声音。
问题是当一个声音正在播放时我按下另一个按钮,两者都在后台播放。
我希望能够在按下不同的按钮时停止播放声音并开始播放新的声音。另外,是否可以通过再次按下按钮来停止当前正在播放的声音?
另外,我不太喜欢这样的代码部分:private MediaPlayer[] mPlayers = new MediaPlayer[17];
数字(在本例中为 17)决定了声音可以播放的次数。在那之后,似乎无法再播放任何声音。有没有办法使这个无限期?
我没有粘贴我的 activity 中的所有代码,而是附上了重要代码并按照它在我的 activity 上出现的顺序对其进行了编号。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;
}
}
您似乎没有停止当前正在播放的 MediaPlayer。 startSound(id) 不会停止当前播放的声音。在
finally {
++mNextPlayer;
mNextPlayer %= mPlayers.length;
}
您将计数器移动到数组中的下一个玩家,下次您进入 startSound() 方法时,您的计数器不会指向先前启动的玩家,因此它无法停止它。