试图从.wav文件中提取样本

时间:2011-11-11 11:00:46

标签: iphone arrays sample wav

我正在尝试从.wav文件获取样本&将它们存储在一个数组中(使用目标c)

有没有人知道这个问题的好方法?

到目前为止,似乎libsndfile(http://www.mega-nerd.com/libsndfile/)可能是我需要实现的,但我不确定从哪里开始(我对此相对较新) )

谢谢;)

2 个答案:

答案 0 :(得分:2)

AudioToolbox.framework中的

ExtAudioFileAudioFile API将为您完成此操作。 AQOfflineRenderTest可能是一个很好的样本。

答案 1 :(得分:1)

如果您已经知道波形文件的类型...例如16位单声道采样48 KHz,那么最简单的方法是简单地将波形文件作为二进制文件打开,移过标题,然后开始解析样本字节。

如果您熟悉C结构,则波形头看起来像这样,如果没有,则有足够的在线字节用于字节引用。

typedef结构 {     char chunkID [4];     UINT32 chunkSize; //只需要计算此字段     char格式[4];     char subchunk1ID [4];     UINT32 subchunk1Size;     UINT16 audioFormat;     UINT16 numChannels;     UINT32 sampleRate;     UINT32 byteRate;     UINT16 blockAlign;     UINT16 bitsPerSample;     char subchunk2ID [4];     UINT32 subchunk2Size; //并且需要计算此字段 } WAVEHEADER;

此后的样品是有序的。如果是单声道,则有一个样本,如果是立体声,则有一个通道,然后是该时间位置的下一个通道。

当然,如果你还不知道波形文件的类型和/或大小,你总是可以简单地解析标题。