我正在使用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.该程序运行正常,但音量不会改变。什么是错的任何建议? (谷歌搜索两页,没什么)
答案 0 :(得分:1)
根据文件:
setaudio命令设置与音频播放和捕获相关的值。 数字视频和VCR设备识别此命令。
...
lpszAudio
用于音频播放和捕获的标志。 下表列出了识别setaudio命令的设备类型以及每种类型使用的标志。<强> digitalvideo 强>
的 VCR 强>
您的音频播放使用 waveaudio 设备,该设备不支持setaudio
命令。
要设置音频播放音量,您必须切换到 WaveOut API进行播放,然后才能使用waveOutSetVolume()
。
答案 1 :(得分:0)
Error 261
是MCIERR_UNRECOGNIZED_COMMAND
错误。错误本身就是非常自我解释的:你发送的是一个无法识别的命令。
答案 2 :(得分:0)
这不是一个真正的解决方案,只是一种解决方法。如果你使用mp3文件,它工作得很好。要加载mp3文件:
mciSendStringA("open [file].mp3 type mpegvideo alias [soundalias]", nullptr, 0, nullptr);
然后setaudio指令将起作用。但是,我不知道是否有办法使用wav文件...
答案 3 :(得分:0)
我之前也遇到过类似的问题,我可以使用 MCI 播放/暂停/循环播放 mp3。但未能调节音量。但是添加 WaveOut API 解决了问题。
HWAVEOUT hwo;
waveOutSetVolume(hwo, dwVolume);
其中 dwVolume
根据 microsoft docs 可以是从 0x0000 到 0xFFFF
如果设备支持左右音频播放,则 0xFFFF 变为 0xFFFFFFFF,反之亦然
例如:
静音 = 0,
低 = 858993459,
正常 = 1717986918,
中 = -1717986919,
高 = -858993460,
非常高 = -1
(这些示例值是从其原始十六进制值转换而来的小数,例如 0x11111111。声明变量时使用 long long int
)