[源代码以及工程实例下载 ]
1、 语音播放API
1.1 waveOutOpen - 打开播放设备
MMRESULT waveOutOpen(
LPHWAVEOUT phwo, /* 一个指向接收波形音频输出设备的句柄 */
UINT_PTR uDeviceID, /* 将要被打开的波形音频输出设备的ID */
LPWAVEFORMATEX pwfx, /* 一个指向将被送到设备的音频数据格式的WAVEFORMATEX结构的指针 */
DWORD_PTR dwCallback, /* 它指向一个特定的CALLBACK函数,事件柄,窗口柄... */
DWORD_PTR dwCallbackInstance, /* 传递到CALLBACK进程的用户实例数据,如是窗口,该参数设为0 */
DWORD fdwOpen /* 用来打开设备的标识(FLAGS) */
);
1)phwo:一个指向接收波形音频输出设备的句柄。用句柄来区别(identify)别的波形输出设备。如果fdwOpen被设定为 WAVE_FORMAT_QUERY,那么这个参数可能为NULL 。
2)uDevideID:将要被打开的波形音频输出设备的ID ,它可以是一个设备ID,也可以是一个已经打开的波形音频输入设备句柄,你可以用以下的值来货替:
WAVE_MAPPER - 该函数选一个能够播放给定格式的波形音频输出设备
3)pwfx:一个指向将被送到设备的音频数据格式的WAVEFORMATEX结构的指针,当调用waveOutOpen 函数之后可立即释放该结构;
4)dwCallback:它指向一个特定的CALLBACK函数,事件柄,窗口柄,或一个线程ID(用于在音频回放时以便处理与回放进度相关的消息)。如果无须CALLBACK函数,可以将其设为0 。
5)dwCallbackInstance :传递到CALLBACK进程的用户实例数据。如果是窗口CALLBACK进程的话,该参数不用(设为0)
6)fwOpen:用来打开设备的标识(FLAGS),它们的定义如下:
| 值 | 含义 |
| CALLBACK_EVENT | dwCallback 参数栏是事件句柄 |
| CALLBACK_FUNCTION | dwCallback 参数栏是CALLBACK函数地址 |
| CALLBACK_NULL | 默认的设置,即无CALLBACK进程 |
| CALLBACK_THREAD | dwCallback 参数栏是线程ID |
| CALLBACK_WINDOW | dwCallback 参数栏是窗口句柄 |
| WAVE_ALLOWSYNC | 如果该项被设置,一个同步的波形音频设备能被打开。如果在打开一个同步驱动时没有用该项,设备打开将会失败。 |
| WAVE_FORMAT_DIRECT | 如果设定该项,音频设备不会对输出的音频数据执行转换 |
| WAVE_FORMAT_QUERY | 如果设定该项,waveOutOpen 用于询问设备是否支持给定的格式,但设备实际上并没有被打开。此时phwo参数可为NULL |
| WAVE_MAPPED | 该项被设定后uDeviceID参数表示将通过波形映射器映射到一个波形格式音频设备。 |
7)返回值:成功后返回MMSYSERR_NOERROR ,否则返回以下值:
| 值 | 描述 |
| MMSYSERR_ALLOCATED | 表示资源已存在 |
| MMSYSERR_BADDEVICEID | 设备ID超出范围 |
| MMSYSERR_NODRIVER | 没有驱动 |
| MMSYSERR_NOMEM | 不能分配内存 |
| WAVERR_BADFORMAT | 企图打开一个不被支持的格式 |
| WAVERR_SYNC | 设备是可同步的,但waveOutOpen没用有WAVE_ALLOWSYNC设置。 |
注:
waveoutopen创建设备实例句柄用于,使用其他waveoutAPI时将之作为参数,用于区别不同的音频流。
可用waveOutGetNumDevs函数测定在当前系统中输出设备的数目。
如果uDeviceID参数项是一个ID,它将会表示从0 到总的数目,WAAVE_MAPPER常量也可以用作装置ID。
&nbs

本文档详细介绍了使用WaveOut API进行多线程音频播放的方法,包括waveOutOpen、waveOutPrepareHeader、waveOutWrite等关键函数的使用,以及解码器开发、解码线程、播放线程和主播放线程的实现过程。
最低0.47元/天 解锁文章
1822

被折叠的 条评论
为什么被折叠?



