summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libao2/ao_dsound.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libao2/ao_dsound.c b/libao2/ao_dsound.c
index d8e743e3a1..2e374fb722 100644
--- a/libao2/ao_dsound.c
+++ b/libao2/ao_dsound.c
@@ -27,6 +27,7 @@
#include <windows.h>
#define DIRECTSOUND_VERSION 0x0600
#include <dsound.h>
+#include <math.h>
#include "config.h"
#include "libaf/af_format.h"
@@ -389,13 +390,13 @@ static int control(int cmd, void *arg)
case AOCONTROL_GET_VOLUME: {
ao_control_vol_t* vol = (ao_control_vol_t*)arg;
IDirectSoundBuffer_GetVolume(hdsbuf, &volume);
- vol->left = vol->right = (float)(volume+10000) / 100.0;
+ vol->left = vol->right = pow(10.0, (float)(volume+10000) / 5000.0);
//printf("ao_dsound: volume: %f\n",vol->left);
return CONTROL_OK;
}
case AOCONTROL_SET_VOLUME: {
ao_control_vol_t* vol = (ao_control_vol_t*)arg;
- volume = (vol->right * 100.0)-10000;
+ volume = (DWORD)(log10(vol->right) * 5000.0) - 10000;
IDirectSoundBuffer_SetVolume(hdsbuf, volume);
//printf("ao_dsound: volume: %f\n",vol->left);
return CONTROL_OK;