欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android立体声pcm的数据结构,左右声道拆分、左右声道反转

程序员文章站 2022-05-18 16:05:09
...
立体声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;
    }