Android, воспроизводящий звук в саундпуле - PullRequest
1 голос
/ 03 октября 2011

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

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

    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

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

Ответы [ 2 ]

5 голосов
/ 09 ноября 2011

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

@Override
public void onStart() {
    super.onStart();
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
5 голосов
/ 05 октября 2011

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

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

на следующее:

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

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

...