volume fixes

git-svn-id: https://svn.musicpd.org/mpd/trunk@420 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes 2004-03-23 20:34:12 +00:00
parent fc84fa54fc
commit d6a37ba73e
2 changed files with 22 additions and 2 deletions

View File

@ -16,4 +16,4 @@ mpd_SOURCES = main.c buffer2array.c interface.c command.c playlist.c ls.c \
mpd_CFLAGS = $(MPD_CFLAGS) mpd_CFLAGS = $(MPD_CFLAGS)
mpd_LDADD = $(MPD_LIBS) $(ID3_LIB) $(MAD_LIB) $(MP4FF_LIB) mpd_LDADD = $(MPD_LIBS) $(ID3_LIB) $(MAD_LIB) $(MP4FF_LIB)
DIST_SUBDIRS = mp4ff DIST_SUBDIRS = mp4ff $(ID3_SUBDIR) $(MAD_SUBDIR)

View File

@ -47,6 +47,8 @@
int volume_mixerType = VOLUME_MIXER_TYPE_SOFTWARE; int volume_mixerType = VOLUME_MIXER_TYPE_SOFTWARE;
char * volume_mixerDevice; char * volume_mixerDevice;
int volume_softwareSet = -1;
#ifndef NO_OSS_MIXER #ifndef NO_OSS_MIXER
int volume_ossFd; int volume_ossFd;
int volume_ossControl = SOUND_MIXER_VOLUME; int volume_ossControl = SOUND_MIXER_VOLUME;
@ -57,6 +59,7 @@ snd_mixer_t * volume_alsaMixerHandle = NULL;
snd_mixer_elem_t * volume_alsaElem; snd_mixer_elem_t * volume_alsaElem;
long volume_alsaMin; long volume_alsaMin;
long volume_alsaMax; long volume_alsaMax;
int volume_alsaSet = -1;
#endif #endif
#ifndef NO_OSS_MIXER #ifndef NO_OSS_MIXER
@ -261,6 +264,7 @@ int getAlsaVolumeLevel() {
int changeAlsaVolumeLevel(FILE * fp, int change, int rel) { int changeAlsaVolumeLevel(FILE * fp, int change, int rel) {
float vol; float vol;
long level; long level;
long test;
long max = volume_alsaMax; long max = volume_alsaMax;
long min = volume_alsaMin; long min = volume_alsaMin;
int err; int err;
@ -274,12 +278,22 @@ int changeAlsaVolumeLevel(FILE * fp, int change, int rel) {
} }
if (rel) { if (rel) {
vol = 100.0*(((float)(level-min))/(max-min)); test = ((volume_alsaSet/100.0)*(max-min)+min)+0.5;
if(volume_alsaSet >= 0 && level==test) {
vol = volume_alsaSet;
}
else {
vol = 100.0*(((float)(level-min))/(max-min));
}
vol+=change; vol+=change;
} }
else else
vol = change; vol = change;
volume_alsaSet = vol+0.5;
volume_alsaSet = volume_alsaSet>100 ? 100 :
(volume_alsaSet<0 ? 0 : volume_alsaSet);
level = (long)(((vol/100.0)*(max-min)+min)+0.5); level = (long)(((vol/100.0)*(max-min)+min)+0.5);
level = level>max?max:level; level = level>max?max:level;
level = level<min?min:level; level = level<min?min:level;
@ -361,6 +375,10 @@ void openVolumeDevice() {
} }
int getSoftwareVolume() { int getSoftwareVolume() {
if(volume_softwareSet >= 0) {
return volume_softwareSet;
}
return 50*log((getPlayerSoftwareVolume()*(M_E*M_E-1)/100.0)+1)+0.5; return 50*log((getPlayerSoftwareVolume()*(M_E*M_E-1)/100.0)+1)+0.5;
} }
@ -389,6 +407,8 @@ int changeSoftwareVolume(FILE * fp, int change, int rel) {
if(new>100) new = 100; if(new>100) new = 100;
else if(new<0) new = 0; else if(new<0) new = 0;
volume_softwareSet = new;
new = 100.0*(exp(new/50.0)-1)/(M_E*M_E-1)+0.5; new = 100.0*(exp(new/50.0)-1)/(M_E*M_E-1)+0.5;
setPlayerSoftwareVolume(new); setPlayerSoftwareVolume(new);