Download raw body.
sndiod: per-program (instead of per-client) level control
On 2025/06/17 14:13, Omar Polo wrote:
> Hello,
>
> Alexandre Ratchov <alex@caoua.org> wrote:
> > This diff is to adjust the volume of all instances of the same program
> > with a single control. Example, instead of:
> >
> > firefox0.level
> > firefox1.level
> > firefox2.level
> > ...
> >
> > there will be single "firefox.level" control. There will be no way to
> > control individual tracks anymore, but that will not be a big loss
> > beacause there's currently no way to know in advance which sound
> > corresponds to which firefox instance.
> >
> > There's a nice side effect:
> >
> > Currently if a web browser has too many tabs/windows, it may consume
> > all the controls, preventing other programs from using sndiod. Now,
> > the number of connections that a single program can make can be
> > increased (the diff cranks it to 32) which fixes the problem in most
> > cases.
> >
> > OK?
>
> can't provide a valuable feedback on the diff, beside that I'm testing
> it and it makes a lot of sense to me, and that it works as advertized.
>
> allow me tho to point out two nits:
>
> > Index: dev.c
> > ===================================================================
> > RCS file: /cvs/src/usr.bin/sndiod/dev.c,v
> > diff -u -p -r1.122 dev.c
> > --- dev.c 16 Jun 2025 06:19:29 -0000 1.122
> > +++ dev.c 16 Jun 2025 18:17:57 -0000
> > [...]
> > @@ -1523,98 +1505,34 @@ struct slot *
> > slot_new(struct opt *opt, unsigned int id, char *who,
> > struct slotops *ops, void *arg, int mode)
> > {
> > [...]
> > + i = 0;
> > + s = slot_array;
> > + while (1) {
> > + if (i == DEV_NSLOT) {
> > + logx(1, "%s: too many connections", a->name);
> > + return NULL;
> > }
> > + if (s->ops == NULL)
> > + break;
> > + i++;
> > + s++;
> > }
>
> I feel like a for loop would be slightly more readable here
>
> s = slot_array;
> for (i = 0; i < DEV_NSLOT; i++, s++)
> if (s->ops == NULL)
> break;
> if (i == DEV_NSLOT) {
> logx(...)
> return NULL;
> }
>
> > [...]
> > Index: sndiod.8
> > ===================================================================
> > RCS file: /cvs/src/usr.bin/sndiod/sndiod.8,v
> > diff -u -p -r1.17 sndiod.8
> > --- sndiod.8 3 May 2024 16:47:15 -0000 1.17
> > +++ sndiod.8 16 Jun 2025 18:17:58 -0000
> > @@ -440,12 +440,13 @@ exposes the audio device clock
> > and allows audio device properties to be controlled
> > through MIDI.
> > .Pp
> > -A MIDI channel is assigned to each stream, and the volume
> > +A MIDI channel is assigned to each program, and the volume
> > is changed using the standard volume controller (number 7).
> > Similarly, when the audio client changes its volume,
> > the same MIDI controller message is sent out; it can be used
> > for instance for monitoring or as feedback for motorized
> > faders.
> > +If there are multiple instances of the same program they will share the same setting.
>
> This line should be folded, (my xterm and) man -Tlint complain it's
> longer than 80 column :p
"Multiple instances of the same program will share the same setting"
is more concise and <80.
sndiod: per-program (instead of per-client) level control