-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
71 lines (54 loc) · 1.94 KB
/
main.cpp
File metadata and controls
71 lines (54 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <audioclient.h>
#include <mmdeviceapi.h>
#include <audiopolicy.h>
#include <endpointvolume.h>
#include <iostream>
#include <string>
#include <thread>
static float old_volume = 0.0f;
static int sessionCountOld = 0;
void syncMasterVolumeToAllApps(IAudioEndpointVolume *endpointVolume, IAudioSessionEnumerator *sessionEnum)
{
float volume = 0.0f;
endpointVolume->GetChannelVolumeLevelScalar(0, &volume);
int sessionCount;
sessionEnum->GetCount(&sessionCount);
if(old_volume != volume || sessionCount != sessionCountOld)
{
std::cout << "Sync to Mastervolume: " << volume << std::endl;
for (int i = 0; i < sessionCount; i++)
{
IAudioSessionControl *sessionControl;
ISimpleAudioVolume *audioVolume;
sessionEnum->GetSession(i, &sessionControl);
sessionControl->QueryInterface(__uuidof(ISimpleAudioVolume), (void **) &audioVolume);
audioVolume->SetMasterVolume(volume, 0);
audioVolume->Release();
sessionControl->Release();
}
old_volume = volume;
sessionCountOld = sessionCount;
}
}
int main() {
CoInitialize(nullptr);
std::cout << "Volsync v1.2" << std::endl;
IMMDevice *mmDevice;
IMMDeviceEnumerator *mmDeviceEnum;
IAudioSessionManager2 *sessionManager;
IAudioSessionEnumerator *sessionEnum;
IAudioEndpointVolume *endpointVolume;
CoCreateInstance(__uuidof(MMDeviceEnumerator), 0, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&mmDeviceEnum);
mmDeviceEnum->GetDefaultAudioEndpoint(eRender, eMultimedia, &mmDevice);
mmDevice->Activate(__uuidof(IAudioEndpointVolume) , CLSCTX_ALL, 0, (void**)&endpointVolume);
mmDevice->Activate(__uuidof(IAudioSessionManager2), CLSCTX_ALL, 0, (void**)&sessionManager);
while(true)
{
sessionManager->GetSessionEnumerator(&sessionEnum);
syncMasterVolumeToAllApps(endpointVolume, sessionEnum);
sessionEnum->Release();
using namespace std::chrono_literals;
std::this_thread::sleep_for(100ms);
}
return 0;
}