From: Anton Baskanov baskanov@gmail.com
--- dlls/dmime/dmime_main.c | 1 + dlls/dmime/performance.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+)
diff --git a/dlls/dmime/dmime_main.c b/dlls/dmime/dmime_main.c index 05d094fc2a2..8fc9cc702f6 100644 --- a/dlls/dmime/dmime_main.c +++ b/dlls/dmime/dmime_main.c @@ -32,6 +32,7 @@ #include "rpcproxy.h" #include "initguid.h" #include "dmusici.h" +#include "dmksctrl.h"
#include "dmime_private.h"
diff --git a/dlls/dmime/performance.c b/dlls/dmime/performance.c index 3c67fbcadb4..9f35ef1b389 100644 --- a/dlls/dmime/performance.c +++ b/dlls/dmime/performance.c @@ -20,6 +20,7 @@
#include "dmime_private.h" #include "dmusic_midi.h" +#include "dmksctrl.h" #include "wine/rbtree.h" #include <math.h>
@@ -1141,6 +1142,9 @@ static void performance_update_latency_time(struct performance *This, IDirectMus static HRESULT perf_dmport_create(struct performance *perf, DMUS_PORTPARAMS *params) { IDirectMusicPort *port; + KSPROPERTY volume_prop; + IKsControl *control; + DWORD volume_size; GUID guid; unsigned int i; HRESULT hr; @@ -1151,6 +1155,19 @@ static HRESULT perf_dmport_create(struct performance *perf, DMUS_PORTPARAMS *par if (FAILED(hr = IDirectMusic8_CreatePort(perf->dmusic, &guid, params, &port, NULL))) return hr;
+ if (FAILED(hr = IDirectMusicPort_QueryInterface(port, &IID_IKsControl, (void **)&control))) + { + IDirectMusicPort_Release(port); + return hr; + } + + volume_prop.Set = GUID_DMUS_PROP_Volume; + volume_prop.Id = 0; + volume_prop.Flags = KSPROPERTY_TYPE_SET; + + IKsControl_KsProperty(control, &volume_prop, sizeof(volume_prop), + &perf->lMasterVolume, sizeof(perf->lMasterVolume), &volume_size); + if (FAILED(hr = IDirectMusicPort_SetDirectSound(port, perf->dsound, NULL)) || FAILED(hr = IDirectMusicPort_Activate(port, TRUE))) { @@ -1167,6 +1184,7 @@ static HRESULT perf_dmport_create(struct performance *perf, DMUS_PORTPARAMS *par }
performance_update_latency_time(perf, port, NULL); + IKsControl_Release(control); IDirectMusicPort_Release(port); return S_OK; }