mciqtz32: Use dB unit when setting audio volume.

Andrew Eikum aeikum at codeweavers.com
Tue Jul 12 09:09:12 CDT 2016


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>

On Sat, Jul 09, 2016 at 05:50:52PM +0900, Akihiro Sagawa wrote:
> Fixes Bug 33225.
> 
> Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
> ---
>  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 4c9074b..54f3b78 100644
> --- a/dlls/mciqtz32/mciqtz.c
> +++ b/dlls/mciqtz32/mciqtz.c
> @@ -19,6 +19,7 @@
>   */
>  
>  #include <stdarg.h>
> +#include <math.h>
>  #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);

> 




More information about the wine-patches mailing list