Initial commit
This commit is contained in:
16
src/platform/win32/resource.h
Normal file
16
src/platform/win32/resource.h
Normal file
@@ -0,0 +1,16 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by zelda3.rc
|
||||
//
|
||||
#define IDI_ICON1 101
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 102
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
71
src/platform/win32/sm.rc
Normal file
71
src/platform/win32/sm.rc
Normal file
@@ -0,0 +1,71 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "winres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (United States) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"platform\\win32\\resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""winres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON1 ICON "platform\\win32\\triforce.ico"
|
||||
|
||||
#endif // English (United States) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
||||
82
src/platform/win32/volume_control.c
Normal file
82
src/platform/win32/volume_control.c
Normal file
@@ -0,0 +1,82 @@
|
||||
#include "volume_control.h"
|
||||
|
||||
#define COBJMACROS
|
||||
#define CINTERFACE
|
||||
|
||||
#define MICROSOFT_WINDOWS_WINBASE_H_DEFINE_INTERLOCKED_CPLUSPLUS_OVERLOADS 0
|
||||
|
||||
#include <initguid.h>
|
||||
#include <audioclient.h>
|
||||
#include <audiopolicy.h>
|
||||
#include <mmdeviceapi.h>
|
||||
|
||||
static ISimpleAudioVolume *GetSimpleAudioVolume();
|
||||
|
||||
DEFINE_GUID(IID_IMMDeviceEnumerator, 0XA95664D2, 0X9614, 0X4F35, 0XA7, 0X46, 0XDE, 0X8D, 0XB6, 0X36, 0X17, 0XE6);
|
||||
DEFINE_GUID(CLSID_MMDeviceEnumerator, 0XBCDE0395, 0XE52F, 0X467C, 0X8E, 0X3D, 0XC4, 0X57, 0X92, 0X91, 0X69, 0X2E);
|
||||
DEFINE_GUID(IID_IAudioSessionManager, 0X77AA99A0, 0X1BD6, 0X484F, 0X8B, 0XC7, 0X2C, 0X65, 0X4C, 0X9A, 0X9B, 0X6F);
|
||||
|
||||
static void InitializeCom(void) {
|
||||
static bool com_initialized;
|
||||
if (!com_initialized)
|
||||
com_initialized = SUCCEEDED(CoInitialize(NULL));
|
||||
}
|
||||
|
||||
int GetApplicationVolume(void) {
|
||||
ISimpleAudioVolume *simple_audio_volume = GetSimpleAudioVolume();
|
||||
if (!simple_audio_volume)
|
||||
return false;
|
||||
float volume_level = -1;
|
||||
HRESULT result = ISimpleAudioVolume_GetMasterVolume(simple_audio_volume, &volume_level);
|
||||
ISimpleAudioVolume_Release(simple_audio_volume);
|
||||
return (int)(volume_level * 100);
|
||||
}
|
||||
|
||||
bool SetApplicationVolume(int volume_level) {
|
||||
ISimpleAudioVolume *simple_audio_volume = GetSimpleAudioVolume();
|
||||
if (!simple_audio_volume)
|
||||
return false;
|
||||
HRESULT result = ISimpleAudioVolume_SetMasterVolume(simple_audio_volume, (float)(volume_level / 100.0), NULL);
|
||||
ISimpleAudioVolume_Release(simple_audio_volume);
|
||||
return SUCCEEDED(result);
|
||||
}
|
||||
|
||||
bool SetApplicationMuted(bool muted) {
|
||||
ISimpleAudioVolume *simple_audio_volume = GetSimpleAudioVolume();
|
||||
if (!simple_audio_volume)
|
||||
return false;
|
||||
HRESULT result = ISimpleAudioVolume_SetMute(simple_audio_volume, muted, NULL);
|
||||
ISimpleAudioVolume_Release(simple_audio_volume);
|
||||
return SUCCEEDED(result);
|
||||
}
|
||||
|
||||
static ISimpleAudioVolume *GetSimpleAudioVolume(void) {
|
||||
HRESULT result;
|
||||
IMMDeviceEnumerator *device_enumerator = NULL;
|
||||
IMMDevice *device = NULL;
|
||||
IAudioSessionManager *audio_session_manager = NULL;
|
||||
ISimpleAudioVolume *simple_audio_volume = NULL;
|
||||
|
||||
InitializeCom();
|
||||
|
||||
result = CoCreateInstance(&CLSID_MMDeviceEnumerator,
|
||||
NULL, CLSCTX_INPROC_SERVER, &IID_IMMDeviceEnumerator, &device_enumerator);
|
||||
if (FAILED(result) || device_enumerator == NULL)
|
||||
goto done;
|
||||
|
||||
result = IMMDeviceEnumerator_GetDefaultAudioEndpoint(device_enumerator, eRender, eConsole, &device);
|
||||
if (FAILED(result) || device == NULL)
|
||||
goto done;
|
||||
|
||||
result = IMMDevice_Activate(device, &IID_IAudioSessionManager, CLSCTX_INPROC_SERVER, NULL, &audio_session_manager);
|
||||
if (FAILED(result) || audio_session_manager == NULL)
|
||||
goto done;
|
||||
result = IAudioSessionManager_GetSimpleAudioVolume(audio_session_manager, &GUID_NULL, 0, &simple_audio_volume);
|
||||
|
||||
done:
|
||||
if (device_enumerator) IMMDeviceEnumerator_Release(device_enumerator);
|
||||
if (device) IMMDevice_Release(device);
|
||||
if (audio_session_manager) IAudioSessionManager_Release(audio_session_manager);
|
||||
|
||||
return simple_audio_volume;
|
||||
}
|
||||
14
src/platform/win32/volume_control.h
Normal file
14
src/platform/win32/volume_control.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#ifndef ZELDA3_PLATFORM_WIN32_VOLUME_CONTROL_H_
|
||||
#define ZELDA3_PLATFORM_WIN32_VOLUME_CONTROL_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifndef SYSTEM_VOLUME_MIXER_AVAILABLE
|
||||
#define SYSTEM_VOLUME_MIXER_AVAILABLE 1
|
||||
#endif // SYSTEM_VOLUME_MIXER_AVAILABLE
|
||||
|
||||
int GetApplicationVolume();
|
||||
bool SetApplicationVolume(int volume_level);
|
||||
bool SetApplicationMuted(bool muted);
|
||||
|
||||
#endif // ZELDA3_PLATFORM_WIN32_VOLUME_CONTROL_H_
|
||||
Reference in New Issue
Block a user