在多媒体软件的设计中经常要处理声音文件,用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文件的播放
在常用语音德语上对wav2vec2进行微调。 一般注意事项和注意事项 我做了一些改动完善支持大型数据集(的de语言是资源密集型的): 预处理和微调被分为单独的脚本prepare_dataset.py和run_finetuning.py 。 这里的...
1、本软件支持与其它格式媒体文件(MPEG-I,MPEG-4,AVI,WAV,MP3等)同步 播放。 2、设置时差值可以调整科建媒体流与其它标准媒体流的同步播放。 3、 播放时可通过右键菜单或弹出主窗口的方式自由控制应用...
Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...
将一个或多个 WAV 文件连接在一起。 如果您在磁带上翻录 5 张 CD 的书,您将获得... WaveCat 可以将您的 60 个文件变成一个方便的大型 wav 文件。 建议:CDex --> WaveCat --> WinLame --> 大型 MP3 文件。
039 如何从文件对话框中获取文件扩展名? 040 如何从文件对话框中获取文件标题? 041 如何获取文件对话框选择的多个文件? 042 如何在程序启动时弹出文件打开对话框? 第4章 标题栏与菜单栏 043 如何获取标题栏高度? 044...
支持幻灯片功能、色调功能、快速目录浏览、转换编辑、支持扫描、裁剪、支持动态GIF、WAV、MID和RMI文件、且在全屏幕有放大、卷动功能、可预看AVI文件及增加储存自定功能、全桌面图片(适合大型图片)记载、最后幻灯片...
mp3 Sound Cutter,Mp3音乐截取小软件,对音乐分割、截取,操作简单快捷,而无需使用大型软件。...适用于.mp3 .wav文件。 注:杀毒软件可能会把软件主程序(mp3cutter.exe)当病毒程序,请各位使用者留意。
WavSplit 在给定的时间位置拆分大型 WAV 文件。 要找出分割位置,您可以使用任何带有时间显示的 WAV 播放器或编辑器。
目标音频文件包括:MP3、WMA、VOX、WAV等。 7.威盘Vdisk音乐外链生成 调用vdisk(威盘)上传接口,再将vdisk那边返回的文件信息进行解析。获得解析地址,可实现在线播放以及调用到QQ空间背景音乐播放,免去了开绿钻...
幸运的是,Avidemux 支持各种视频格式,包括 AVI,FLV 和 MPEG,还支持音频格式,如 MP3,WAV 和 OGG。 此外,您还可以利用解码器选项,处理工具,过滤器,配置帧速率,字形编辑器等等。 当然,就像任何其他应用...
支持动态GIF、WAV、MID和RMI文件、且在全屏幕有放大、卷动功能、可预看AVI文件及增加储存自定功能、全桌面图片(适合大型图片)记载、最后幻灯片文件功能、图片存成ICON功能、改良光暗对比功能等。
- 改进对大型文件进步的表现。 - 一些性能改进。 - 小改动和变化。 v1.10.223(2008年1月29日) - 增加了安全删除选项(Win2k和更高版本)。 - 增加的选择将设置保存到一个INI文件。 - 优化的错误日志。 - 改进的...
使用的音效WAV文件,是来自《仙剑奇侠传三》 使用的背景Mp3音乐,是来自《三国赵云传——之纵横天下》 3D模型来自参考书籍《DirectX角色扮演游戏编程》的网格模型(有改动) ————————————————...
特征所有类别的封面和列表视图为大型音频收藏而调优智能列表,标准播放列表和本地播放列表流URL 收藏夹,边栏和搜索集成指定媒体文件夹(具有排除功能) 一键播放文件中的应用硬件媒体密钥(MediaService API) 通过...
A、JPEG文件 B、WAV文件 C、MIDI文件 D、VOC文件 12、下列属于音频文件扩展名得就是()。 A、WAV B、MID C、MP3 D、以上都就是 13、我国电视系统采用得制式就是(). A、NTSC B、PAL C、SECAM ...
该应用程序支持大多数移动设备的多媒体布局,并且在多种可用的输出格式中还包括 SWF,WMV,WAV 和 FLV 选项。 自定义输出文档有多种方法,用户甚至可以翻转或旋转字幕。可以调整其字体大小和样式,并可以添加诸如...
A、JPEG文件B、WAV文件C、MIDI文件D、VOC文件12、下列属于音频文件扩展名的是()。 A、WAVB、MIDC、MP3D、以上都是13、我国电视系统采用的制式是()。 A、NTSCB、PALC、SECAMD、以上都是14、下列属于看图的工具软件是...