我相信读取 WAV 文件与读取任何二进制文件(例如位图)是一样的。基本思路是先读取文件头,然后根据头中显示的信息读取数据。标头通常可以填充到 C 数据结构中,您可以直接使用该信息。
struct wavfile
{
char id[4]; // should always contain "RIFF"
int totallength; // total file length minus 8
char wavefmt[8]; // should be "WAVEfmt "
int format; // 16 for PCM format
short pcm; // 1 for PCM format
short channels; // channels
int frequency; // sampling frequency
int bytes_per_second;
short bytes_by_capture;
short bits_per_sample;
char data[4]; // should always contain "data"
int bytes_in_data;
};
FILE * fp = fopen("file.wav", "rb");
wavfile info;
if (fp) {
fread(&info, 1, sizeof(wavfile), fp);
// try to read data here
}
我认为WAV文件中没有框架,只需确保每个采样点的长度,即wavinfo.bits_per_sample / 8
. 如果值为 2,我们可以读取 ashort
作为样本。
这是一个博客,还有一些示例代码,但我想您仍然需要进行一些调试。