我有一个游戏,我使用单独的MediaPlayer每种声音的MediaPlayer停止播放任何
这就是:
public class SoundSample {
public final static String CORRECT="sounds/correct.wav";
public final static String PASS="sounds/pass.wav";
public final static String CLOCK_OUT="sounds/clock_out.mp3";
public final static String ALARM="sounds/alarm.mp3";
public final static String COUNTDOWN_TO_START="sounds/countdown_to_start.mp3";
public final static String GO="sounds/go.mp3";
private String assetFile;
private MediaPlayer mediaPlayer;
public SoundSample(String sound){
assetFile = sound;
try {
AssetFileDescriptor afd = MainActivity.activity.getAssets().openFd(sound);
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mediaPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void play(){
if (mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.start();
}
public void release(){
mediaPlayer.release();
mediaPlayer.reset();
mediaPlayer = null;
}
}
所以,我用
correctSound = new SoundSample(SoundSample.CORRECT);
然后 correctSound.play();
因此,第二次使用它会停止在许多手机上播放,再玩一次。我的意思是,调试器显示mediaPlayer.start();
被执行,但声音从不再播放。 它工作得很好,不过,我每次测试的Android手机6上,所以它可能只是一个机器人6或5问题
有没有什么办法可以解决这个?我知道我可以使用的Soundpool,但它也有一些问题
哦,你的意思是,设定数据源每次?那不是太多的快速声音的工作吗? – user2976267
这是正确的。我只是想添加到这个答案。 @ user2976267你真的需要'MediaPlayer'吗?有许多独立的'MediaPlayers'将会对系统造成很大影响。如果你的声音很小,你可以使用'SoundPool'来处理很多小的声音文件。 – Ekalips
@ user2976267阅读这个http://stackoverflow.com/questions/13527134/audiotrack-soundpool-or-mediaplayer-which-should-i-use(埃尔维斯波波维奇的答案) – Ekalips