#pragma comment(lib,"winmm")
#include <mmsystem.h>
#include <mmreg.h>
waveOutOpen函数介绍2007-08-30 19:08(from MSDN)
这个函数打开一个给定的波形音频输出装置来进行回放。
(The waveOutOpen function opens the given waveform-audio output device for playback)
原型如下:
MMRESULT waveOutOpen(
LPHWAVEOUT phwo,
UINT_PTR uDeviceID,
LPWAVEFORMATEX pwfx,
DWORD_PTR dwCallback,
DWORD_PTR dwCallbackInstance,
DWORD fdwOpen
);
参数介绍(paramters):
phwo
一个指向接收波形音频输出装置柄的缓冲器。用柄来区别(identify)装置当呼叫别的波形装置输出装置。如果fdwOpen被设定为WAVE_FORMAT_QUERY,那么这个参数可能为NULL 。
uDevideID
将要被打开的波形音频输出装置的ID ,它可以是一个装置ID,也可以是一个已经打开的波形音频输入装置柄,你可以用以下的值来货替:
值 含义
WAVE_MAPPER 该函数选一个能够播放给定格式的波形音频输出装置
pwfx
一个指向区别将被送到装置的音频数据格式的WAVEFORMATEX结构的指针,你可以FREE这个结构当你一将其传到waveOutOpen 函数;
dwCallback
它指向一个特定的CALLBACK函数,事件柄,窗口柄,或一个将在波形音频回放时以便处理与回放进度相关的消息的期间呼叫的线程ID,如果无须CALLBACK函数,可以将其设为0 。更多请参看waveOutProc
dwCallbackInstance
传递到CALLBACK进程的用户实例数据。如果是窗口CALLBACK进程的话,该参数不用(设为0)
fwOpen
用来打开装置的标识(FLAGS),它们的定义如下:
值 含义
CALLBACK_EVENT dwCallback 参数栏是事件柄
CALLBACK_FUNCTION dwCallback 参数栏是CALLBACK过程地址
CALLBACK_NULL 默认的设置,即无CALLBACK进程
CALLBACK_THREAD dwCallback 参数栏是线程ID
CALLBACK_WINDOW dwCallback 参数栏是窗口柄
WAVE_ALLOWSYNC 如果该项被设置,一个同步的装置能被打开。如果在打开一个同步驱动时没有用该项,装置打开将会失败。
WAVE_FORMAT_DIRECT 如果设定该项,the ACM driver does not perform conversions on the audio data.
WAVE_FORMAT_QUERY 如果设定该项,waveOutOpen 询问装置来决定是否支持给定的格式,但装置实际上并没有被打开。
WAVE_MAPPED 该项被设定后uDeviceID参数表示
一个被声波映射装置映射的波形装置。
返回值:
成功后返回MMSYSERR_NOERROR ,否则返回以下值:
值 描述
MMSYSERR_ALLOCATED 表示资源已存在
MMSYSERR_BADDEVICEID 装置ID超出范围
MMSYSERR_NODRIVER 没有驱动
MMSYSERR_NOMEM 不能分配内存
WAVERR_BADFORMAT 企图打开一个不被支持的格式
WAVERR_SYNC 装置是可同步的,但waveOutOpen没用有WAVE_ALLOWSYNC呼叫。
注:
用waveOutGetNumDevs 函数测定在当前系统中输出装置的数目。如果uDeviceIC参数项是一个装置ID,它将会表示从0 到总的数目,WAAVE_MAPPER常量也可以用作装置ID。pwfc所指的结构能够扩展到包含某些数据格式的特殊信息,例如,对于PCM数据,一个额外的UNIT 类型用来表示取样的位数目。在这个情况下用PCMWAVEFORAMT结构。对于其它的格式,用WAVEFORMATEX结构来表示额外的数据长度。如果你选用的是一个窗口或线程来接收CALLBACK信息,如下的信息将会被送到窗口处理函数中,来表明波形音频输出进程:MM_WOM_OPEN ,MM_WOM_CLOSE ,和MM_WOM_DONE ,如果你选用的是一个函数来接收CALLBACK信息,如下的信息将会被传到函数中,来显示波形音频输出进程:WOM_OPEN ,WOM_CLOSE ,WOM_DONE.
要求:
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Mmsystem.h; include Windows.h.
Library: Use Winmm.lib.
参见:
Waveform Audio, Waveform Functions, WAVEFORMATEX,
waveOutGetNumDevs, waveOutProc, PCMWAVEFORMAT, MM_WOM_OPEN,
MM_WOM_CLOSE, MM_WOM_DONE
///
原型如下:
MMRESULT waveOutWrite(
HWAVEOUT hwo,
LPWAVEHDR pwh,
UINT cbwh
);
参数(s)如下:(parameters)
hwo
波形音频输出装置的柄(handle).
pwh
一个指向包含有数据块信息的WAVEHDR结构的指针。
cbwh
这个就是WAVEHDR结构的大小(用sizeof (WAVEHDR) 就可以了)。
返回的值介绍:
如果该函数成功完成则会返回MMSYSERR__NOERROR
否则就返回以下的值:
值 说明
MMSYSERR_INVALHANLE 给定的装置柄无效。
MMSYSERR_NODRIVER 没有装置驱动。
MMSYSERR_NOMEM 不可以分配内存(memory)
WAVERR_UNPREPARED pwh参数项所指的数据块没有被prepared(该不会没有用 waveOutPrepareHeader这个函数吧!)
注:
当输完缓冲器里的数据时,WAVEHDR 结构的dwFlags
成员就会被设定为DHDR_DONE,当缓冲器被传到waveOutWrite函数中之前必须用waveOutP
repareHeader函数prepare一下。除非装置被waveOutPause 函数暂停了之后,回放在第
一个数据块被发送到装置时开始了。
要求:
Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Mmsystem.h; include Windows.h.
Library: Use Winmm.lib.(用VC IDE的朋友不要忘记了在link里添加这个东东哦!)
参考:
Waveform Audio, Waveform Functions, WAVEHDR, waveOutPrepareHeader,
waveOutPause