mciSendString()setaudio音量错误261

时间:2015-02-15 01:25:14

标签: c++ winapi audio mci

我正在使用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.该程序运行正常,但音量不会改变。什么是错的任何建议? (谷歌搜索两页,没什么)

4 个答案:

答案 0 :(得分:1)

根据文件:

setaudio command

  

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

     

...

     

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

     

<强> digitalvideo
  的 VCR

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

要设置音频播放音量,您必须切换到 WaveOut API进行播放,然后才能使用waveOutSetVolume()

答案 1 :(得分:0)

根据{{​​3}}错误代码

Error 261MCIERR_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