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_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)
|
||||||
|
|
22
src/volume.c
22
src/volume.c
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue