提示: 设备写满缓冲区返回给程序后, 须调用此函数;释放(GlobalFree)缓冲区前, 须调用此函数;取消一个尚未准备的缓冲区将无效, 但函数返回 0
//声明:
waveInUnprepareHeader(
hWaveIn: HWAVEIN;
{设备句柄}
lpWaveInHdr: PWaveHdr;
{TWaveHdr 结构的指针}
uSize: UINT
{TWaveHdr 结构大小}
): MMRESULT;
{成功返回 0; 可能的错误值见下:}
MMSYSERR_INVALHANDLE =
5;
{设备句柄无效}
MMSYSERR_HANDLEBUSY =
12;
{设备已被另一线程使用}
WAVERR_STILLPLAYING =
33;
{缓冲区还在队列中}
//TWaveHdr 是 wavehdr_tag 结构的重定义
wavehdr_tag =
record
lpData: PChar;
{指向波形数据缓冲区}
dwBufferLength: DWORD;
{波形数据缓冲区的长度}
dwBytesRecorded: DWORD;
{若首部用于输入, 指出缓冲区中的数据量}
dwUser: DWORD;
{指定用户的32位数据}
dwFlags: DWORD;
{缓冲区标志}
dwLoops: DWORD;
{循环播放次数, 仅用于输出缓冲区}
lpNext: PWaveHdr;
{保留}
reserved: DWORD;
{保留}
end;
//TWaveHdr 中的 dwFlags 的可选值:
WHDR_DONE =
$00000001;
{设备已使用完缓冲区, 并返回给程序}
WHDR_PREPARED =
$00000002;
{waveInPrepareHeader 或 waveOutPrepareHeader 已将缓冲区准备好}
WHDR_BEGINLOOP =
$00000004;
{缓冲区是循环中的第一个缓冲区, 仅用于输出}
WHDR_ENDLOOP =
$00000008;
{缓冲区是循环中的最后一个缓冲区, 仅用于输出}
WHDR_INQUEUE =
$00000010;
{ reserved for driver }