Bugzilla – Bug 15849
Improve synchronization user interaction - Managing volume control
Last modified: 2010-03-10 00:13:21 UTC
This enhancement request is based on the following forum-thread where a lot of well respected community members have contributed. http://forums.slimdevices.com/showthread.php?t=75381 The way volume is handled during sync I not very good at all. There are two options. Either there is no sync at all or the volume is identical on all players. This is not good, because volume 80 may be needed in the living room while volume 50 is sufficient on the Radio in the bedroom. One simple improvement to this would be to handle the synced volumes from the offset they had before they got synced. E.g. when turning volume 20 clicks up, all players are turned 20 clicks up from whatever volume they already had. Of course we need to consider what to do when one device’s volume passes 0 or 100. The next step from that would be to have a master volume which acts like described above. But also be able to control the individual volumes from any of the synced players. His can be done with a menu on the home menu where you choose which volume you wish to control. Taking it a bit further is to pull up the above described menu when either volume button is clicked. If no menu-selection is done, further clicks will adjust the master volume.
It's a noble idea. We should do some experimentation to make sure that increasing the volumes the same 'number' from the pre-set baselines is the right behavior.
I don't think absolute volume change will work very well. I'm using a somewhat different algorithm in iPeng, which works quite well (give it a try :) ). What it does is to build an average between an absolute volume change and a relative one. Rationale: Absolute volume change only works with similar gain levels. If you have one player at volume 10 and another at volume 50 (and they sound similar in volume level due to what the real amplification is), increasing the volume by 5 will have a very different effect on Player 1 and on Player 2. Relative volume change would work better but has some drawbacks, too: You end up in a deadlock when you are at "0" and due to the logarithmic nature of the volume ramp you get similar (yet opposite) similarity issues as with the absolute change. Averaging between the two actually works pretty well in real-world scenarios. Find somebody with iPeng and give it a try. Algorithm: ABSOLUTE = NEW_AVERAGE_VOLUME - OLD_AVERAGE_VOLUME DELTA = ABSOLUTE / OLD_AVERAGE_VOLUME; if (OLD_AVERAGE_VOLUME != 0) DELTA_RELATIVE = (DELTA / 2 * OLD_AVERAGE_VOLUME) else DELTA_RELATIVE = 0 DELTA_ABSOLUTE = DELTA / 2 for each PLAYER in SYNC_GROUP if (PLAYER.digitalVolumeControl) // don't use players w/o volume control PLAYER.volume = PLAYER.volume * DELTA_RELATIVE + DELTA_ABSOLUTE and to find the "group volume" to control AVERAGE_VOLUME = 0 CNT = 0 for each PLAYER in SYNC_GROUP if (PLAYER.digitalVolumeControl) { AVERAGE_VOLUME = AVERAGE_VOLUME + PLAYER.volume CNT = CNT + 1 } AVERAGE_VOLUME = AVERAGE_VOLUME / CNT One more thing: To make this work well without limiting the volume range or clipping volumes at 100%, iPeng also uses volume levels above 100%. They are only used internally (obviously) and not sent to the server but persistent unless you exit iPeng.
Ok so the 100 squeezebox volume units are not dB logarithmitical ? Obviously the aim is the adjust the volume the same dB +- With some nifty mechanism to cope with players stuck at 100 or 0 so that they rejoin the rest a sane levels.
I believe Transporter and SB3 are linear (-db) but Radio and Boom are not. I agree if you _knew_ the volume ramp adjusting the db change would be the thing to do yet I don't (know the volume ramp).