2012-08-06 110 views
-2

我的程序需要檢索卷信息。我一直在使用各種方式waveOutGetVolume(),但沒有運氣退出0和100之間的值。C++ WinAPI waveOutGetVolume

我曾嘗試使用HIWORD和LOWORD值以及。

例如,我的銷量目前爲14%。我的程序顯示一個完全隨機的數字。

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

有人能告訴我我要去哪裏嗎?

感謝

+0

你檢查返回值?這是你的實際代碼,如果是這樣,你爲什麼不初始化?來自MSDN:hwo - 處理開放的波形音頻輸出設備。該參數也可以是設備標識符。 – steveg89 2012-08-06 14:16:41

+0

[The documentation](http://msdn.microsoft.com/zh-cn/library/aa909806.aspx)表示0xFFFF表示完整卷,0x0000表示安靜。你不會得到介於0和100之間的值。 – jrok 2012-08-06 14:18:18

+0

是的,我確實看到了這個。有沒有可能的方法來檢索這些之間的百分比?但是我得到74579396作爲我的最大音量 – JP29 2012-08-06 14:24:08

回答

2

仔細閱讀the documentation,它說:

pdwVolume

指向一個變量來填充當前的音量設置。此位置的低位字包含左聲道音量設置,而高位字包含右聲道設置。 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;