我正在尝试加载特定事件发生时播放的声音效果。
出于某种原因,我可以听到声音,但它不会播放整个文件,而是在中间刹车。
我的声音代码:
public class SoundManager {
private Context context;
private int nudgeSound = R.raw.nudge;
public SoundManager(Context context)
{
this.context = context;
}
public void playNudgeSound()
{
final MediaPlayer mediaPlayer = MediaPlayer.create(context, nudgeSound);
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mediaPlayer.reset();
}
});
mediaPlayer.start();
}
}
我的初始化:
SoundManager soundManager = new SoundManager(this);
soundManager.playNudgeSound();
答案 0 :(得分:3)
好几天后,我想知道我的问题是MediaPlayer.create()没有太多时间将文件加载到内存中... 之所以发生这种情况,是因为几乎同时调用了create()和start()。
我的建议是在加载应用程序时加载所有声音文件,并在需要时调用start()。构建某种SoundManager类。
谢谢大家!希望它会帮助别人!
答案 1 :(得分:2)
你有没有考虑过使用SoundPool?!在我的应用程序中,这很好。
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);
SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_NOTIFICATION, 0);
int sound = soundPool.load(context, R.raw.beep, 1);
soundPool.play(sound, maxVolume, maxVolume, 1, 0, 1f);