Android, воспроизведение звука в звуковом пуле

Я скачал некоторый код, который вместо того, чтобы воспроизводить мой звук в моем локальном классе, вызывает другой класс для воспроизведения звука, единственная проблема, с которой я сталкиваюсь, заключается в том, что он не позволяет мне использовать клавиши громкости на моем телефоне для регулировки громкости, в то время как мой старый код в моем местном классе позволили мне это сделать.

По-старому локальный класс имел такой код:

    AudioManager mgr = (AudioManager) GameScreen_bugfix.this.getSystemService(Context.AUDIO_SERVICE);
    float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    float volume = streamVolumeCurrent / streamVolumeMax;
soundPool.play(soundPoolMap.get(sound), volume, volume, 1, 0,1f);

Новый код выглядит так:

public static void playSound(int index,float speed) 
    { 
             float streamVolume;
            try {
                streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
                streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
                mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, speed);
            } catch (Exception e) {
                e.printStackTrace();
                //Log.v("THE ERROR",  mSoundPoolMap+" "+index);
            } 


    }

поэтому я попытался изменить его следующим образом:

        AudioManager mgr = (AudioManager) SoundManager.getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr
        .getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr
        .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;

Но этот getSystemService выделяется красным, и когда я навожу на него указатель мыши, он говорит:

Метод getSystemService(String) не определен для типа SoundManager

Что делать? Спасибо!


person Ryan    schedule 03.10.2011    source источник


Ответы (2)


Если вы хотите воспроизводить свой звук на уровне звука, определенном системой, измените это:

mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, speed);

к этому:

mSoundPool.play(mSoundPoolMap.get(index), 1, 1, 1, 0, speed);

Уровень громкости, который вы передаете play, находится в диапазоне от 0 до 1. Он представляет собой процент от громкости системы, на котором воспроизводится звук. Таким образом, значение 0,5 будет воспроизводиться на 50% уровня громкости системы.

person slayton    schedule 05.10.2011
comment
Спасибо! Проверим это чуть позже, и если это сработает, вы получили награду! Ваше здоровье! - person Ryan; 06.10.2011

На самом деле, если вы хотите, чтобы аппаратные клавиши регулировки громкости настраивали поток мультимедиа вместо потока мелодии звонка, вам нужно запросить это, используя http://developer.android.com/reference/android/app/Activity.html. #setVolumeControlStream(int):

@Override
public void onStart() {
    super.onStart();
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
person dsandler    schedule 08.11.2011
comment
Спасибо. просто изменение уровня громкости на 1, как в принятом ответе, не сработало. После того, как я сделал то, что вы сказали, теперь это работает. - person Suragch; 02.10.2014