gpt4 book ai didi

java - Android MediaPlayer 在同时播放两种声音时有时会跳过或失败

转载 作者:行者123 更新时间:2023-12-03 01:59:27 25 4
gpt4 key购买 nike

我制作了一种播放 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;

}
}
});
}
});

}

最佳答案

我发现这是两个不同的问题。口吃是由于 mediaPlayer 中有一个有据可查的错误,有时根本不播放是由于 onPrepared 没有被调用。这段代码解决了这个问题。我不确定到底是怎么回事。可能是因为在创建 onPreparedListener 之前正在准备媒体。

        mediaPlayerArray[playerNum] = new MediaPlayer();
Uri mediaFile;
mediaFile = Uri.parse("android.resource://com.adventureapps.borntorun/" + audioId);
try {
mediaPlayerArray[playerNum].setDataSource(context, mediaFile);
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayerArray[playerNum].setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayerArray[playerNum].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp1) {
mp1.start();
Log.d(TAG, "mediaplayer " + Integer.toString(playerNum) + " started");
}
});
try {
mediaPlayerArray[playerNum].prepare();
} catch (IOException e) {
e.printStackTrace();
}

关于java - Android MediaPlayer 在同时播放两种声音时有时会跳过或失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32919289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com