2013-05-10 4 views
3

я могу установить громкость аудиодорожки с помощью track.setStereoVolume(a,b);Как получить объем AudioTrack в Android?

Но я не мог найти способ, чтобы получить объем, либо как getStereoVolume() или setOnVolumeChangedHandler(...)

Как я могу отслеживать уровень громкости?

+0

Я думаю, что использование AudioManager может быть решением. Существует метод getStreamVolume (int streamType); – Opiatefuchs

+0

Я думаю, что это общая функция overrider. Таким образом, даже громкость AudioTrack равна 0.0f, AudioManager может возвращать 1.0f для getStreamVolume. Не так ли? – frankish

ответ

1

Не настоящий ответ, просто предположение: я до сих пор не проверял его, но это должно сработать. Я не думаю, что вы должны переопределить этот метод. Попробуйте

AudioManager audioManager = (AudioManager) 
      getSystemService(AUDIO_SERVICE); 

     float volume = (float) audioManager. 
      getStreamVolume(AudioManager.STREAM_MUSIC); 
+3

Проблема заключается в том, что я уменьшаю объем всего 1 аудио-трека. Таким образом, другой аудиотрек может иметь объем 1,0 (полный). Таким образом, getStreamvolume на AudioManager может быть установлен на 1.0 или 0.5 независимо от этих значений. – frankish

2

Вы не можете получить левый и правый уровни громкости звуковой дорожки.

Поэтому я предлагаю вам создать класс, представляющий 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.

+0

Благодарим вас за ответ. Если громкость трека изменяется на ОС Android (например, как автоматическое изменение громкости на устройствах Samsung при подключении наушников), эти значения будут не синхронизированы. – frankish

+0

Я так не думаю. Существует несколько уровней громкости. Ваша звуковая дорожка будет иметь уровень громкости независимо от любого другого уровня. Конечный уровень будет умножен на тип потока, на который он выводится. Я уточню в ответ. –

Смежные вопросы