• 大小: 1.3MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-02-01
  • 语言: C/C++
  • 标签: PCM  

资源简介

PCM语音编码的C语言实现,其中包括c语言实现代码,以及一段音频处理前后对比效果试听。

资源截图

代码片段和文件信息

#include “stdio.h“
#include “stdlib.h“
#include “CWave.h“

char *w*w1*w2;

//读取Wave文件,无返回参数
void CWave::Wav_RDY(FILE *fp)//函数参数:fp为指向要打开的Wav文件的指针,WH为WaveHeader类型的结构体
{
fread(&WHsizeof(WaveFileHead)1fp);//以数据流读入wav文件头
//cout< //cout< //cout< w=new(char[WH.datasize]);//分配动态内存空间
fread(wWH.datasize1fp);
fclose(fp);
}

void CWave::Wav_WT(FILE *fp)//对修改后的波形文件进行写入操作,函数参数:fp指向要保存的wav文件
{

fwrite(&WH1sizeof(WaveFileHead)1fp);//以数据流写入文件头
fwrite(w1WH1.datasize1fp);
delete[] ww1;//释放动态数组的存储空间
fclose(fp);
//cout<<“save successfully“<}


void CWave::Interp()//对wav文件执行插入操作,源文件为fp1,目标文件为fp2
{   int j=0;
w1=new(char[2*WH.datasize]);
for(int i=0;i<=WH.datasize;i++)
{
w1[j]=w[i];
j++;
w1[j]=0;j++;
}
WH1=WH;
//修改文件头参数
WH1.size0=44+2*WH.datasize;//修改wav文件的总数据大小,头文件部分的44个字节是不变的,数据部分加倍
WH1.sampl=2*WH.sampl;//采样率加倍
WH1.datasize=2*WH.datasize;//数据大小加倍
WH1.bytepersecblockalign=2*WH.bytepersecblockalign;//平均每秒波形音频所需要的记录的字节数加倍
}

void CWave::Decimate()//对wav文件执行抽取操作
{
int j=0;
w1=new(char[WH.datasize/2+1]);//申请动态内存空间
for(int i=0;i<=WH.datasize;i++)//循环抽取
{
w1[j]=w[i];
j++;i++;
w1[j]=w[i];
i++;
}
WH1=WH;
//修改文件头参数
WH1.size0=44+WH.datasize/2;
WH1.sampl=WH.sampl/2;//修改采样率
WH1.datasize=WH.datasize/2;
WH1.bytepersecblockalign=WH.bytepersecblockalign/2;

}


void main ()//主函数
{   FILE *fp1*fp2;
    cout<<“*******************************波形文件处理******************************\n“< cout<<“    请选择你要处理的波形文件:A.sen0381-16khz.wav    B.A0004_1-8khz.wav   \n“< char sel0;
cin>>sel0;
if((sel0==‘A‘)||(sel0==‘a‘))
fp1=fopen(“sen0381-16khz.wav““rb“);
else if((sel0==‘B‘)||(sel0==‘b‘))
fp1=fopen(“A0004_1-8khz.wav““rb“);
    
cout<<“    请选择处理方式: A.内插 B.抽取 \n“<    char sel1;
cin>>sel1;
if((sel1==‘A‘)||(sel1==‘a‘))//同时支持大写和小写输入
{
fp2=fopen(“Interp.wav““wb“);//打开或新建一个波形文件
wave.Wav_RDY(fp1);
wave.Interp();
wave.Wav_WT(fp2);
cout<<“            文件已成功保存至Interp.wav !“< }
if((sel1==‘B‘)||(sel1==‘b‘))
{
fp2=fopen(“Decimate.wav““wb“);//打开或新建一个波形文件
wave.Wav_RDY(fp1);
wave.Decimate();
wave.Wav_WT(fp2);
cout<<“           文件已成功保存至Decimate.wav !“< }

}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      46746  2009-11-04 14:36  WAVE-pcm\A0004_1-8khz.wav

     文件        828  2009-11-04 15:35  WAVE-pcm\CWave.h

     文件          0  2009-11-04 15:56  WAVE-pcm\Debug\Decimate.wav

     文件     532568  2009-11-14 20:36  WAVE-pcm\Debug\DNJ_WAVE.exe

     文件     772348  2009-11-14 20:36  WAVE-pcm\Debug\DNJ_WAVE.ilk

     文件    1997076  2009-11-14 20:36  WAVE-pcm\Debug\DNJ_WAVE.pch

     文件    1115136  2009-11-14 20:36  WAVE-pcm\Debug\DNJ_WAVE.pdb

     文件      82944  2009-11-14 20:36  WAVE-pcm\Debug\vc60.idb

     文件     110592  2009-11-14 20:36  WAVE-pcm\Debug\vc60.pdb

     文件      88489  2009-11-14 20:36  WAVE-pcm\Debug\WaveMain.obj

     文件       4368  2009-11-04 10:28  WAVE-pcm\DNJ_WAVE.dsp

     文件        541  2009-11-04 10:28  WAVE-pcm\DNJ_WAVE.dsw

     文件      50176  2009-11-14 20:37  WAVE-pcm\DNJ_WAVE.ncb

     文件      48640  2009-11-14 20:37  WAVE-pcm\DNJ_WAVE.opt

     文件        899  2009-11-14 20:36  WAVE-pcm\DNJ_WAVE.plg

     文件     784236  2009-11-14 20:37  WAVE-pcm\Interp.wav

     文件     392140  2009-11-04 14:36  WAVE-pcm\sen0381-16khz.wav

     文件       2675  2009-11-04 16:12  WAVE-pcm\WaveMain.cpp

     目录          0  2009-12-03 23:54  WAVE-pcm\Debug

     目录          0  2009-12-03 23:54  WAVE-pcm

----------- ---------  ---------- -----  ----

              6030402                    20


评论

共有 条评论