`
yingyingol
  • 浏览: 746117 次
文章分类
社区版块
存档分类
最新评论

大型WAV文件的播放

 
阅读更多
在多媒体软件的设计中经常要处理声音文件,用Windows提供的API函数sndPlaySound可以实现小型WAV文件的播放。但是当WAV文件大于可用内存时,sndPlaySound函数就不能进行播放,那么如何利用MCI播放大型音频文件呢?本文将介绍一种方法。

  Windows支持两种RIFF(resource interchange file format,“资源交互文件格式”)音频文件:MIDI的RMID文件和波形音频文件格式WAV文件,本文将介绍如何用MCI命令播放大型WAV文件。

  用sndPlaySound播放音频文件只需要一行代码。比如实现异步播放的方法为sndPlaySound("c:\windows\ding.wav",SND_ASYNC);

  由此可以看到,sndPlaySound的使用是很简单的。但是用sndPlaySound播放音频文件有一个限制,即整个音频文件必须全部调入可用的物理内存。因此应用sndPlaySound播放的音频文件相对较小,最大约100K。要播放大一些的音频文件(在多媒体设计中是经常要遇到的情况)需要使用MCI的功能。

  本文创建了一个Cwave类,可以处理播放音频的MCI命令,因为该类能够执行很多的MCI命令和建立了数据结构,所以只需要简单的成员函数(如OpenDevice, CloseDevice, Play和Stop)。在CWave类中抽象了特定的MCI命令和数据结构,只含几个简单的成员函数OpenDevice, CloseDevice, Play和Stop。波形音频设备是一个复合设备,如果打开波形设备,然后打开并关闭每个波形元素,最后关闭波形设备,这样可以使得播放性能更好。调用Cwave::OpenDevice就可以打开波形设备,OpenDevice将MCI_OPEN命令传递给mciSendCommand函数,如果调用成功,就用数据结构MCI_OPEN_PARMS的wDeviceID成员返回波形设备的标识符,该标识符保存在一个供以后使用的私有数据成员中。

  一旦打开了Cwace对象,通过Cwace::Play播放WAV文件就就绪了,WAV文件名和一个窗口指针被传递给Play方法以便将MCI通知消息发送到制定的窗口。

  WAV文件的播放分为两步。首先要通过分配一个MCI_OPEN_PARMS结构并给所要播放的WAV文件设置lpstrElementName成员打开WAV文件。将该结构和MCI_OPEN传递给mciSendCommand,打开WAV文件并用MCI_OPEN_PARMS结构的wDeviceID成员返回元素标识符。

  第二步是命令波形音频设备播放WAV文件。分配了MCI_PLAY_PARMS结构并将dwCallback成员设置为窗口句柄。如果要同步播放音频波形文件,就增加MCI_WAIT标志并跳过窗口句柄。这样做会使应用程序在mciSendCommand函数返回之前等待WAV文件播放完毕。最可能的情况是异步播放大型WAV文件,可以象下面那样指定MCI_NOTIFY标志并设置dwCallback成员做到这一点。
MCI_PLAY_PARMS mciPlayParms;
MciPlayParms.dwCallback=(DWORD)pWnd->m_hWnd;
DwResult=mciSendCommand(m_nDevice,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms);

  这样就开始了WAV文件的播放,并且在播放完毕后,MM_MCINOTIFY消息会发送到指定的窗口,图1(图略)了一个WAV文件播放所发生的事件序列:(1)命令播放WAV文件并立即返回;(2)播放WAV文件;(3)完成后发送通知消息。

完成播放后关闭WAV文件元素是程序员的责任,简单的调用Cwave类的Stop成员函数就可以了。Stop成员函数将WAV文件标识符和MCI_CLOSE命令传递给mciSendCommand函数,不必为该命令分配一个MCI结构,下述代码关闭了WAV文件
  mciSendCommand(m)nElement,MCI_CLOSE,NULL,NULL);

播放完所有的WAV文件后必须关闭波形音频设备,Cwave类的析构函数调用Cwave::CloseDevice自动完成。

将本文中介绍的CWave类加入到自己的程序中,就可以方便的应用它播放音频文件了。

 
分享到:
评论

相关推荐

    大型WAV文件的播放.docx

    大型WAV文件的播放

    wav2vec2

    在常用语音德语上对wav2vec2进行微调。 一般注意事项和注意事项 我做了一些改动完善支持大型数据集(的de语言是资源密集型的): 预处理和微调被分为单独的脚本prepare_dataset.py和run_finetuning.py 。 这里的...

    Teaching Player

    1、本软件支持与其它格式媒体文件(MPEG-I,MPEG-4,AVI,WAV,MP3等)同步 播放。 2、设置时差值可以调整科建媒体流与其它标准媒体流的同步播放。 3、 播放时可通过右键菜单或弹出主窗口的方式自由控制应用...

    网管教程 从入门到精通软件篇.txt

    Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...

    WaveCat-开源

    将一个或多个 WAV 文件连接在一起。 如果您在磁带上翻录 5 张 CD 的书,您将获得... WaveCat 可以将您的 60 个文件变成一个方便的大型 wav 文件。 建议:CDex --> WaveCat --> WinLame --> 大型 MP3 文件。

    Visual C++编程技巧精选500例.pdf

    039 如何从文件对话框中获取文件扩展名? 040 如何从文件对话框中获取文件标题? 041 如何获取文件对话框选择的多个文件? 042 如何在程序启动时弹出文件打开对话框? 第4章 标题栏与菜单栏 043 如何获取标题栏高度? 044...

    IrfanView(图像查看转换器) v4.51 官方版.rar

    支持幻灯片功能、色调功能、快速目录浏览、转换编辑、支持扫描、裁剪、支持动态GIF、WAV、MID和RMI文件、且在全屏幕有放大、卷动功能、可预看AVI文件及增加储存自定功能、全桌面图片(适合大型图片)记载、最后幻灯片...

    Mp3 Sound Cutter

    mp3 Sound Cutter,Mp3音乐截取小软件,对音乐分割、截取,操作简单快捷,而无需使用大型软件。...适用于.mp3 .wav文件。 注:杀毒软件可能会把软件主程序(mp3cutter.exe)当病毒程序,请各位使用者留意。

    WavSplit-开源

    WavSplit 在给定的时间位置拆分大型 WAV 文件。 要找出分割位置,您可以使用任何带有时间显示的 WAV 播放器或编辑器。

    博嗨DJ工作台 v1.0.4.0

    目标音频文件包括:MP3、WMA、VOX、WAV等。 7.威盘Vdisk音乐外链生成 调用vdisk(威盘)上传接口,再将vdisk那边返回的文件信息进行解析。获得解析地址,可实现在线播放以及调用到QQ空间背景音乐播放,免去了开绿钻...

    开源免费视频编码工具 AviDemux 2.7.8 + x64 中文多语免费版.zip

    幸运的是,Avidemux 支持各种视频格式,包括 AVI,FLV 和 MPEG,还支持音频格式,如 MP3,WAV 和 OGG。 此外,您还可以利用解码器选项,处理工具,过滤器,配置帧速率,字形编辑器等等。 当然,就像任何其他应用...

    IrfanView 看图软件

    支持动态GIF、WAV、MID和RMI文件、且在全屏幕有放大、卷动功能、可预看AVI文件及增加储存自定功能、全桌面图片(适合大型图片)记载、最后幻灯片文件功能、图片存成ICON功能、改良光暗对比功能等。

    Recuva 1.37.0.488汉化版

    - 改进对大型文件进步的表现。 - 一些性能改进。 - 小改动和变化。 v1.10.223(2008年1月29日) - 增加了安全删除选项(Win2k和更高版本)。 - 增加的选择将设置保存到一个INI文件。 - 优化的错误日志。 - 改进的...

    《孙膑问世》DirectX角色扮演游戏编程的网格模型

    使用的音效WAV文件,是来自《仙剑奇侠传三》 使用的背景Mp3音乐,是来自《三国赵云传——之纵横天下》 3D模型来自参考书籍《DirectX角色扮演游戏编程》的网格模型(有改动) ————————————————...

    audioplayer:适用于Nextcloud和ownCloud的音频播放器

    特征所有类别的封面和列表视图为大型音频收藏而调优智能列表,标准播放列表和本地播放列表流URL 收藏夹,边栏和搜索集成指定媒体文件夹(具有排除功能) 一键播放文件中的应用硬件媒体密钥(MediaService API) 通过...

    计算机应用基础-学习指南.doc

    A、JPEG文件 B、WAV文件 C、MIDI文件 D、VOC文件 12、下列属于音频文件扩展名得就是()。 A、WAV B、MID C、MP3 D、以上都就是 13、我国电视系统采用得制式就是(). A、NTSC B、PAL C、SECAM ...

    轻量级视频编码压制工具 ShanaEncoder 5.2.1.2 中文多语免费版.zip

    该应用程序支持大多数移动设备的多媒体布局,并且在多种可用的输出格式中还包括 SWF,WMV,WAV 和 FLV 选项。 自定义输出文档有多种方法,用户甚至可以翻转或旋转字幕。可以调整其字体大小和样式,并可以添加诸如...

    计算机应用基础学习指南.doc

    A、JPEG文件B、WAV文件C、MIDI文件D、VOC文件12、下列属于音频文件扩展名的是()。 A、WAVB、MIDC、MP3D、以上都是13、我国电视系统采用的制式是()。 A、NTSCB、PALC、SECAMD、以上都是14、下列属于看图的工具软件是...

Global site tag (gtag.js) - Google Analytics