1

我正在尝试加载在特定事件发生时播放的音效。

出于某种原因,我可以听到声音,但它不能播放整个文件,并且会在中间刹车。

我的声音代码:

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();
4

2 回答 2

3

好吧,经过几天的疑惑和很多挫折后,我发现我的问题是 MediaPlayer.create() 没有太多时间将文件加载到内存中......它发生是因为 create() 并开始() 几乎同时被调用..

我的建议是在加载应用程序时加载所有声音文件,并在需要时调用 start()。构建某种 SoundManager 类。

感谢大家 !希望它会帮助别人!

于 2012-08-26T20:51:46.880 回答
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);
于 2012-08-26T20:29:13.607 回答