Как прочитать образцы PCM из файла, используя fread и fwrite? - PullRequest
2 голосов
/ 11 марта 2011

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

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

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Вы должны понимать, что 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.

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

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

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

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

...