2013-06-02 68 views
1

我在onCreateResources方法中加載了聲音。Andengine聲音僅適用於有時

try { 
    shield = MusicFactory.createMusicFromAsset(this.getMusicManager(), this, "shield.ogg"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

shield.setVolume(1.0f); 
shield.setLooping(true); 

當我播放聲音第一次它工作正常,但是,下面的時間我玩,似乎是隨機的,如果它工作或沒有。

我使用shield.play();播放聲音並且shield.stop();再次停止。 當它不工作時,我在日誌中得到以下內容。

AudioFlinger無法創建跟蹤,狀態:-12

錯誤創建AudioTrack

+0

如果我設置循環爲false,那麼它起着每次。 – Flexo

回答

0

您不使用MusicFactory的聲音效果。這是嚴格的音樂。
你應該使用SoundFactory。

下面是一個例子:

Sound sound = SoundFactory.createSoundFromAsset(getSoundManager(), this, "sound.wav"); 
+0

我的印象是,MusicFactory和SoundFactory做的一樣。它只允許超過5秒的聲音。無論如何,這給了我相同的結果。在聲音不起作用的地方,我仍然會發生隨機錯誤 – Flexo

2

用音樂當你播放背景音樂,這將是控制超長播放,重複.. 使用聲音,當你玩短的音頻,例如,當按下按鈕,或同時使用兩者的shoot..etc 這裏我相同的代碼:

public static void controlBgAudio(boolean play, boolean repeat) { 
    Music ms = ResourceManager.getInstance().audioBgMusic; 
    if (play) { 
     if (ms.isReleased()) { 
      ms.resume(); 
     } else { 
      ms.play(); 
     } 
    } else { 
     if (ms.isPlaying()) { 
      ms.pause(); 
     } else { 
      ms.stop(); 
     } 
    } 

    if (repeat) { 
     ms.setLooping(true); 
    } else { 
     ms.setLooping(false); 
    } 
} 

public static void controlShootAudio(boolean play, boolean repeat) { 
    Sound ms = ResourceManager.getInstance().audioShoot; 
    if (play) { 
     if (ms.isReleased()) { 
      ms.resume(); 
     } else { 
      ms.play(); 
     } 
    } else { 
     if (ms.isLoaded()) { 
      ms.pause(); 
     } else { 
      ms.stop(); 
     } 
    } 

    if (repeat) { 
     ms.setLooping(true); 
    } else { 
     ms.setLooping(false); 
    } 
} 
相關問題