c语言怎么读取wav文件 并存 到 数组中,能 举个例子嘛
时间: 2023-06-06 20:05:36 浏览: 200
好的,可以的。以下是一个简单的C语言程序,用于读取.wav文件并将其存储到数组中:
```c
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 1024
int main() {
FILE *fp;
fp = fopen("example.wav", "rb"); // 打开.wav文件
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
// 读取文件头
char header[44]; // .wav文件头长度为44字节
fread(header, sizeof(char), 44, fp);
// 获取音频数据的大小
int data_size;
fseek(fp, 0, SEEK_END);
data_size = ftell(fp) - 44; // 文件大小减去头部长度
// 读取音频数据
short *data = (short *)malloc(data_size);
fseek(fp, 44, SEEK_SET);
fread(data, sizeof(short), data_size / 2, fp); // 音频数据为16bit(short),每个样本占2个字节
// 输出音频数据
for (int i = 0; i < data_size / 2; i++) { // 使用data_size / 2是因为一个样本占2个字节
printf("%d ", data[i]);
}
// 关闭文件
fclose(fp);
free(data);
return 0;
}
```
在这个程序中,我们使用了标准C库中的fopen()、fread()、fseek()和ftell()等函数来读取.wav文件并获取音频数据。为了方便,我们将音频数据存储在了一个short类型的数组中,并输出了数组中的所有元素。请注意,这个程序只能读取16位编码格式的.wav文件,如果.wav文件使用其他编码格式,可能会出现错误。
阅读全文