繁体   English   中英

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。程序运行正常,但音量没有改变。 关于出了什么问题的任何建议? (两页谷歌搜索,什么都没有)

根据文档:

设置音频命令

setaudio 命令设置与音频播放和捕获相关联的值。 数字视频和 VCR 设备识别此命令。

...

音频
音频播放和捕获标志。 下表列出了可识别 setaudio 命令的设备类型以及每种类型使用的标志。

数字视频
录像机

你的音频播放使用waveaudio设备,它不支持setaudio命令。

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

根据这些错误代码的Error 261MCIERR_UNRECOGNIZED_COMMAND错误。 错误本身是不言自明的:您正在发送一个无法识别的命令。

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

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

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

我之前也遇到过类似的问题,我可以使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM