(五)读取wav的实例

跟据WAVE文件的格式,实现了读取双声道立体声数据的例子如下:

BYTE * GetData(Cstring *pString) 
//获取声音文件数据的函数,pString参数指向要打开的声音文件;
{
 if (pString==NULL)
  return NULL;
 HMMIO file1;//定义HMMIO文件句柄;
 file1=mmioOpen((LPSTR)pString,NULL,MMIO_READWRITE);
 //以读写模式打开所给的WAVE文件;
 if(file1==NULL)
 {
  MessageBox("WAVE文件打开失败!");
  Return NULL;
 }
 char style[4];//定义一个四字节的数据,用来存放文件的类型;
 mmioSeek(file1,8,SEEK_SET);//定位到WAVE文件的类型位置
 mmioRead(file1,style,4);
 if(style[0]!='W'||style[1]!='A'||style[2]!='V'||style[3]!='E')
  //判断该文件是否为"WAVE"文件格式
 {
  MessageBox("该文件不是WAVE格式的文件!");
  Return NULL;
 }

 PCMWAVEFORMAT format; //定义PCMWAVEFORMAT结构对象,用来判断WAVE文件格式;
 mmioSeek(file1,20,SEEK_SET);
 //对打开的文件进行定位,此时指向WAVE文件的PCMWAVEFORMAT结构的数据;
 mmioRead(file1,(char*)&format,sizeof(PCMWAVEFORMAT));//获取该结构的数据;
 if(format.wf.nChannels!=2)//判断是否是立体声声音;
 {
  MessageBox("该声音文件不是双通道立体声文件");
  return NULL;
 }
 mmioSeek(file1,24+sizeof(PCMWAVEFORMAT),SEEK_SET);
 //获取WAVE文件的声音数据的大小;
 long size;
 mmioRead(file1,(char*)&size,4);
 BYTE *pData;
 pData=(BYTE*)new char[size];//根据数据的大小申请缓冲区;
 mmioSeek(file1,28+sizeof(PCMWAVEFORMAT),SEEK_SET);//对文件重新定位;
 mmioRead(file1,(char*)pData,size);//读取声音数据;
 mmioClose(file1, MMIO_FHOPEN);//关闭WAVE文件;
 return pData;
}

版权申明:本站文章均来自网络,如有侵权,请评论 ,收到后立即删除,谢谢!

基于VC的声音文件操作(四)的更多相关文章

  1. 基于VC的声音文件操作(三)

    (四)VC中相关的操作 1.mmioOpen 打开一个文件 Syntax MMIO mmioOpen( LPTSTR szFilename, LPMMIOINFO lpmmioinfo, DWORD ...

  2. 基于VC的声音文件操作(二)

    (二)VC的声音操作 操作声音文件,也就是将WAVE文件打开获取其中的声音数据,根据所需要的声音数据处理算法,进行相应的数学运算,然后将结果重新存储与WAVE格式的文件中去:可以使用CFILE类来实现 ...

  3. 基于VC的声音文件操作(一)

    (一)文件格式 1.RIFF文件结构和WAVE文件格式 Windows支持两种RIFF(Resource Interchange File Format,"资源交互文件格式")格式 ...

  4. 基于VC的声音文件操作(五)

    (六)读取波形文件的实例 1.打开文件后,可通过HMMO句柄获得文件中的波形部份:MMCKINFO mmckinfo;mmckinfo.fccType = mmioFOURCC('W','A','V' ...

  5. 03:linux文件操作四剑客

    1.1 find查找命令 1.find命令说明 1. Linux find命令用来在指定目录下查找文件. 2. 任何位于参数之前的字符串都将被视为欲查找的目录名. 3. 如果使用该命令时,不设置任何参 ...

  6. C#中基于流的XML文件操作笔记

    System.Xml.XmlReader和System.Xml.XmlWriters是两个抽象类,XmlReader提供了对于XML数据的快速,非缓存,只进模式的读取器,XmlWriter表示一个编写 ...

  7. 将声音文件加入VC

    概述 VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.有些软件就是这个编出来的...另外还有VB,VF.只是使用不同语言...但是,VC++是Windows ...

  8. VC++文件操作之最全篇

    一.剖析VC中的文件操作 各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分 ...

  9. CFile CStdioFile CArchive 文件操作之异同(详细)

    两者的主要区别: 一. CFile类操作文件默认的是Binary模式,CStdioFile类操作文件默认的是Text模式.    在Binary模式下我们必须输入'\r\n',才能起到回车换行的效果, ...

随机推荐

  1. linux命令(1):ls命令

    ls命令是linux下最常用的命令. ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看lin ...

  2. app 要求字体使用楷体,使用字体包

    1,下载字体包     http://www.3987.com/xiazai/6/fonts/36616.html#down 2.  studio中src\main\创建assets\fonts,存放 ...

  3. 足球游戏AI_资料收集

    实况足球中文官网 浅谈足球游戏的人工智能 用遗传算法加强足球游戏的人工智能 足球规则图解 守门员的技巧你知道吗? 教你足球守门员守门技术练习方法和技巧 足球守门员规则 判断点球方向

  4. springmvc 学习笔记_1

    一.回顾JavaWeb中的MVC设计模式 1)MVC这种设计模式,不光运用于Web领域,而且也能用于非Web领域 2)今天说的MVC特指一种表现层设计模式,不限于Java语言 二.回顾struts2+ ...

  5. HTTP 错误 403.14–Forbidden错误解决

    运行环境:开发环境:Windows7旗舰版64bit.VisualStudio2008 With SP1.ArcEngine10.0.NetFrameWork4.0.IIS7和C#开发语言. 问题描述 ...

  6. windows下C++环境的配置

    方法一--VS: 使用windows开发神器visio studio.这种方法比较简单,直接下载一个最新的vs安装就行.不单单是C++,C.C#.VB等都可以开发. 方法二--只安装C++编译器: 最 ...

  7. javascript一些方法兼容

    javascript一些方法兼容 标签(空格分隔): javascript 方法收集 [TOC] Object.keys 参考地址 if (!Object.keys) Object.keys = fu ...

  8. cesium+ geoserverTerrainProvide+png展示3D高程图展示

    一.发布png到geoserver的imagepyramid // translate png to tif epsg:4326 File png = new File(pngPathStr); Bu ...

  9. NopCommerce 框架系列(二)

    这一篇,让我们一起来认识一下 NopCommerce 的整体目录结构

  10. [Docker]Docker快速上手学习笔记

    0. 学习的一些疑问 如何热更新镜像(images)?(你可以快速启动或者销毁容器.这种时间几乎是实时的) 如何热更新游戏服? 好处在于各个应用之间环境相互独立,即使某一个容器崩溃也不会影响到其它容器 ...