Вы не можете получить левый и правый уровни громкости звуковой дорожки.
Поэтому я предлагаю вам создать класс, представляющий 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
.
Edit:
AudioTrack
имеет свой собственный уровень громкости не зависит от других треков. Поток, на котором проигрывается AudioTrack
(STREAM_MUSIC, STREAM_SYSTEM и т. Д.), Также влияет на конечный уровень громкости.
Итак, скажите, что ваш AudioTrack
находится на .5, .5 для левого и правого каналов и его воспроизведения на STREAM_MUSIC. Если этот поток в .5 объеме, конечный уровень звука будет
.5*.5 = .25 //for the left and right channels.
Если некоторая автоматическая регулировка громкости происходит за счетом экономии электроэнергии или headphones- что угодно, это должно произойти на уровне потока (или где-то спрятанная за что .) Тем не менее, он не должен корректировать громкость AudioTrack
.
Я думаю, что использование AudioManager может быть решением. Существует метод getStreamVolume (int streamType); – Opiatefuchs
Я думаю, что это общая функция overrider. Таким образом, даже громкость AudioTrack равна 0.0f, AudioManager может возвращать 1.0f для getStreamVolume. Не так ли? – frankish