пытается извлечь образцы из файла .wav - PullRequest
1 голос
/ 11 ноября 2011

Я пытаюсь получить сэмплы из файла .wav и сохранить их в массиве (используя цель c)

Кто-нибудь знает хороший способ сделать это?

Пока что похоже, что libsndfile (http://www.mega -nerd.com / libsndfile /) может быть тем, что мне нужно реализовать, но я не уверен, с чего начать (я относительно новичок в этом)

Спасибо;)

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011
API

ExtAudioFile и AudioFile в AudioToolbox.framework сделают это за вас.AQOfflineRenderTest может быть хорошим примером для начала.

1 голос
/ 09 мая 2013

Если вы уже знаете тип волнового файла ... например, 16-битный моно, сэмплированный с частотой 48 кГц, тогда самый простой способ - просто открыть волновой файл как двоичный файл, переместиться за заголовок и начать анализировать выборка байтов.

Волновой заголовок выглядит следующим образом, если вы знакомы со структурой C и, если нет, имеется много онлайн-байтов для ссылок на байты.

typedef struct { char chunkID [4]; UINT32 chunkSize; // нужно вычислить только это поле символьный формат [4]; char subchunk1ID [4]; UINT32 subchunk1Size; UINT16 аудиоформат; UINT16 numChannels; UINT32 sampleRate; UINT32 byteRate; UINT16 blockAlign; UINT16 bitsPerSample; char subchunk2ID [4]; UINT32 subchunk2Size; // и это поле нужно вычислить } WAVEHEADER;

Образцы после этой точки в порядке. Если моно, то есть один сэмпл, если стерео, затем один канал, за которым следует следующий канал в этом месте времени.

Конечно, вы всегда можете просто проанализировать заголовок, если вы еще не знаете тип волнового файла и / или размер.

...