C++读取WAV音频文件的头部数据的实现方法

前言:

在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正。写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长。

实现代码:

#include

#include

#include

using namespace std;

using std::string;

using std::fstream;

typedef struct WAV_HEADER{

char RIFF[4]; // RIFF Header Magic header

unsigned long ChunkSize; // RIFF Chunk Size

char WAVE[4]; // WAVE Header

char fmt[4]; // FMT header

unsigned long Subchunk1Size; // Size of the fmt chunk

unsigned short AudioFormat; // Audio format 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM

unsigned short NumOfChan; // Number of channels 1=Mono 2=Sterio

unsigned long SamplesPerSec; // Sampling Frequency in Hz

unsigned long bytesPerSec; // bytes per second

unsigned short blockAlign; // 2=16-bit mono, 4=16-bit stereo

unsigned short bitsPerSample; // Number of bits per sample

char Subchunk2ID[4]; // "data" string

unsigned long Subchunk2Size; // Sampled data length

}wav_hdr;

// Function prototypes

int getFileSize(FILE *inFile);

int main(int argc,char *argv[]){

wav_hdr wavHeader;

FILE *wavFile;

int headerSize = sizeof(wav_hdr),filelength = 0;

string answer;

do{

string input;

string answer;

const char* filePath;

cout << "Pick wav file from the Windows Media File: ";

cin >> input;

cin.get();

cout << endl;

path = "C:\\Windows\\Media\\" + input + ".wav";

filePath = path.c_str();

wavFile = fopen( filePath , "r" );

if(wavFile == NULL){

printf("Can not able to open wave file\n");

//exit(EXIT_FAILURE);

}

fread(&wavHeader,headerSize,1,wavFile);

filelength = getFileSize(wavFile);

fclose(wavFile);

cout << "File is :" << filelength << " bytes." << endl;

cout << "RIFF header :" << wavHeader.RIFF[0]

<< wavHeader.RIFF[1]

<< wavHeader.RIFF[2]

<< wavHeader.RIFF[3] << endl;

cout << "WAVE header :" << wavHeader.WAVE[0]

<< wavHeader.WAVE[1]

<< wavHeader.WAVE[2]

<< wavHeader.WAVE[3]

<< endl;

cout << "FMT :" << wavHeader.fmt[0]

<< wavHeader.fmt[1]

<< wavHeader.fmt[2]

<< wavHeader.fmt[3]

<< endl;

cout << "Data size :" << wavHeader.ChunkSize << endl;

// Display the sampling Rate form the header

cout << "Sampling Rate :" << wavHeader.SamplesPerSec << endl;

cout << "Number of bits used :" << wavHeader.bitsPerSample << endl;

cout << "Number of channels :" << wavHeader.NumOfChan << endl;

cout << "Number of bytes per second :" << wavHeader.bytesPerSec << endl;

cout << "Data length :" << wavHeader.Subchunk2Size << endl;

cout << "Audio Format :" << wavHeader.AudioFormat << endl;

// Audio format 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM

cout << "Block align :" << wavHeader.blockAlign << endl;

cout << "Data string :" << wavHeader.Subchunk2ID[0]

<< wavHeader.Subchunk2ID[1]

<< wavHeader.Subchunk2ID[2]

<< wavHeader.Subchunk2ID[3]

<< endl;

cout << endl << endl << "Try something else? (y/n)";

cin >> answer;

//cin.get();

cout << endl << endl;

}while( answer == "y" );

getchar();

return 0;

}

// find the file size

int getFileSize(FILE *inFile){

int fileSize = 0;

fseek(inFile,0,SEEK_END);

fileSize=ftell(inFile);

fseek(inFile,0,SEEK_SET);

return fileSize;

}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望通过本文能帮助到大家,谢谢大家对本站的支持!

