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

#android #soundpool #audio #soundmanager2

#Android #soundpool #Аудио #soundmanager2

Вопрос:

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

По-старому у локального класса был этот код:

     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

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

Ответ №1:

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

 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% от уровня громкости системы.

Комментарии:

1. Спасибо! Проверю это чуть позже, и если это сработает, вы получили награду! Приветствую!

Ответ №2:

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

 @Override
public void onStart() {
    super.onStart();
    setVolumeControlStream(AudioManager.STREAM_MUSIC);
}
  

Комментарии:

1. Спасибо. просто изменение уровня громкости на 1, как в принятом ответе, не сработало. После того, как я сделал то, что вы сказали, он теперь работает.