多媒体库函数 WinMM.dll 简介
大致流程:
1. 首先用 waveOutOpen 获得 Windows 混音器的句柄。
2. 再初始化一个 Wave Header, 并用 waveOutPrepareHeader 将它“准备好”。
3. 接着用 waveOutWrite 输出这个 Wave Header。
4. 等待播放完成后用 waveOutUnprepareHeader 将 Wave Header “反准备”。
5. 最后调用 waveOutClose 来关闭最开始获得的句柄。
注意事项:
1. 每一步都要判断错误, 使用 waveOutGetErrorTextW 这个 API 可以获得错误代码对应的文本。为了方便, 我写了如下函数直接返回 vb 所支持的 String 类型:
2. waveOutPrepareHeader 和 waveOutUnprepareHeader 的意思有点像“锁定”。就是只要 Prepare 了, 你就不能改动了, 特别地, 你不能释放已锁定 Wave Header 的内存, 否则会引起程序崩溃。内存指 Wave Header 的 lpData 指向的一块内存区域, 这块内存区域在播放完成之前不能释放。我们在这个程序里简单地通过 waveOutUnprepareHeader 的返回值来判断是否播放完成。在较为复杂的程序中, 我们可以通过回调函数来判断何时播放完毕。回调函数可以在 waveOutOpen 的 dwCallback 参数中设置。
本程序简单地播放了如下 buffer:
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 向指定的波形输出设备发送一个数据块