volume fixes
git-svn-id: https://svn.musicpd.org/mpd/trunk@420 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
fc84fa54fc
commit
d6a37ba73e
|
@ -16,4 +16,4 @@ mpd_SOURCES = main.c buffer2array.c interface.c command.c playlist.c ls.c \
|
|||
mpd_CFLAGS = $(MPD_CFLAGS)
|
||||
mpd_LDADD = $(MPD_LIBS) $(ID3_LIB) $(MAD_LIB) $(MP4FF_LIB)
|
||||
|
||||
DIST_SUBDIRS = mp4ff
|
||||
DIST_SUBDIRS = mp4ff $(ID3_SUBDIR) $(MAD_SUBDIR)
|
||||
|
|
20
src/volume.c
20
src/volume.c
|
@ -47,6 +47,8 @@
|
|||
int volume_mixerType = VOLUME_MIXER_TYPE_SOFTWARE;
|
||||
char * volume_mixerDevice;
|
||||
|
||||
int volume_softwareSet = -1;
|
||||
|
||||
#ifndef NO_OSS_MIXER
|
||||
int volume_ossFd;
|
||||
int volume_ossControl = SOUND_MIXER_VOLUME;
|
||||
|
@ -57,6 +59,7 @@ snd_mixer_t * volume_alsaMixerHandle = NULL;
|
|||
snd_mixer_elem_t * volume_alsaElem;
|
||||
long volume_alsaMin;
|
||||
long volume_alsaMax;
|
||||
int volume_alsaSet = -1;
|
||||
#endif
|
||||
|
||||
#ifndef NO_OSS_MIXER
|
||||
|
@ -261,6 +264,7 @@ int getAlsaVolumeLevel() {
|
|||
int changeAlsaVolumeLevel(FILE * fp, int change, int rel) {
|
||||
float vol;
|
||||
long level;
|
||||
long test;
|
||||
long max = volume_alsaMax;
|
||||
long min = volume_alsaMin;
|
||||
int err;
|
||||
|
@ -274,12 +278,22 @@ int changeAlsaVolumeLevel(FILE * fp, int change, int rel) {
|
|||
}
|
||||
|
||||
if (rel) {
|
||||
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;
|
||||
}
|
||||
else
|
||||
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 = level>max?max:level;
|
||||
level = level<min?min:level;
|
||||
|
@ -361,6 +375,10 @@ void openVolumeDevice() {
|
|||
}
|
||||
|
||||
int getSoftwareVolume() {
|
||||
if(volume_softwareSet >= 0) {
|
||||
return volume_softwareSet;
|
||||
}
|
||||
|
||||
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;
|
||||
else if(new<0) new = 0;
|
||||
|
||||
volume_softwareSet = new;
|
||||
|
||||
new = 100.0*(exp(new/50.0)-1)/(M_E*M_E-1)+0.5;
|
||||
|
||||
setPlayerSoftwareVolume(new);
|
||||
|
|
Loading…
Reference in New Issue