Android Soundpool не воспроизводит звук - PullRequest
3 голосов
/ 15 августа 2011

У меня проблемы с воспроизведением нескольких звуковых эффектов с использованием класса SoundPool. По сути, я делаю игру в реальном времени, в которой пользователь нажимает несколько объектов на экране. Всякий раз, когда игрок касается объекта, мне нужно воспроизвести звук. Итак, я обратился к классу 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-файл даже не занимает 60 КБ), поэтому размер не является проблемой ...

Ответы [ 3 ]

3 голосов
/ 11 января 2012
mSoundPool = new SoundPool(mBalloonPopCount, R.raw.pop, 0);

должно быть

mSoundPool = new SoundPool(mBalloonPopCount, AudioManager.STREAM_MUSIC, 0);
0 голосов
/ 02 февраля 2012

Была такая же проблема не так давно. В моем случае помогло уничтожение всего процесса в системе. Тем не менее, я понятия не имею, что произошло и в чем причина проблемы.

0 голосов
/ 15 августа 2011

Из каждого примера, который я слышу об использовании SoundPool, часть громкости отличается от той, что у вас есть. Это так:

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