(五)读取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. ASP.NET MVC4中@model使用多个类型实例的方法

    转http://blog.csdn.net/hulihui/article/details/48199897

  2. 使用SVN时出现的文件缺失问题

    使用SVN的童鞋们,可能有三种提交代码的方法: 第一种使用客户端(例如SVNX,CornerStone): 第二种使用Xcode提交(Source Control -> commit): 第三种 ...

  3. android studio中断开SVN连接,并彻底清理项目中的.svn文件

    首先,断开SVN连接: 在使用SVN过程中,我们会发现当我们第一次share到subversion的时候,下次就无法重新share了,也无法断开连接,就算我们将工程目录下的.svn目录删除它还是会无法 ...

  4. mysql 上传数据到指定字段

    新建表prizecode,字段为code varchar(45) not null , usedAt TIMESTAMP;数据存放在 E:\prizecode\ 目录下,下面是上传语句 LOAD DA ...

  5. TCP协议学习记录 (三) Ping程序 RR选项 记录路由hop

    一开始想直接在上个程序改,自己构造IP包头,但后来发现不行,微软不让干了,所以后来选用libcap库来收发包 代码写的很乱.. #pragma pack(4) #define ECHO_REQUEST ...

  6. Linux 流程控制语句 if else、for、while、until

    1. 单分支if条件语句 书写方式1: if [ 条件判断式 ]; then 执行程序代码 fi 书写方式2: if [ 条件判断式 ] then 执行程序代码 fi 举例: if [ $rate - ...

  7. Module 'fileinfo' already loaded in Unknown on line 0

    出现的原因是:需要加载的扩展已经以而二进制文件的形式写入了php中,但是,在php.ini中却再一次动态加载 参考出处

  8. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  9. EF for Firebird

    今天用了Firebird,记录下怎么用,不然下次给忘记了 1.官网下载包 1.DDEXProvider-3.0.1.0.msi 2.FirebirdSql.Data.FirebirdClient-4. ...

  10. 菜单的隐藏&显示

    //还是先上万一老师的原代码 //隐藏与显示菜单Self.Menu := nil; {隐藏菜单} Self.Menu := MainMenu1; {显示菜单} //初一看到代码,我有点抓不到感觉的意思 ...