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 261
是 MCIERR_UNRECOGNIZED_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
)
我正在使用 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,什么也没有)
Error 261
是 MCIERR_UNRECOGNIZED_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
)