2011-08-14 170 views
3

我在使用SoundPool類播放多種音效方面遇到問題。基本上我正在製作一個實時遊戲,涉及用戶在屏幕上點擊一堆物體。每當玩家觸碰一個物體時,我都需要播放聲音。所以我轉向了SoundPool類。下面是我的代碼:Android Soundpool無法播放聲音

private SoundPool mSoundPool; 
private int mSoundId; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    PreferencesManager.getInstance(this); 

    setContentView(R.layout.arcademode); 
    initialize(); 
} 

private void initialize() { 
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 
    mSoundPool = new SoundPool(mBalloonPopCount, R.raw.pop, 0); 
    mSoundId = mSoundPool.load(this, R.raw.pop, 1); 
} 

private void playSound() { 
    float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
    float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
    float volume = actualVolume/maxVolume; 
    mSoundPool.play(mSoundId, volume, volume, 1, 0, 1f); 
} 

現在每當playSound()方法被調用時,我什麼也沒聽到。當我凝視logcat中,我看到了下面幾行:

08-14 19:48:50.117: ERROR/AudioFlinger(2613): invalid stream type 
08-14 19:48:50.117: ERROR/AudioTrack(15611): AudioFlinger could not create track, status: -22 
08-14 19:48:50.117: ERROR/SoundPool(15611): Error creating AudioTrack 

有問題的音頻文件是.WAV文件。我也試過.ogg.mp3文件,它們也不起作用。聲音文件非常小(.wav文件甚至不佔用60KB)因此大小不是問題...

+1

你有沒有想過問題是什麼?我有同樣的問題,不能解決它。 –

回答

0

從每個聲音使用SoundPool的示例中,音量聲部與您的聲音不同有。它是這樣的:

float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
float volume = actualVolume/maxVolume; 
+0

沒有工作。我仍然在LogCat中遇到同樣的錯誤。 – Dan

+0

您是否嘗試過使用另一種格式的音頻文件?像mp3或ogg?它可以是文件格式。 –

+0

是的,它不起作用。我甚至嘗試過不同格式的其他聲音文件,但仍然出現錯誤。 – Dan

3
mSoundPool = new SoundPool(mBalloonPopCount, R.raw.pop, 0); 

需求是

mSoundPool = new SoundPool(mBalloonPopCount, AudioManager.STREAM_MUSIC, 0); 
0

不是很久很久以前有同樣的問題。在我的情況下,殺死系統內的所有進程都有幫助。不過,我不知道發生了什麼事以及問題的原因是什麼。