Я могу установить громкость audioTrack с помощью track.setStereoVolume(a,b);
Но я не смог найти способ получить объем, например, getStereoVolume()
или setOnVolumeChangedHandler(...)
.
Как я могу отслеживать уровень громкости?
Я могу установить громкость audioTrack с помощью track.setStereoVolume(a,b);
Но я не смог найти способ получить объем, например, getStereoVolume()
или setOnVolumeChangedHandler(...)
.
Как я могу отслеживать уровень громкости?
Вы не можете получить левый и правый уровни громкости звуковой дорожки.
Поэтому я предлагаю вам создать класс, представляющий AudioTrack
.
public class AudioPlayer{
AudioTrack track;
float leftVolume;
float rightVolume;
public AudioPlayer(){
//create audio track.
leftVolume = 1;
rightVolume = 1;
}
public void setStereoVolume(float left, float right){
this.leftVolume = left;
this.rightVolume = right;
track.setStereoVolume(left, right);
}
}
Когда вы создаете свой AudioTrack
, громкость стерео составляет 1,0 для обоих каналов. Когда громкость устанавливается через AudioPlayer
, он отслеживает новый уровень.
Это будет работать, если AudioTrack
полностью инкапсулирован в AudioPlayer
.
Редактировать:
AudioTrack
имеет собственный уровень громкости, не зависящий от других треков. Поток, в котором воспроизводится AudioTrack
(STREAM_MUSIC, STREAM_SYSTEM и т. д.), также будет влиять на окончательный уровень громкости.
Итак, скажем, ваш AudioTrack
имеет значение 0,5, 0,5 для левого и правого каналов, и он воспроизводится на STREAM_MUSIC. Если этот поток имеет громкость 0,5, окончательный уровень звука будет
.5*.5 = .25 //for the left and right channels.
Если какая-то автоматическая регулировка громкости происходит из-за энергосбережения или наушников - что угодно, это должно происходить на уровне потока (или где-то скрытом за его пределами). Тем не менее, это не должно регулировать вашу AudioTrack
громкость.
Не настоящий ответ, просто предположение: я еще не тестировал его, но это должно сработать. Я не думаю, что вам нужно переопределить этот метод. Попробуй это
AudioManager audioManager = (AudioManager)
getSystemService(AUDIO_SERVICE);
float volume = (float) audioManager.
getStreamVolume(AudioManager.STREAM_MUSIC);