如果我正确阅读了 ExoPlayer 源代码,则必须保留对准备 ExoPlayer 实例时使用的音频渲染器的引用。
exoPlayer.prepare(audioRenderer);
要更改音量,您必须发送以下消息:
exoPlayer.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 0.1f);
首先,传递要更改音量的 audioRenderer。其次,您定义要发送到渲染器的消息,即 MSG_SET_VOLUME,因为您想影响音频。最后,您传递要设置音量的值。在此示例中,我选择了 0.1f,但当然您可以使用任何适合您需要的值。
如果将消息发送到用于准备播放的两个 MediaCodecAudioTrackRenderer,则可以影响两个不同的播放音量。因此,您可以发送两条消息,例如,audioRenderer1 的值为 0.4f,audioRenderer2 的值为 0.6f,以将播放混合在一起。
我自己没有尝试过,但我认为它应该可以工作。
这是负责处理 MSG_SET_VOLUME 消息的原始 ExoPlayer 代码片段:
public void handleMessage(int messageType, Object message) throws ExoPlaybackException {
if (messageType == MSG_SET_VOLUME) {
audioTrack.setVolume((Float) message);
} else {
super.handleMessage(messageType, message);
}
}