DirectSound's GetVolume and SetVolume use 100ths of decibels and range from -10,000 to 0.

MPlayer uses a linear intensity value between 0.0 and 100.0.
This patch converts the values properly rather than simply linearly mapping the range.


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@16973 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
joey 2005-11-11 03:07:01 +00:00
parent 8572f14094
commit 35d0962444
1 changed files with 3 additions and 2 deletions

View File

@ -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;