как читать образцы PCM из файла, используя fread и fwrite?

Я хочу прочитать сэмплы PCM из файла с помощью fread и определить уровень сигнала сэмплов. Как мне это сделать?

Для чтения, сколько байтов составляет 1 образец pcm? Могу ли я одновременно считывать образец размером более 1 пкм? Это для файлов WAV и AAC.


person Namratha    schedule 11.03.2011    source источник
comment
Какой файл? WAV? MP3? ААС?   -  person selbie    schedule 11.03.2011


Ответы (2)


Вы должны понимать, что WAV-файлы (и уж тем более AAC-файлы) не все одинаковы. Я объясню только про WAV-файлы, тогда вы, надеюсь, поймете, как обстоят дела с AAC-файлами. Как вы указали, WAV-файл содержит данные в кодировке PCM. Однако это может быть: 8-бит, 16-бит, 32-бит, ... моно, стерео, 5.1, ..., 8 кГц, 16 кГц, 44,1 кГц и т. д. В зависимости от этих значений вы должны интерпретировать данные ( например, при чтении с помощью функции fread()) по-разному. Поэтому WAV-файлы имеют заголовок. Вы должны сначала прочитать этот заголовок стандартным способом (я не знаю подробностей). Тогда вы знаете, как читать фактические данные. Поскольку это не так просто, я предлагаю вам использовать одну из библиотек, которые читают WAV-файлы для вас, например. http://www.mega-nerd.com/libsndfile/ . Конечно, вы также можете использовать Google или использовать SO, чтобы найти других. Или вы делаете это сложным путем и выясняете, как выглядят заголовки WAV-файлов, и сначала декодируете эти данные, а затем переходите к фактическим данным, закодированным в PCM.

person AudioDroid    schedule 11.03.2011

У меня нет опыта работы с файлом WAV, но однажды я прочитал данные из файла mp3. Что касается mp3-файла, то каждые 576 сэмплов в формате pcm кодируются в кадр. Все кадры хранятся непосредственно в файле вместе с некоторой дополнительной информацией. При обработке закодированных данных я читаю двоичные данные из mp3-файла и сохраняю их в буфере, декодирую буферизованные данные и извлекаю то, что для меня значимо.

Я думаю, что обработка wav-файла (который, насколько я понимаю, хранит образцы PCM) не совсем отличается. Вы можете напрямую читать двоичные данные из файла и выполнять некоторые преобразования в соответствии со спецификацией кодирования wav.

Сам файл не знает, что за данные, даже какой формат данных в нем. Вы можете взять все в файле в виде байтов (даже обычный текст), прочитать байт из файла, интерпретируя двоичные данные самостоятельно.

person Summer_More_More_Tea    schedule 11.03.2011