如何用C语言编写wav读取函数,C++读取WAV音频文件的头部数据的实现方法相关推荐

  1. 如何用Python语言编写源程序,读取Excel中数据,并画出柱状图?

    现在,随着计算机的普及,以及数据量的增多,对大型数据的分析已经是我们手算不能解决的了,必须借助计算机:那么,学习计算机其实也和我们学习中文.英文一样,要学习他们的写作规则,掌握其中原理.所以,我们首先 ...

  2. 如何下载c语言游戏,如何用C语言编写游戏.doc

    <如何用C语言编写游戏.doc>由会员分享,可在线阅读,更多相关<如何用C语言编写游戏.doc(71页珍藏版)>请在皮匠网上搜索. 1.如何用C语言编写游戏网络游戏是常谈的话题 ...

  3. 如何让c语言编的游戏运行,如何用C语言编写游戏一.doc

    如何用C语言编写游戏 网络游戏是常谈的话题,是交互式娱乐的主力军,是一种 高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式 作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的 ...

  4. 如何用c语言编写军旗游戏

    今天教大家如何用C语言编写军旗游戏 ~ 1.效果图: 2.主要代码: #include <graphics.h> #include <time.h>#define CHESIZ ...

  5. c语言字符的计数器,如何用C语言编写计数器.docx

    如何用C语言编写计数器 难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言.不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件.?我以前接触的程序大多是有比较成形 ...

  6. c语言编写的每个函数都可以进行独立的编译,2017年辽宁师范大学计算机与信息技术学院836C语言程序设计考研冲刺密押题...

    一.选择题 1. 以下叙述中错误的是( ). A.C 语言编写的函数源程序,其文件名后缀可以是.C B.C 语言编写的函数都可以作为一个独立的源程序文件 C.C 语言编写的每个函数都可以进行独立的编译 ...

  7. 应用c语言编写adams用户自定义函数的研究,C语言编写adams用户自定义函数导入到adams中function_builder.doc...

    C语言编写adams用户自定义函数导入到adams中function_builder 应用C语言编写adams用户自定义函数导入到adams中function builder 的整个过程 当前使用软件 ...

  8. 用go语言编写办公脚本——根据txt内容搜索对应文件

    用go语言编写办公脚本--根据txt内容搜索对应文件 最近工作中,需要处理大量的漏扫报告,需要根据不同的标准来将混在一起的报告分开,公司有个大佬直接写了.bat的批处理脚本,感叹一句,真强啊!!但是这 ...

  9. c语言动态烟花小程序代码,如何用c语言编写动态烟花

    用c语言编写动态烟花的方法:首先绘制菜单界面显示文字:然后设置烟花有上升阶段和爆炸阶段,定义烟花和烟花弹结构体:最后初始化数据,加载资源贴图,随机发射数目随机. 用c语言编写动态烟花的方法: 效果展示 ...

最新文章

  1. AI 重新定义金融,颠覆投资模式
  2. P2764 最小路径覆盖问题(网络流)
  3. Java方法中的参数太多,第6部分:方法返回
  4. android布局1
  5. C++使用socket实现进程通信
  6. 反射(二) :整型数组能存字附---反射”暴力“超越数据类型的检测
  7. 语音识别哪个软件好,教你三种不同的识别方法
  8. mc java 连接超时_Java进程CPU占用高导致的网页请求超时的故障排查
  9. 解决canvas合成图片大小错误、模糊以及跨域的问题
  10. Autodesk Inventor参数化建模简明教程
  11. 功能测试的类型之用户验收测试
  12. 一个小透明作者到出版书籍,我的心路历程分享给各位作者
  13. 二手交易网站 /二手交易平台/二手交易系统
  14. arccatalog点要素显示不完_shp文件转为dwg之后在arcgis下打开属性表有高程信息但在cad里面打开为何没高程 - 地学 - 小木虫 - 学术 科研 互动社区...
  15. TypeScript Essential Notes 2 - ES6 Language Features
  16. 安卓studio 添加后台bgm音乐的几种方法
  17. 统计图表插件Chart.js(前端常用图表)
  18. windows和linux下安装STAF
  19. Winform像菜单一样弹出自定义内容实现示例
  20. 瑞吉外卖:linux课程学习(软件安装、项目部署)

热门文章

  1. javascript正则表达式小结
  2. 如何高性能的给UIImageView加个圆角
  3. 网络服务之DNS基本应用
  4. Entity Framework返回IEnumerable还是IQueryable?
  5. 开3389后不能登录的六种原因
  6. ASP.NET MVC – Nerdinner - notes
  7. 我给学生做单车旅行的宣传讲座
  8. Spring+Velocity中模板路径的问题
  9. configure: error: newly created file is older than distributed files!
  10. Android开发工具——ADB(Android Debug Bridge) 二HOST端