android5.1 setvolume,Android9.0 setStereoVolume左右声道流程(一)

注意:这条路其实没有走,过后会写第二篇分析到底是怎么控制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 ){

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 上实现左右声道效果的方法如下: 1. 使用 MediaPlayer 类 使用 MediaPlayer 类时,可以使用 setVolume() 方法来控制左右声道的音量大小。该方法接受两个参数,第一个参数是左声道音量大小,第二个参数是右声道音量大小。音量大小范围为 0.0 到 1.0。 示例代码: ```java MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.song); mediaPlayer.setVolume(0.5f, 0.5f); // 设置左右声道音量大小 mediaPlayer.start(); ``` 2. 使用 AudioTrack 类 使用 AudioTrack 类时,可以通过设置音频数据的采样率、声道数和每个采样的位数来控制左右声道的音量大小。左声道的音频数据应该存储在数组的偶数位置,右声道的音频数据应该存储在数组的奇数位置。 示例代码: ```java int sampleRateInHz = 44100; // 采样率 int channelConfig = AudioFormat.CHANNEL_OUT_STEREO; // 声道数为立体声 int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 每个采样的位数为 16 位 int bufferSizeInBytes = AudioTrack.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat); AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes, AudioTrack.MODE_STREAM); byte[] audioData = new byte[bufferSizeInBytes]; // 左声道音频数据 for (int i = 0; i < bufferSizeInBytes; i += 2) { audioData[i] = leftData[i / 2]; } // 右声道音频数据 for (int i = 1; i < bufferSizeInBytes; i += 2) { audioData[i] = rightData[(i - 1) / 2]; } audioTrack.write(audioData, 0, bufferSizeInBytes); audioTrack.play(); ``` 以上是在 Android 上实现左右声道效果的两种方法,你可以选择适合自己的方法来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值