如何从程序中改变音量?
尽管有一个注册表键(HKEY_CURRENT_USER\ControlPanel\Volume\Volume),每次在控制面板中改变声音设置它也随之改变,不过看起来仅仅改变这个设置不能改变音量。我建议使用另外一种改变音量的途径。这个途径就是使用waveOutSetVolume函数。如果你用这个函数改变音量,控制面板中的设置不被改变,但是实际的音量将被改变。
waveOutSetVolume函数设置某个波形音频输出设备的音量。假设在我们的Pocket PC上仅仅有一个音频输出设备,能够找到第一个设备然后设置它的音量。音量在0和0xFFFF的范围内。
void SetSoundVolume(DWORD dwVolume) {
WAVEFORMATEX wf;
wf.wFormatTag = WAVE_FORMAT_PCM;
wf.nChannels = 1;
wf.nSamplesPerSec = 8000 * 1000;
wf.wBitsPerSample = 8;wf.nBlockAlign = wf.nChannels * wf.wBitsPerSample / 8;
wf.nAvgBytesPerSec = wf.nSamplesPerSec * wf.nBlockAlign;
wf.cbSize = 0;
HWAVEOUT hwo;
for (UINT id = 0; id < waveOutGetNumDevs(); id++) {
if (waveOutOpen(&hwo, id, &wf, 0, 0, CALLBACK_NULL)
== MMSYSERR_NOERROR)
{
waveOutSetVolume(hwo, dwVolume);
waveOutClose(hwo);
break;
}
}
}
百分比音量:如果你想使用百分比设置音量,而不使用0到0xFFFF范围,那么你可以用下面的代码:
DWORD dwSoundVolumePercents = 50;
SetSoundVolume( (DWORD)(0xFFFF*1.0*dwSoundVolumePercents/100.0) );