waveOutClose

This function closes the specified waveform output device.

MMRESULT waveOutClose(   HWAVEOUT hwo  );  
Parameters
hwo
Handle to the waveform-audio output device. If the function succeeds, the handle is no longer valid after this call.
Return Values

One of the values described in the following table is returned.

ValueDescription
MMSYSERR_NOERRORSuccess.
MMSYSERR_INVALHANDLESpecified device handle is invalid.
MMSYSERR_NODRIVERNo device driver is present.
MMSYSERR_NOMEMUnable to allocate or lock memory.
WAVERR_STILLPLAYINGThere are still buffers in the queue.
Remarks

If the device is still playing a waveform-audio file, the close operation fails. Use the waveOutResetfunction to terminate playback before calling waveOutClose.

Requirements

OS Versions: Windows CE 2.0 and later.
Header: Mmsystem.h.
Link Library: Coredll.lib.

See Also

Waveform Audio Functions


其它:

提示有多个操作符"-"与这些操作匹配 #include <windows.h> #include <mmsystem.h> #include <fstream> #include <NXOpen/UI.hxx> // 全局变量 HWAVEOUT hWaveOut; WAVEHDR waveHeader; bool isPlaying = false; // 回调函数(播放完成通知) void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { if (uMsg == WOM_DONE) { waveOutUnprepareHeader(hWaveOut, &waveHeader, sizeof(WAVEHDR)); delete[] waveHeader.lpData; isPlaying = false; } } // 播放WAV文件 void PlayWavFile(const char* filePath) { if (isPlaying) return; std::ifstream wavFile(filePath, std::ios::binary); if (!wavFile.is_open()) { UF_UI_set_status("无法打开音频文件"); return; } // 读取WAV文件头 char header[44]; wavFile.read(header, 44); // 解析音频参数 WAVEFORMATEX waveFormat; waveFormat.wFormatTag = *(WORD*)(header + 20); waveFormat.nChannels = *(WORD*)(header + 22); waveFormat.nSamplesPerSec = *(DWORD*)(header + 24); waveFormat.nAvgBytesPerSec = *(DWORD*)(header + 28); waveFormat.nBlockAlign = *(WORD*)(header + 32); waveFormat.wBitsPerSample = *(WORD*)(header + 34); waveFormat.cbSize = 0; DWORD dataSize = *(DWORD*)(header + 40); // 读取音频数据 char* audioData = new char[dataSize]; wavFile.read(audioData, dataSize); wavFile.close(); // 打开音频设备 if (waveOutOpen(&hWaveOut, WAVE_MAPPER, &waveFormat, (DWORD_PTR)waveOutProc, 0, CALLBACK_FUNCTION) != MMSYSERR_NOERROR) { delete[] audioData; UF_UI_set_status("音频设备初始化失败"); return; } // 准备播放头 ZeroMemory(&waveHeader, sizeof(WAVEHDR)); waveHeader.lpData = audioData; waveHeader.dwBufferLength = dataSize; if (waveOutPrepareHeader(hWaveOut, &waveHeader, sizeof(WAVEHDR)) { delete[] audioData; waveOutClose(hWaveOut); UF_UI_set_status("音频数据准备失败"); return; } // 开始播放 if (waveOutWrite(hWaveOut, &waveHeader, sizeof(WAVEHDR))) { waveOutUnprepareHeader(hWaveOut, &waveHeader, sizeof(WAVEHDR)); delete[] audioData; waveOutClose(hWaveOut); UF_UI_set_status("播放失败"); return; } isPlaying = true; UF_UI_set_status("音频播放中..."); } // 停止播放 void StopPlayback() { if (!isPlaying) return; waveOutReset(hWaveOut); // 立即停止播放 waveOutUnprepareHeader(hWaveOut, &waveHeader, sizeof(WAVEHDR)); waveOutClose(hWaveOut); isPlaying = false; UF_UI_set_status("播放已停止"); }
最新发布
08-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值