1

我正在使用 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

4 回答 4

1

根据文档:

设置音频命令

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

...

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

数字视频
录像机

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

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

于 2015-02-15T01:41:36.230 回答
0

Error 261根据这些错误代码是一个MCIERR_UNRECOGNIZED_COMMAND错误。错误本身很容易解释:您正在发送无法识别的命令。

于 2015-02-15T01:31:25.423 回答
0

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

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

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

于 2015-02-15T01:42:16.723 回答
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在声明变量时使用)

于 2021-02-24T08:17:59.030 回答