#include "stdlib.h"
#include "stdio.h"
int main()
{
int i; //用作循环计数
unsigned char ch[100]; //用来存储wav文件的头信息
FILE *fp;
fp=fopen("1.wav","rb");//为读,打开一个wav文件
if((fp=fopen("1.wav","rb"))==NULL) //若打开文件失败,退出
{
printf("can't open this file\n");
exit(0);
}
/**********输出wav文件的所有信息**********/
printf("该wav文件的所有信息:");
for(i=0;i<58;i++)
{
ch[i]=fgetc(fp); //每次读取一个字符,存在数组ch中
if(i%16==0) //每行输出16个字符对应的十六进制数
printf("\n");
if(ch[i]<16) //对小于16的数,在前面加0,使其用8bit显示出来
printf("0%x ",ch[i]);
else
printf("%x ",ch[i]);
}
//输出采样频率
printf("\n采样频率:ox");
for(i=27;i>23;i--)
{
printf("%x",ch[i]);
}
printf("\n");
getchar();
}
请问我这样读取wav文件信息后,我将进行语音去噪等工作,那我现在存储的信息量是否够用呢,不够的话要扩展到多大,保存后输出的音频应用什么指令,把这100个存储空间内容读出来么
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
wav文件头包含了wav文件大小,采样率,数据位,声道等信息,如果你去噪不改变这些,就不需要扩展,只要将紧随其后的音频数据处理即可,处理后的数据还是保存成wav格式,将之前的头信息(或者修改后)写在新文件的的文件头即可。wav数据处理有很多现成的库,比如libsample等。######太感谢了,一语中的!######
代码里面只处理了采样率,这是不够的。还需要看数据位(通常是8bit,16bit)和声道(MONO或STEREO)。
另外有些WAV文件不是标准的44字节文件头,需要注意下。