ExoPlayer のソース コードを正しく読んだ場合、ExoPlayer インスタンスを準備するときに使用する audioRenderers への参照を保持する必要があります。
exoPlayer.prepare(audioRenderer);
音量を変更するには、次のメッセージを送信する必要があります。
exoPlayer.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 0.1f);
最初に、音量を変更したい audioRenderer を渡します。次に、オーディオに影響を与えたいので、MSG_SET_VOLUME であるレンダラーに送信するメッセージを定義します。最後に、ボリュームを設定する値を渡します。この例では 0.1f を選択しましたが、もちろん、必要に応じて任意の値を使用できます。
再生の準備に使用した両方の MediaCodecAudioTrackRenderer にメッセージを送信すると、2 つの異なる再生ボリュームに影響を与えることができます。したがって、たとえば、audioRenderer1 の値が 0.4f で、audioRenderer2 の値が 0.6f の 2 つのメッセージを送信して、再生を互いにブレンドすることができます。
私はこれを自分で試していませんが、うまくいくはずです。
これは、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);
}
}