开发者社区> 问答> 正文

wav文件处理c/c++:报错

#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个存储空间内容读出来么



展开
收起
kun坤 2020-06-07 21:09:47 629 0
1 条回答
写回答
取消 提交回答
  • wav文件头包含了wav文件大小,采样率,数据位,声道等信息,如果你去噪不改变这些,就不需要扩展,只要将紧随其后的音频数据处理即可,处理后的数据还是保存成wav格式,将之前的头信息(或者修改后)写在新文件的的文件头即可。wav数据处理有很多现成的库,比如libsample等。######太感谢了,一语中的!######

    代码里面只处理了采样率,这是不够的。还需要看数据位(通常是8bit,16bit)和声道(MONO或STEREO)。

    另外有些WAV文件不是标准的44字节文件头,需要注意下。

    2020-06-07 21:09:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载