-2

プログラムでボリューム情報を取得する必要があります。私はさまざまな方法を使用してきwaveOutGetVolume()ましたが、0 から 100 の間の値を取得できませんでした。

HIWORD 値と LOWORD 値も使用してみました。

たとえば、私のボリュームは現在 14% です。My Program は完全に乱数を表示します。

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

誰かが私が間違っているところを教えてもらえますか?

ありがとう

4

1 に答える 1

3

ドキュメントを注意深く読むと、次のように書かれています。

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;
于 2012-08-06T14:37:56.990 に答える