【发布时间】:2015-12-31 09:06:22
【问题描述】:
我制作了一种播放 mp3 格式声音的方法(最大文件大小为 145kb)。当游戏中发生事件时,我只需将文件发送到此方法。每当调用它时,它都会创建一个新的媒体播放器实例,然后在完成时释放该实例。 我的问题是,对于模拟器和我的手机,当我同时播放 2 种声音时,声音要么跳过(如刮擦的 CD),要么根本不播放一种声音,或者有时它确实有效。
是线程超载还是什么?我有三星 Galaxy s3。 我应该改用soundpool吗?我听说它有自己的问题
public class MediaSimultaneous {
private MediaPlayer[] mediaPlayerArray = new MediaPlayer[10];
private AudioManager mAudioManager;
int playerNum = -1; // Array index of the player instance.
public void playSound(Context context, int audioId) {
if (mAudioManager == null) {
mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
}
playerNum += 1;
mediaPlayerArray[playerNum] = MediaPlayer.create(context, audioId);
mediaPlayerArray[playerNum].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
mediaPlayerArray[playerNum] = null;
playerNum -= 1;
if (playerNum <= 0) {
playerNum = 0;
}
}
});
}
});
}
【问题讨论】:
标签: java android audio android-mediaplayer