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的主要内容,如果未能解决你的问题,请参考以下文章

mcisendstring播放mp3

用mciSendString播放音频时怎么停止播放

C#调用mciSendString获取歌曲时长没反应

录音和播放声音 mciSendString

C语言中mciSendString用法

mciSendString 随机停止工作