多媒体库函数 WinMM.dll 简介

大致流程:
1. 首先用 waveOutOpen 获得 Windows 混音器的句柄。
2. 再初始化一个 Wave Header, 并用 waveOutPrepareHeader 将它“准备好”。
3. 接着用 waveOutWrite 输出这个 Wave Header。
4. 等待播放完成后用 waveOutUnprepareHeader 将 Wave Header “反准备”。
5. 最后调用 waveOutClose 来关闭最开始获得的句柄。

注意事项:
1. 每一步都要判断错误, 使用 waveOutGetErrorTextW 这个 API 可以获得错误代码对应的文本。为了方便, 我写了如下函数直接返回 vb 所支持的 String 类型:

Code

2. waveOutPrepareHeader 和 waveOutUnprepareHeader 的意思有点像“锁定”。就是只要 Prepare 了, 你就不能改动了, 特别地, 你不能释放已锁定 Wave Header 的内存, 否则会引起程序崩溃。内存指 Wave Header 的 lpData 指向的一块内存区域, 这块内存区域在播放完成之前不能释放。我们在这个程序里简单地通过 waveOutUnprepareHeader 的返回值来判断是否播放完成。在较为复杂的程序中, 我们可以通过回调函数来判断何时播放完毕。回调函数可以在 waveOutOpen 的 dwCallback 参数中设置。
本程序简单地播放了如下 buffer:

For i = 0 To 176399
    buffer(i) = i And 255
Next


效果是“嘟”一秒钟。
3. 句柄用完了记得关掉

 

附:
函数名称                            说明
auxGetDevCaps                   查询指定的辅助输出设备以确定其性能
auxGetNumDevs                   检取系统中存在的辅助输出设备的数量
auxGetVolume                    返回指定的辅助输出设备的当前卷设备
auxOutMessage                   向指定的辅助输出设备发送一条消息
auxSetVolume                    在指定的辅助输出设备中设置卷
CloseDirver                     关闭指定的可安装驱动器
DefDriverProc                   为任何不由可安装驱动器处理的消息提供的缺省处理
Drivercallback                  调用一个回调函数,发送一条消息给窗口或
                               将一个线程的阻塞解除
DrvGetModuleHandle              返回包含指定可安装驱动器模块的实例句柄
DrvsendMessage                  把指定的消息发送给可安装驱动器F

GetDriverModuleHandle           返回包含指定可安装驱动器模块的实例句柄
joyGetDevCaps                   查询指定的游戏杆设备以确定其性能
joyGetNumDevs                   返回系统支持的游戏杆设备的数量
joyGetPos                       查询指定的游戏杆设备的位置和活动性
joyGetPosEx                     查询一个游戏杆设备的位置和它的按扭状态
joyGetThreshold                 查询指定的游戏杆设备的当前移动阈值
joyReleaseCapture               释放由JoySetCapture函数设置的在指定游戏 杆设备上的捕获
joySetCapture                   发送一个游戏杆消息到指定的窗口
joySetThreshold                 设置指定的游戏杆设备的移动阈值
mciGetCreatorTask               为指定的MCI设备检取其创建的任务
mciGetDeviceID                  返回和打开设备名相匹配的设备标识符
mciGetErrorString               检取描述指定媒介控制接口错误代码的字符串
mciGetYieldProc                 返回和媒介控制接口的WAIT标志相关的回调函数的地址
mciSendCommand                  向指定的媒介控制接口设备发送一条命令
mciSendString                   向指定的媒介控制接口设备发送一个字符串
mciSetYieldProc                 设置一个过程地址,在MCI设备因指定了WAITE标志而等待一个命令完成时,该过程被周期性调用
midiConnect                     将指定的MIDI输入设备连接到输出设备!
midiDisconnect                  断开MIDI输入设备和输出设备的连接
midiInAddBuffer                 向指定的音乐仪器数字接口的输入设备增加一个缓冲区

