Android音频声道数据处理

问题:

音频声道数据异常分析

分析:

1. 检查硬件信号

MICBIAS偏置电压:2点多V,正常OK
进运放前MIC的信号:OK
运放后的信号:OK

2. 检查音频通道切换

使用Tinymix查看通道是否OK?: OK

3. 检查数据

立体声pcm数据结构
Android录音默认录制生成的是pcm文件,假设我们设置采样率为16K,录音类型为AudioFormat.CHANNEL_IN_STEREO(立体声录音),数据类型为AudioFormat.ENCODING_PCM_16BIT。
则pcm文件的数据结构大致为2byte左声道、2byte右声道、2byte左声道、2byte右声道

立体声拆分:

private void splitStereoPcm(byte[] data) {
    int monoLength = data.length / 2;
    byte[] leftData = new byte[monoLength];
    byte[] rightData = new byte[monoLength];
    for (int i = 0; i < monoLength; i++) {
        if (i % 2 == 0) {
            System.arraycopy(data, i * 2, leftData, i, 2);
        } else {
            System.arraycopy(data, i * 2, rightData, i - 1, 2);
        }
    }
    //TODO 使用leftData、rightData 进行其他处理
}  

左右声道反转:

/**
    * 左右声道进行反转
    * @param data
    * @return
    *      反转后的数据
    */
   private byte[] getReversedData(byte[] data) {
       byte[] reversed = new byte[data.length];
       for (int i = 0; i < data.length - 3; i = i + 4) {
           reversed[i] = data[i+2];
           reversed[i+1] = data[i+3];
           reversed[i+2] = data[i];
           reversed[i+3] = data[i+1];
       }
       return reversed;
   }  

参考:

  1. https://blog.csdn.net/hi_ugly/article/details/80977850
Donate comment here