diff --git a/NEWS b/NEWS index c316360e8..520edc7ef 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,6 @@ ver 0.24.1 (not yet released) +* output + - sndio: fix rounding error in volume calculation ver 0.24 (2025/03/11) * protocol diff --git a/src/output/plugins/SndioOutputPlugin.cxx b/src/output/plugins/SndioOutputPlugin.cxx index 1ca877668..b8e76f4f8 100644 --- a/src/output/plugins/SndioOutputPlugin.cxx +++ b/src/output/plugins/SndioOutputPlugin.cxx @@ -139,12 +139,12 @@ SndioOutput::Play(std::span src) void SndioOutput::SetVolume(unsigned int volume) { - sio_setvol(hdl, volume * SIO_MAXVOL / 100); + sio_setvol(hdl, (volume * SIO_MAXVOL + 50) / 100); } static inline unsigned int RawToPercent(int raw_volume) { - return raw_volume < 0 ? 100 : raw_volume * 100 / SIO_MAXVOL; + return raw_volume < 0 ? 100 : (raw_volume * 100 + SIO_MAXVOL / 2) / SIO_MAXVOL; } void