ANDROID-Как 16-битные данные выборки звука в кодировке PCM (16 бит) сохраняются в буфере, который находится в единицах байта (8 бит)

audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes); readsize = audioRecord.read(audiodata, 0, bufferSizeInBytes);

So,

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

Q2. если да, то какой высокий 8bit? аудиоданные[2*i] или аудиоданные[2*i+1]?

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


person Jay_Bob    schedule 10.09.2015    source источник


Ответы (1)


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

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

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

person Jay_Bob    schedule 11.09.2015