我正在尝试从.wav文件获取样本&将它们存储在一个数组中(使用目标c)
有没有人知道这个问题的好方法?
到目前为止,似乎libsndfile(http://www.mega-nerd.com/libsndfile/)可能是我需要实现的,但我不确定从哪里开始(我对此相对较新) )
谢谢;)
答案 0 :(得分:2)
ExtAudioFile
和AudioFile
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;
此后的样品是有序的。如果是单声道,则有一个样本,如果是立体声,则有一个通道,然后是该时间位置的下一个通道。
当然,如果你还不知道波形文件的类型和/或大小,你总是可以简单地解析标题。