Использование AudioRecord с 8-битной кодировкой в ​​Android - PullRequest
0 голосов
/ 23 февраля 2010

Я сделал приложение, которое записывает с микрофона телефона, используя AudioRecord и 16-битное кодирование, и я могу воспроизвести запись. По какой-то причине совместимости мне нужно использовать 8-битную кодировку, но когда я пытаюсь запустить ту же программу, используя эту кодировку, я получаю неверный аудиоформат. мой код:

int bufferSize = AudioRecord.getMinBufferSize(11025, 
AudioFormat.CHANNEL_CONFIGURATION_MONO, 
AudioFormat.ENCODING_PCM_8BIT);
AudioRecord recordInstance = new AudioRecord(
MediaRecorder.AudioSource.MIC, 11025,
 AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_8BIT,
bufferSize);

Кто-нибудь знает, в чем проблема? Согласно документации AudioRecord способен к 8-битному кодированию.

1 Ответ

0 голосов
/ 11 марта 2010

Если вы посмотрите на источник, он поддерживает только little-endian, но Android записывает big-endian. Таким образом, вы должны преобразовать в little-endian, а затем 8-разрядный. Это сработало для меня, и вы, вероятно, можете объединить два:

for (int i = 0; (offset + i + 1) < bytes.length; i += 2) {
    lens[i] = bytes[offset + i + 1];
    lens[i + 1] = bytes[offset + i];
}
for (int i = 1, j = 0; i < length; i += 2, j++) {
    lens[j] = lens[i];
}

Вот более простая версия без порядка байтов

for (int i = 0, j = 0; (offset + i) < bytes.length; i += 2, j++) {
    lens[j] = bytes[offset + i];
}
...