midiInClose                     关闭指定的音乐仪器数字接口的输入设备
midiInGetDveCaps                查询指定的音乐仪器数字接口的输入设备以确定其性能
midiInGetErrorText              检取有关音乐仪器数字接口的输入设备指定错误的文本说明
midiInGetID                     获得一个音乐一起数字接口的输入设备的标识符
midiInGetNumDevs                检取系统中音乐仪器数字接口的输入设备的数量
midiInMessage                   向指定的音乐仪器数字接口的输入设备驱动器发送一条消息
midiInOpen                      打开指定的音乐仪器数字接口的输入设备
midiInPrepareHeader             为音乐仪器数字接口的输入设备准备一个缓冲区
midiInReset                     在给定的MIDI输入设备上输入,并将所有挂起的输入缓冲区标记为已执行的
midiInStart                     启动在指定的音乐仪器数字接口的输入设备上的输入
midiInStop                      停止在给定的音乐仪器数字接口的输入设备上的输入
midiInUnprepareHeader          消除由midiInPrepareHeader函数完成的准备
midiOutCacheDrumPatches        请求内部的一个MIDI合成设备预装指定的基于键的击打音色集
midiOutCachePatches            请求内部的音乐仪器数字接口的合成设备预装指定的音色集
midiOutClose                   关闭指定的音乐仪器数字接口的输出设备
midiOutGetDevCaps              查询指定的音乐仪器数字接口的输出设备,以确定其性能
midiOutGetErrorText            检取有关MIDI输出设备指定采取的文本说明
midiOutGetID                   检取指定的MIDI输出设备的标识符
midiOutGetNumDevs              检取系统中存在的MIDI输出设备的数量

midiOutGetVolume               返回一个MIDI输出设备的当前卷设置
midiOutLongMsg                 向指定的MIDI输出设备发送一条系统专用的MIDI消息
midiOutMessage                 向一MIDI输出设备驱动器发送一条消息
midiOutOpen                    打开指定的MIDI输出设备进行回放
midiOutPrepareHeader           为MIDI输出设备准备一个缓冲区
midiOutReset                   为指定的MIDI输出设备关闭所有MIDI通道上的所有标志
midiOutSetVolume               设置一个MIDI输出设备的卷
midiOutShortMsg                向指定的MIDI输出设备发送一条短MIDI消息
midiOutUnprepareHeader         清除由midiOutPrepareHeader函数完成的准备
midiStreamClose                关闭一个打开的MIDI流
midiStreamOpen                 为输出,打开一个MIDI流
midiStreamOut                  在MIDI输出设备上播放或排队一个MIDI数据流
midiStreamPause                暂停一个MIDI流的播放
midiStreamPosition             在一个MIDI流中检取当前位置
midiStreamProperty             设置或检取与MIDI输出设备相关MIDI数据流的特性
midiStreamRestart              重新启动一个暂停的MIDI流.
midiStreamStop                 关掉指定MIDI输出设备的所有MIDI通道
mixerClose                     关闭指定的混频器
mixerGetControlDetails         检取和一个声频指线路相关的单一控件的细节
mixerGetDevCaps                查询指定的混频器以确定其性能

mixerGetID                     获取指定混频器的标识符
mixerGetLineContrils           检取和一个声频线路相关的一个或多个控件
mixerGetLineInfo               检取混频器有关特有线路的信息
mixerGetNumDevs                返回系统中存在的混频器的数量
mixerMessage                   把一个定制混频器驱动器消息直接发送给混频器驱动器
mixerOpen                      打开指定的混频器,在应用程序关闭该句柄前保证该设备不被移走
mixerSetControlDetails         设置和一个声频指线路相关的单一控件的细节
mmioAsvance                    填充一个文件的I/O缓冲区
mmioAscend                     取出一个RIFF文件块
mmioClose                      关闭有mmioOpen打开的文件
mmioCreateChunk                创建由mmioOpen函数打开的RIFF文件中的一个块
mmioDescend                    进入由mmioOpen函数打开的RIFF文件的块中,并查找一个块
mmioFlush                      把文件缓冲区的数据写入磁盘中
mmioGetInfo                    检取有关由mmioOpen函数创建的RIFF文件的信息
mmioInstallIOProcA             装入或删除一个自定义的I/O过程
mmioOpen                       为输入/输出打开一个文件
mmioRead                       从由mmioOpen函数打开的文件中读取指定字节数的数据
mmioRename                     重新命名指定的文件
mmioSeek                       改变由mmioOpen函数打开的文件中的当前指针位置

