wav文件的采样频率修改(C实现)

目录

    • 实现思路
      • 复习
      • 实现思路

实现思路

复习

(1)采样频率的概念:采样频率是指每秒钟采集音频数据的次数。例如:一个wav文件的采样频率是44100Hz,说明本文件每一秒钟采集了44100个数据点。然后每个数据点又与采样位数有关,比如当我们的采样位数是16位,则每个数据点的取值范围就是-32768~32767。当然,一个文件采样频率越高,采样位数越多,得到的音频文件效果也就会越好。
(2)采样定理(奈奎斯特采样定理):简单理解就是,采样时,采样的频率大于信号最高频率的两倍,之后就可以成功的完全恢复原本的信号。采样之后的数字信号完整地保留了原始信号中的信息。

实现思路

然后接下来我们想实现wav文件的采样频率的修改,从其概念来说,比如44100Hz要变为8000Hz,只需要原先每秒的44100个数据点变为8000个就可以了。这个叫做下采样,通过抽取的方式实现。与之对应的上采样,通过内插实现。

下面来说说我在网上查到的有关采样频率修改的资料:
1、采样频率修改又可以叫做音频重采样,相当于对原有的音频数据重新采样了一次。

2、我打算先去找个别人写好的关于wav文件采样率修改的软件,看看一般可以将wav采样率修改为多少比较合适。下载了一款名叫Cool Edit的软件,可以进行下面几种采样率的修改:
wav文件的采样频率修改(C实现)_第1张图片
3、在一个http://www.pudn.com/上找到一些有关wav采样修改的代码,准备下载一些来看看别人怎么实现的。
首先来看看main.c中代码:


#include "StructData.h" //wav头文件结构体
#include "dsp_filter.h" //用到的滤波器头文件
#include 
#include 
  
int sampleRate=8000*UP/DOWN, bytelength=16; //AD(模拟转数字)采样频率及字长
//#define DOWN 5
//#define UP 3 
																								
short int Data_temp[IN_DATA_LEN*UP]={
   0};  //临时数据
short int low_filter_dataout[IN_DATA_LEN*UP]={
   0};  //低通滤波器数据输出
short int Out_data[IN_DATA_LEN*UP/DOWN]={
   0}; // 输出data
short int In_data[IN_DATA_LEN]={
   0}; //输入data,定为了150个数据点

short filter_coeff[FILTER_LEN]={
   0};  //滤波器系数 #define FILTER_LEN 100

//wav文件头定义并初始化
struct RIFF_HEADER m_riff={
   0}; 
struct FMT_BLOCK  m_fmt={
   0};
struct DATA_BLOCK m_data={
   0};

void DSP_low_fir(short *x,short *y,short *h,int x_length,int hn) ; //DSP低通滤波器???
																														 
void main()																																			  
{
     
   int i=0,j=0;
   int data_length=0;
   int total_data_length=0;
	
   FILE *fp,*fwav;
	

/*	
	fp=fopen("coeff1.txt","r+");
	for(i=0;i<92;i++)	// 输入输出函数
	{
		fscanf(fp,"%lf",&coeff1[i]);  //输入92个系数? 
	}
	fclose(fp);
	
	i=0;
	fp=fopen("coeff2.txt","r+");
	while(i<272)	// 输入输出函数
	{
		fscanf(fp,"%lf",&coeff2[i++]);
	}
	fclose(fp);
*/


//将浮点的滤波器系数转化为定点数系数 (定点数:数据中小数点位置固定不变的数,编程容易实现,但需要考虑溢出)

	for(i=0;i<FILTER_LEN;i++

你可能感兴趣的:(wav文件,毕业设计,wave,c语言)