С помощью core audio захватываю звук с микрофона и пишу в файл. Через каждые n секунд получаю указатель и размер буфера сырых linear pcm-данных.
Частота дискретизации - 44100, 2 канала, 16 бит на канал; естественно, 1кадр=1пакет. В моем случае, вышеуказанное n=0.5 сек. Следовательно, каждые пол-секунды я получаю указатель на буфер размером 88200 байт (22050 измерений * (2 канала * 2байта_на_канал)).
Вопрос в том, как парсить эти 8КБ данных? При создании формата стоит флаг BigEndian и SignedInteger. Думал, это просто массив int16, где нечетные - 1 канал, четные - 2ой. Хер там - при разговоре в микрофон, то есть повышении громкости входного сигнала (которая детектится через отдельную хрень и ДАЕТ ВЕРНЫЕ ПОКАЗАНИЯ), среднее арифметическое всех int16 по каналам дает ВСЕГДА 16000 +/- 700, несмотря на имеющееся повышение громкости.
Пробовал SInt16, UInt16, UInt8, SInt8, UInt32, SInt32, float - не пашет - меняется только среднее арифметическое.
Проштудировал кучу манов, педивикию, rfc по lpcm, pcm и wav - ничего годного не нашел.
Кто-нибудь занимался парсингом raw lpcm или может подсказать, куда копать?