Soundpool样本没准备好

Ste*_*teD 23 android soundpool

我有一个.wav文件,我想在我的游戏中使用,目前我正在加载onCreate()游戏中每个活动的声音.

 soundCount = soundpool.load(this,R.raw.count, 1);
Run Code Online (Sandbox Code Playgroud)

活动开始后将播放声音.

  soundpool.play(soundCount, 0.9f, 0.9f, 1, -1, 1f);
Run Code Online (Sandbox Code Playgroud)

问题有时我会遇到错误"sample x not ready".是否可以在开始游戏时加载.wav文件并将其保存在内存中并在以后的游戏中使用它?或者是否可以等待1-2秒以使声音加载完成?

Ebo*_*ike 34

你需要通过添加一个监听器来等待它完成SoundPool.setOnLoadCompleteListener.

  • 不幸的是,在API 8之前,setOnLoadCompleteListener不可用:(除了使用setOnLoadCompleteListener之外,还有其他众所周知的解决方案吗?/ thanks (7认同)

Lis*_*tso 5

由于我的项目与Android 1.5兼容,我无法使用setOnLoadCompleteListener,因此我解决了延迟播放声音的问题.我的源代码如下:

    playSound_Delayed(soundId, 100);
Run Code Online (Sandbox Code Playgroud)

//(..)

private void playSound_Delayed (final int soundId, final long millisec) {
    // TIMER
    final Handler mHandler = new Handler();
    final Runnable mDelayedTimeTask = new Runnable() {
    int counter = 0;
    public void run() {
        counter++;

        if (counter == 1) {
            boolean ret = mHandler.postDelayed(this, millisec); 
            if (ret==false) Log.w("playSound_Delayed", "mHandler.postAtTime FAILED!");
       } else {
           playSound(soundId);
       }
    }
    };
    mDelayedTimeTask.run();
}
Run Code Online (Sandbox Code Playgroud)