Android立體聲pcm的數據結構,左右聲道拆分、左右聲道反轉

立體聲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 進行其他處理
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
左右聲道反轉
假如我們需要將左、右聲道反轉,也很簡單,具體的代碼如下:

    /**
     * 左右聲道進行反轉
     * @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;
    }
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章