mciSendString() 设置音频音量错误 261

mciSendString() setaudio volume error 261

我正在使用 MCI 做一些与声音相关的事情,一切正常,除了我不能改变音量。我有以下代码:

mciSendStringA("open res/theme.wav type waveaudio alias maintheme", nullptr, 0, nullptr);
MCIERROR error = mciSendStringA("setaudio maintheme volume to 50", nullptr, 0, nullptr);

error是261。程序运行正常,但音量没有变化。有什么问题的建议吗? (搜索了两页google,什么也没有)

根据 these 错误代码,

Error 261MCIERR_UNRECOGNIZED_COMMAND 错误。错误本身很容易解释:您正在发送无法识别的命令。

根据文档:

setaudio command

The setaudio command sets values associated with audio playback and capture. Digital-video and VCR devices recognize this command.

...

lpszAudio
Flag for audio playback and capture. The following table lists device types that recognize the setaudio command and the flags used by each type.

digitalvideo
vcr

您的音频播放正在使用 waveaudio 设备,该设备不支持 setaudio 命令。

为了设置音频播放的音量,你必须切换到WaveOut API播放,然后你可以使用waveOutSetVolume() .

这不是真正的解决方案,只是一种解决方法。如果你使用 mp3 文件,它工作得很好。要加载 mp3 文件:

mciSendStringA("open [file].mp3 type mpegvideo alias [soundalias]", nullptr, 0, nullptr);

然后 setaudio 指令将起作用。但是,我不知道是否有办法让它与 wav 文件一起使用...

我之前也 运行 遇到过类似的问题,我能够 Play/Pause/Loop mp3 与 MCI。但未能调节音量。但是添加 WaveOut API 解决了问题。

HWAVEOUT hwo;
waveOutSetVolume(hwo, dwVolume);

其中 dwVolume 根据 microsoft docs 可以从 0x0000 到 0xFFFF
如果设备支持左右音频播放 0xFFFF 变为 0xFFFFFFFF 反之亦然

例如:

静音 = 0,

低 = 858993459,

正常 = 1717986918,

中等 = -1717986919,

高 = -858993460,

非常高 = -1

(这些示例值是从其原始十六进制值(例如 0x11111111)转换为十进制。声明变量时使用 long long int