我可以使用track.setStereoVolume(a,b);
但我无法找到获取音量的方法,例如getStereoVolume()
或setOnVolumeChangedHandler(...)
如何跟踪音量?
答案 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);