注意:这条路其实没有走,过后会写第二篇分析到底是怎么控制AudioTrack的左右声道的。
栗子:setStereoVolume()控制左右声道流程.
private AudioTrack mAudioTrack;
int bufferSize = AudioTrack.getMinBufferSize(mSampleRateInHz, mChannelConfig, AudioFormat.ENCODING_PCM_16BIT);
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,mSampleRateInHz,mChannelConfig,AudioFormat.ENCODING_PCM_16BIT,bufferSize,AudioTrack.MODE_STREAM);
mAudioTrack.setStereoVolume(left ? 1 : 0, right ? 1 : 0);
mAudioTrack.play();
1.frameworks/base/media/java/android/media/AudioTrack.java
frameworks/base/media/java/android/media/PlayerBase.java
<1>.public int setStereoVolume(float leftGain, float rightGain) {
baseSetVolume(leftGain, rightGain);
}
<2>.void baseSetVolume(float leftVolume, float rightVolume) {
playerSetVolume(isRestricted/*muting*/,leftVolume * mPanMultiplierL, rightVolume * mPanMultiplierR);
}
<3>.void playerSetVolume(boolean muting, float leftVolume, float rightVolume) {
native_setVolume(leftVolume, rightVolume);
}
2.frameworks/base/core/jni/android_media_AudioTrack.cpp
static void android_media_AudioTrack_set_volume(JNIEnv *env, jobject thiz, jfloat leftVol, jfloat rightVol ){