【问题标题】:C++ WinAPI waveOutGetVolumeC++ WinAPI waveOutGetVolume
【发布时间】:2012-08-06 14:10:00
【问题描述】:

我的程序需要检索卷信息。我一直在使用waveOutGetVolume() 的各种方式,但没有运气提取 0 到 100 之间的值。

我也尝试过使用 HIWORD 和 LOWORD 值。

例如,我目前的音量为 14%。我的程序显示一个完全随机的数字。

DWORD volume;
HWAVEOUT hwo;
waveOutGetVolume(hwo, &volume);

谁能告诉我哪里出错了?

谢谢

【问题讨论】:

  • 你检查过返回值吗?这是您的实际代码吗?如果是,为什么不初始化 hwo?来自 MSDN:hwo - 处理一个开放的波形音频输出设备。该参数也可以是设备标识符。
  • The documentation 表示 0xFFFF 表示全音量,0x0000 表示静音。你不会得到 0 到 100 之间的值。
  • 是的,我确实看到了。有没有可能的方法来检索这些之间的百分比?但是我将 74579396 作为我的最大音量
  • returned value / 0xFFFF -> 最大音量的百分比。 volume 是一个双字。结果是低位词。
  • ^这给了我 665 的最大音量

标签: c++ winapi c++builder


【解决方案1】:

仔细阅读the documentation,上面写着:

pdw卷

指向要填充当前音量设置的变量的指针。该位置的低位字包含左声道音量设置,高位字包含右声道设置。 0xFFFF 代表全音量,0x0000 代表静音。

如果设备不支持左右音量控制,则指定位置的低位字包含单声道音量。

因此,您需要使用适当的掩码对结果进行位和处理:

DWORD volume;
HWAVEOUT hwo;
// retrieve the handle
waveOutGetVolume(hwo, &volume);
// don't forget to check for errors

WORD left_channel_volume = volume & 0xffff;           // extract the low order word
WORD right_channel_volume = (volume >> 16) & 0xffff;  // extract the high order word

unsigned left_volume_percent = left_channel_volume / 0xffff;

【讨论】:

    猜你喜欢
    • 2014-01-31
    • 2013-03-22
    • 2013-03-19
    • 1970-01-01
    • 2010-09-30
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多