资源简介
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
- 上一篇:c++迷宫最短路径寻径算法
- 下一篇:《水果忍者》设计报告.doc
相关资源
- C++ 双缓存机制播放音频流(PCM裸流)
- C++PCM音频格式录音
- 音频采集并且adpcm编码再网络发送
- PCM编解码C++
- linux系统C语言AVI格式音视频封装应用
- c++ pcm转mp3编码(编码器为lamp)
- g711播放器和各种格式G711AG711U,PCM的音
- 语音信号分析与处理及其MATLAB实现L
- PCM 8位文件提取PCM采样的C语言代码
- 成熟 免费adpcm音频C语言 编解码
- c++音频原始数据PCM采样率转换-源码和
- 音频编码pcm的c语言实现
- C++PCM音频格式录音双缓存MFC版本
- 各种语言编写的pcm代码
- IMA ADPCM/PCM编码和解码C语言程序
- PCM转G711A/G711U代码
- 音频播放封装pcm格式,Windows平台 c+
评论
共有 条评论