#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字节文件头,需要注意下。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。