mciSendString() setaudio 音量错误 261
Posted
技术标签:
【中文标题】mciSendString() setaudio 音量错误 261【英文标题】:mciSendString() setaudio volume error 261 【发布时间】:2015-02-15 01:25:13 【问题描述】:我正在使用 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。程序运行良好,但音量没有变化。关于有什么问题的任何建议? (谷歌搜索了两页,什么都没有)
【问题讨论】:
有其他方法可以设置波形音量。 support.microsoft.com/KB/139098 【参考方案1】:根据文档:
setaudio command
setaudio 命令设置与音频播放和捕获相关的值。 数字视频和 VCR 设备可以识别此命令。
...
lpszAudio 用于音频播放和捕获的标志。 下表列出了可识别 setaudio 命令的设备类型以及每种类型使用的标志。
数字视频录像机
您的音频播放使用的是 waveaudio 设备,该设备不支持 setaudio
命令。
要设置音频播放的音量,你必须切换到WaveOut API 进行播放,然后你可以使用waveOutSetVolume()
。
【讨论】:
【参考方案2】:Error 261
根据these 错误代码是MCIERR_UNRECOGNIZED_COMMAND
错误。错误本身很容易解释:您正在发送无法识别的命令。
【讨论】:
@bojoradarial 您需要更改传递给函数的字符串,因为它是一个无法识别的命令。 @bojoradarial 你能告诉我你正在看的“结果”吗?【参考方案3】:这并不是真正的解决方案,而只是一种解决方法。如果您使用 mp3 文件,它工作得非常好。加载 mp3 文件:
mciSendStringA("open [file].mp3 type mpegvideo alias [soundalias]", nullptr, 0, nullptr);
setaudio 指令将起作用。但是,我不知道是否有办法让它与 wav 文件一起使用......
【讨论】:
【参考方案4】:我之前也遇到过类似的问题,我可以使用 MCI 播放/暂停/循环播放 mp3。但未能调整音量。但是添加 WaveOut API 解决了问题。
HWAVEOUT hwo;
waveOutSetVolume(hwo, dwVolume);
根据microsoft docs,dwVolume
可以从 0x0000 到 0xFFFF
如果设备支持左右音频播放,0xFFFF 变为 0xFFFFFFFF,反之亦然
例如:
静音 = 0,
低 = 858993459,
正常 = 1717986918,
中等 = -1717986919,
HIGH = -858993460,
非常高 = -1
(这些样本值是从其原始十六进制值转换而来的十进制值,例如 0x11111111。声明变量时使用long long int
)
【讨论】:
以上是关于mciSendString() setaudio 音量错误 261的主要内容,如果未能解决你的问题,请参考以下文章