2011-08-14 137 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

不是很久很久以前有同样的问题。在我的情况下,杀死系统内的所有进程都有帮助。不过,我不知道发生了什么事以及问题的原因是什么。