diff --git a/NEWS b/NEWS index 6f72320dc..5b7c83cfb 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,8 @@ ver 0.20.13 (not yet released) * output - osx: set up ring buffer to hold at least 100ms +* mixer + - alsa: fix rounding errors * database - simple: don't purge mount points on update/rescan - simple: fix "mount" bug caused by bad compiler optimization diff --git a/src/mixer/plugins/AlsaMixerPlugin.cxx b/src/mixer/plugins/AlsaMixerPlugin.cxx index 8012ca2fb..c5ef0dcef 100644 --- a/src/mixer/plugins/AlsaMixerPlugin.cxx +++ b/src/mixer/plugins/AlsaMixerPlugin.cxx @@ -292,7 +292,9 @@ AlsaMixer::SetVolume(unsigned volume) { assert(handle != nullptr); - int err = set_normalized_playback_volume(elem, 0.01*volume, 1); + double cur = get_normalized_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT); + int delta = volume - lrint(100.*cur); + int err = set_normalized_playback_volume(elem, cur + 0.01*delta, delta); if (err < 0) throw FormatRuntimeError("failed to set ALSA volume: %s", snd_strerror(err));