如何在Android中获得AudioTrack的音量?

时间:2013-05-10 14:17:07

标签: android volume audiotrack

我可以使用track.setStereoVolume(a,b);

设置audioTrack的音量

但我无法找到获取音量的方法,例如getStereoVolume()setOnVolumeChangedHandler(...)

如何跟踪音量?

2 个答案:

答案 0 :(得分: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内,这将有效。

编辑:

AudioTrack有自己的音量等级独立于其他音轨。 AudioTrack正在播放的流(STREAM_MUSIC,STREAM_SYSTEM等)也会影响最终的音量级别。

所以,假设您的AudioTrack为左,右声道的.5,.5,以及它在STREAM_MUSIC上播放。如果该流的音量为.5,则最终音频电平为

.5*.5 = .25 //for the left and right channels.

如果由于省电或耳机而发生了一些自动音量调节,那么它应该发生在Stream级别(或隐藏在其之外的某个地方)。但是,它不应该调整你的AudioTrack音量。

答案 1 :(得分:1)

不是一个真正的答案,只是一个假设:我直到现在还没有测试过,但这应该有效。我不认为你必须覆盖这种方法。试试吧

 AudioManager audioManager = (AudioManager) 
          getSystemService(AUDIO_SERVICE);

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