Я использую класс 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));
}