mmioSendMessage                向与指定文件相联系的I/O过程发送一条消息
mmioSetBuffer                  允许或禁止文件缓冲区的I/O,或改变这个缓冲区,或改变这个缓冲区的大小
mmioSetInfo                    更新从被打开文件中检取的信息
mmioStringToFOURCC             把一个以NULL结束的字符串转换成一个4字符代码
mmioWrite                      向由mmioOpen函数打开的文件中写入指定字节数的数据
mmsystemGetVersion             返回多媒体扩展系统软件的当前版本号
OpenDriver                     打开一个可安装驱动器实例,并用缺省设置或指定值初始化该实例
PlaySound                      播放一个波形声音
SendDriveMessage               向指定的可安装驱动器发送一条消息
SndPlaySound                   播放一个由文件名或由登记的[SOUND]段的入口指定的波形声音
timeBeginPeriod                设置应用程序或驱动程序使用的最小定时器分
                              辨率
timeEndPeriod                  清除应用程序或驱动程序使用的最小定时器分
                              辨率
timeGetDevCaps                 查询定时器设备以确定其性能
timeGetSystemTime              检取从WINDOWS开始已逝去的毫秒数m
timeGetTime                    检取从WINDOWS开始已逝去的毫秒数,此函数
                              比上一条函数开销小
timeKillEvent                  毁掉指定的定时器回调事件
timeSetEvent                   设置一个定时器回调事件
waveInAddBuffer                向波形输入设备添加一个输入缓冲区
WaveInClose                    关闭指定的波形输入设置

waveInGetDevCaps               查询指定的波形输入设备以确定其性能
waveInGetErrorText             检取由指定的错误代码标识的文本说明
waveInGetID                    获取指定的波形输入设备的标识符
waveInGetNumDevs               返回系统中存在的波形输入设备的数量
waveInGetPosition              检取指定波形输入设备的当前位置
waveInMessage                  发送一条消息给波形输入设备的驱动器
waveInOpen                     为录音而打开一个波形输入设备
waveInPrepareHeader            为波形输入准备一个输入缓冲区
waveInReset                    停止给定的波形输入设备的输入,且将当前位
                              置清零
waveInStart                    启动在指定的波形输入设备的输入
waveInStop                     停止在指定的波形输入设备上的输入
waveInUnprepareHeader          清除由waveInPrepareHeader函数实现的准备
waveOutBreakLoop               中断给定的波形输出设备上一个循环,并允许
                              播放驱动器列表中的下一个块
waveOutClose                   关闭指定的波形输出设备
waveOutGetDevCaps              查询一个指定的波形输出设备以确定其性能
waveOutGetErrorText            检取由指定的错误代码标识的文本说明
waveOutGetID                   检取指定的波形输出设备的标识符
waveOutGetNumDevs              检取系统中存在的波形输出设备的数量
waveOutGetPitch                查询一个波形输出设备的当前音调设置
waveOutGetPlaybackRate         查询一个波形输出设备当前播放的速度
waveOutGetPosition             检取指定波形输出设备的当前播放位置
waveOutGetVolume               查询指定波形输出设备的当前音量设置
waveOutMessage                 发送一条消息给一个波形输出设备的驱动器
waveOutOpen                    为播放打开一个波形输出设备
waveOutPause                   暂停指定波形输出设备上的播放
waveOutPrepareHeader           为播放准备一个波形缓冲区
waveOutRestart                 重新启动一个被暂停的波形输出设备
waveOutSetPitch                设置一个波形输出设备的音调
waveOutSetPlaybackRate         设置指定波形输出设备的速度
waveOutSetVolume               设置指定的波形输出设备的音量
waveOutUnprepareHeader         清除由waveOutPrepareHeader函数实现的准备
waveOutWrite                   向指定的波形输出设备发送一个数据块

 

posted on 2009-05-27 16:40  jdmei520  阅读(1201)  评论(0编辑  收藏  举报

导航