From cab9db9d9565f53c81fa08eafab4eca2f8c40048 Mon Sep 17 00:00:00 2001 From: Akihiro Sagawa Date: Sat, 9 Jul 2016 17:50:52 +0900 Subject: [PATCH] mciqtz32: Use dB unit when setting audio volume. Signed-off-by: Akihiro Sagawa Signed-off-by: Andrew Eikum Signed-off-by: Alexandre Julliard --- dlls/mciqtz32/mciqtz.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dlls/mciqtz32/mciqtz.c b/dlls/mciqtz32/mciqtz.c index 4c9074b0c86..54f3b7809a1 100644 --- a/dlls/mciqtz32/mciqtz.c +++ b/dlls/mciqtz32/mciqtz.c @@ -19,6 +19,7 @@ */ #include +#include #include "windef.h" #include "winbase.h" #include "winuser.h" @@ -1070,7 +1071,7 @@ static DWORD MCIQTZ_mciSetAudio(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SETAUDIO_P switch (lpParms->dwItem) { case MCI_DGV_SETAUDIO_VOLUME: if (dwFlags & MCI_DGV_SETAUDIO_VALUE) { - long vol = -10000; + long vol; HRESULT hr; if (lpParms->dwValue > 1000) { ret = MCIERR_OUTOFRANGE; @@ -1078,7 +1079,11 @@ static DWORD MCIQTZ_mciSetAudio(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SETAUDIO_P } if (dwFlags & MCI_TEST) break; - vol += (long)lpParms->dwValue * 10; + if (lpParms->dwValue != 0) + vol = (long)(2000.0 * (log10(lpParms->dwValue) - 3.0)); + else + vol = -10000; + TRACE("Setting volume to %ld\n", vol); hr = IBasicAudio_put_Volume(wma->audio, vol); if (FAILED(hr)) { WARN("Cannot set volume (hr = %x)\n", hr);