2015-09-10 6 views
0

audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes); readsize = audioRecord.read(audiodata, 0, bufferSizeInBytes);ANDROID-Как 16bit-ИКМ кодированные данные аудио для взятия проб (16 бит), сохраненные в буфере, который находится в единицах байт (8 бит)

Так,

Q1. как 16-битная PCM-кодированная точка выборки сохраняется в andiodata, которая состоит из байтов (8 бит)? кто-то говорит, что каждые два байта сохраняют одну точку выборки, а кто-то просто игнорирует ее.

Q2. если это то, что является высоким 8 бит? аудиоданные [2 * i] или аудиоданные [2 * i + 1]?

Q3. мы рассмотрим проблему знака, когда мы вернемся к 16-битной точке выборки двумя байтами?

ответ

0

Наконец-то я получил ответ: вместо сохранения в байте (который, кажется, является распространенным недоразумением, и все программисты делают это так), я сохраняю данные выборки в буфере короткого типа, это позволяет избежать трех проблем, упомянутых выше. Я одобрил эффективность выборки по сигналу с разной частотой, генерируемой из Matlab. код выглядит следующим образом:

 `short[] audiodata = new short[bufferSizeInBytes/2]; 
     readsize = audioRecord.read(audiodata, 0, bufferSizeInBytes/2); 
     ` 

Это реальное значение выборки для БПФ и цифровой связи с интерфейса наушников.