#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, как в принятом ответе, не сработало. После того, как я сделал то, что вы сказали, он теперь работает.