Android - AudioRecord: как разделить левый и правый каналы в режиме стереозаписи

Я использую класс AudioRecord android sdk для записи необработанного звука, а затем кодирую его с помощью хромого кодировщика mp3. Для этого мне нужно разделить левый и правый каналы в режиме стереозаписи вот так.

bytesEncoded = Lame.encode(left, isMono ? left : right, samplesRead, mp3Buf, mp3Buf.length);

Как выделить левый и правый каналы из буфера в свой буфер?

Я пытался использовать это, но он дает звук с промежутками. ссылка

Следующий метод работает, но добавляет шум в фоновом режиме:

private int readStereo(short[] left, short[] right, int numSamples) throws IOException {
        byte[] buf = new byte[numSamples * 4];
        int index = 0;

        if (audioRecorder == null)
            return -1;

        int bytesRead = audioRecorder.read(buf, 0, numSamples * 4);

        for (int i = 0; i < bytesRead; i+=2) {
            short val = byteToShortLE(buf[0], buf[i+1]);
            if (i % 4 == 0) {
                left[index] = val;
            } else {
                right[index] = val;
                index++;
            }
        }

        return index;
    }`


private static short byteToShortLE(byte b1, byte b2) {
        return (short) (b1 & 0xFF | ((b2 & 0xFF) << 8));
    }

person Ali    schedule 23.06.2017    source источник