17370845950

【C++】基础:Windows音频音量控制

通过调用windows api来控制音量和播放音频,以下是详细的指导:

控制音量

以下是通过调用Windows API来逐步增加音量的示例代码:

/**@breif 修改Windows系统声音*/
#include 
#include 
#include 
#include 

bool SetVolum(int volume) { HRESULT hr; IMMDeviceEnumerator pDeviceEnumerator = 0; IMMDevice pDevice = 0; IAudioEndpointVolume pAudioEndpointVolume = 0; IAudioClient pAudioClient = 0;

try {
    hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pDeviceEnumerator);
    if (FAILED(hr)) throw "CoCreateInstance";

    hr = pDeviceEnumerator-youjiankuohaophpcnGetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice);
    if (FAILED(hr)) throw "GetDefaultAudioEndpoint";

    hr = pDevice-youjiankuohaophpcnActivate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void**)&pAudioEndpointVolume);
    if (FAILED(hr)) throw "pDevice-youjiankuohaophpcnActive";

    hr = pDevice-youjiankuohaophpcnActivate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void**)&pAudioClient);
    if (FAILED(hr)) throw "pDevice-youjiankuohaophpcnActive";

    float fVolume;
    fVolume = volume / 100.0f;

    hr = pAudioEndpointVolume-youjiankuohaophpcnSetMasterVolumeLevelScalar(fVolume, &GUID_NULL);
    if (FAILED(hr)) throw "SetMasterVolumeLevelScalar";

    pAudioClient-youjiankuohaophpcnRelease();
    pAudioEndpointVolume-youjiankuohaophpcnRelease();
    pDevice-youjiankuohaophpcnRelease();
    pDeviceEnumerator-youjiankuohaophpcnRelease();
    return true;
}
catch (...) {
    if (pAudioClient) pAudioClient-youjiankuohaophpcnRelease();
    if (pAudioEndpointVolume) pAudioEndpointVolume-youjiankuohaophpcnRelease();
    if (pDevice) pDevice-youjiankuohaophpcnRelease();
    if (pDeviceEnumerator) pDeviceEnumerator-youjiankuohaophpcnRelease();
    throw;
}
return false;

}

int main(int argc, char *argv) { CoInitialize(0); int vol; for (vol = 0; vol

实际效果如下:

电脑音量从0到10逐步增加,每次增加10%,每次增加之间的延时设置为1秒。

播放音频

以下是通过Windows API来播放音频的示例代码:

/C++播放音频(VS2017)*/

include

include

include // 用于播放音频

pragma comment(lib, "winmm.lib") // 导入声音头文件库

int main() { std::cout << "开始播放hello.mp3...\n"; PlaySound(TEXT("hello.mp3"), NULL, SND_FILENAME | SND_ASYNC); std::cout << "按任意键结束...\n"; std::cin.get(); return 0; }

实际效果如下:

电脑开始播放hello.mp3的声音。