Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow client to request fader position by using client source port #666

Closed
storeilly opened this issue Oct 6, 2020 · 26 comments
Closed

Comments

@storeilly
Copy link

Working with a large choir, it is easier if the singers' faders are grouped in voice types and in the same order, it is also useful if everyone's view of that is the same which is why I prefer a server side solution to this.

I've been thinking about this for a while and I have come up with a concept of using the client source port to request a particular position on the mixer board if the server is configured to accept it. I've started working on this and have successfully tested the concept using hard coded port numbers. I'm working now to make it configurable with a command line switch but my coding skill is not up to scratch. Code is currently not working with the command line parameter, it's on my fork here I'm open to any ideas, help and comments to see if this is workable.

How it works....
Server is started with a specific number as the first source port to be accepted as ordering port... eg : 22300
Clients connect with source ports > 22300 and < = (22300+maxclients) they are connected to first available channel after ((source port)-22300) .... in case the maxclients is reached, the first available channel after 0.
Clients that connect outside this port range get channels assigned as normal.

The code accepts the client source port and subtracts it from the server command line parameter for starting port set by the server operator. The server will then try to assign the first available fader position greater than that number to the client at first connect. If it cannot assign a position and there are still available slots on the server, the server will then assign the lowest available slot as it does currently.

My concept requires all members of the choir to add the "-p xxxx" parameter similar to the following
Jamulus -p 22300 (for Sopranos)
Jamulus -p 22310 (for Altos)
..... etc..
This numbering gives 10 slots for each group. Alternative numbering systems will also work and finer granularity.

@chrisrimple
Copy link

At a macro level, I'm unclear what you're trying to achieve. Using the GRP button, individual Jamulus users can assign all Basses to Group 1, Baritones to Group 2, and so on. Then moving any fader in that group will move all faders in that group equally.

But more fundamentally, don't you want all faders for all singers at the same level (say, 50%)? In that way, singers are all hearing "unleveled" sound, so if a single voice is dominating it means that voice needs to reduce their input level (or singing volume), not have the output adjusted by others. That's the closest approximation to "singing together live".

The downside to your command line parameter solution is that it requires all users to start Jamulus from a command line, which is (1) reasonably easy using a Shortcut in Windows, but (2) reasonably difficult on a Mac, where the Terminal application or other solutions will be needed.

@corrados
Copy link
Contributor

corrados commented Oct 6, 2020

Working with a large choir, it is easier if the singers' faders are grouped in voice types and in the same order, it is also useful if everyone's view of that is the same which is why I prefer a server side solution to this.

We already have a solution for that. The singers should assign the correct instrument in their profile, then you can sort the faders by the instrument:
grafik
Or each singer could prepend a number to his name like "13:me" and then you can sort by the name.

@storeilly
Copy link
Author

Working with a large choir, it is easier if the singers' faders are grouped in voice types and in the same order, it is also useful if everyone's view of that is the same which is why I prefer a server side solution to this.

We already have a solution for that. The singers should assign the correct instrument in their profile, then you can sort the faders by the instrument:
grafik
Or each singer could prepend a number to his name like "13:me" and then you can sort by the name.

That is client side only and individual to each client.

@chrisrimple
Copy link

So you want a person (the choral Director?) to control the fader levels for all the client connections (via the server)? I'm unclear what problem that solves? As I mentioned above, a choral solution should be "flat" (same % on all faders) so that listeners can hear when a voice is "sticking out of the sound". If everyone is adjusting their own faders, particularly the Director, then they're all hearing mixed sound, not natural sound, and the chorus will likely be surprised when they can finally gather in person and it sounds nothing like it did in Jamulus. :)

@storeilly
Copy link
Author

So you want a person (the choral Director?) to control the fader levels for all the client connections (via the server)? I'm unclear what problem that solves? As I mentioned above, a choral solution should be "flat" (same % on all faders) so that listeners can hear when a voice is "sticking out of the sound". If everyone is adjusting their own faders, particularly the Director, then they're all hearing mixed sound, not natural sound, and the chorus will likely be surprised when they can finally gather in person and it sounds nothing like it did in Jamulus. :)

I'm sorry Chris, I haven't explained in a clearer manner. This has nothing to do with levels. Have you looked at the code? that might make the operation clearer.

@corrados
Copy link
Contributor

corrados commented Oct 7, 2020

That is client side only and individual to each client.

No, it isn't. If you name all your singers like "1:Alf", "2:Nina", ... then everybody only has to press Ctrl+I shortcut once when all singers are connected to the server and everybody has exactly the same fader layout.

Jamulus -p 22300 (for Sopranos)
Jamulus -p 22310 (for Altos)

That's not gonna work. If you, e.g., look at NAT or other nasty staff private network routers do, they can change the port the Jamulus server sees at any time.

@corrados
Copy link
Contributor

@storeilly Just to let you know: There was a feature request (#673) to change the Jamulus client behaviour so that a new clients fader appears on the RH side of the fader panel. So the fader ID on the server no longer defines the order of the faders at the client anymore.

If you really want to see the faders sorted according to the server IDs, there is a workaround. If all faders are assigned to no group (i.e. the group feature is not used by any fader) and you sort by Group, actually you will get the order by server channel ID.

@storeilly
Copy link
Author

storeilly commented Oct 13, 2020

Hi @corrados I'd like you to consider my request seriously please. Could you make #673 optional and enabled with a command line switch or a checkbox in settings. I'm certain that competent users like Simon, and those that need this will be better able to find it than the various members of the choirs I'm involved with.

I would much prefer if faders were sorted by the server as a default, and we could come up with some system to pre-assign the fader position. My suggestion of seeding the call to GetFreeChan() is my attempt to open the conversation on how to achieve a pre-defined fader order which is identical for every client and makes sense to the users.

It is important in a choir for everyone to have an identical view of the faders especially for members in a large choir, it is difficult enough to explain to less competent users how to use the basic functions of the interface. I understand that using the client source port will only be 80% effective (I have been logging ports on my own fork for ages) but my C++ ability is limited and I don't want to load you with requests for help. I learned C over 30 years ago and only use it rarely. I use Pascal more often but sadly it's not my full time job.

It is adding another level of complexity if we now have to explain how to sort the faders by using a workaround and I feel that many more users will be adversely affected with this change than Simon.

I apologize if my explanations are not clear, but my use case is important, I have been promoting choral use of Jamulus worldwide on facebook and our choir made a presentation to Sing Ireland (the national association for choral singing in Ireland) sharing our experience with Jamulus. It has been effective in spreading the message and I have been contacted by at least five choirs who previously have been battling with Zoom. our presentation on Sing Ireland Webinar

@corrados
Copy link
Contributor

I'd like you to consider my request seriously please.

Sure. But we should discuss other options here, too.

than the various members of the choirs I'm involved with

If you think that the choir members have so much trouble in using Jamulus that they cannot sort the faders, then I would recommend to use something like this: #599 where they do not get any faders at all which is the simplest solution for them.
Other Jamulus users have a very similar problem like you. Here is how j-santander tries to solve this: #83 (comment).

It is important in a choir for everyone to have an identical view of the faders especially for members in a large choir, it is difficult enough to explain to less competent users how to use the basic functions of the interface

As I mentioned, the preferred way of doing this is to tell them to prepend a number to their profile name. Then a simple Ctrl+n will get what you want. If you use a command line argument, you also have to make their installation/startup special. So this is similar to just tell them to change the name in the profile. Or you could create a jamulus.ini file for them and create a Windows shortcut using --inifile

I feel that many more users will be adversely affected

Well, that depends. What was implemented so far was far from intuitive. The faders appeared at random positions. Now there is a simple rule which is much better.

I have been promoting choral use of Jamulus worldwide on facebook and our choir made a presentation to Sing Ireland

I really appreciate the time and effort you are spending for this. I also spend a lot of time modifying Jamulus to support as many clients as possible. As you know, 100 clients are supported by your own server now which is a great achievement. 1 year ago I was considering 10 musicians on the Jamulus server a lot! :-)

In my opinion, if pressing Ctrl+n is a too difficult for the choir members, than it will also be too difficult to adjust the faders correctly. So I guess these who cannot press Ctrl+n will not touch the faders at all so it does not matter how they are sorted.

@chrisrimple
Copy link

@storeilly I asked previously and am still confused by what use case you're trying to solve. I think you want single-person control of all fader views because (1) you don't trust other users to find/adjust faders, (2) you don't want other users to be able to adjust faders, or (3) both. Or are you trying to solve some other need?

If you're trying to solve any of (1), (2), or (3), it seems like a simpler solution would be for Jamulus to offer a "hide all faders" option, either as a checkbox or command line parameter. When enabled, no faders are shown, and the mix from the server is set to 50% for all participants. Or maybe 75%. Regardless, individual users would then control output volume using whatever controls they have available outside Jamulus, which is likely their computer's system volume control.

Now, that doesn't give a Director control of the mix that all other participants are hearing, but I also don't think that's what you're trying to achieve. After all, a choral group rehearsing in person is usually natural sound levels (no amplification) to get correct balance, with each individual adjusting - allowing each participant to adjust their own mix eliminates that need, but would also lead to unbalanced singing once the group is in person again.

Anyway, if you don't mind, can you tell us what problem you're trying to solve, rather than telling us your solution? Thanks!

@storeilly
Copy link
Author

I think I need assistance explaining this! Maybe @brynalf would have an opinion?

I think it is easier for competent users to use a command line switch or a setting checkbox than asking a large group to do so or apply an additional step.

One use case... older member of choir connects his interface incorrectly and connects squealing... Choir director issues request to mute "Tenor 2 Stephen". At least one of the choir will ask where his fader is. With the current options of sorting the faders in three different ways there is no way to answer that question without confusion. What I am requesting is a consistent, identical and pre-definable order that cannot be changed without ticking a checkbox or using a command line switch. This is well within the competency of the users that need it, like Simon.

I am happy that most of my choir can balance their sound so I won't be promoting #599
I have personally used Teamviewer to set up 40 users so far (and counting) with UMC22's on Jamulus so don't need to use other devices.

@chrisrimple
Copy link

@storeilly Thanks for explaining the need. I have a few ideas...

  • #599 would allow the Leader to mute a user in everyone's mix, making it unnecessary to tell all users to do it, wait for them to find the right fader, etc.
  • Tell all users to set the New Client Level to 10%, ensuring that a squealing user isn't dominating the mixed sound. Yes, they would then need to bring the user's fader up to 50% (or whatever) when there is no squealing.

There is a change coming that so that new connections to the server will always appear on the right side of the list of users. So a user that joins and is squealing will always be found on the right, regardless of the sort order. As new users join, anyone wanting to retain the sort order (available from the menus) will have to select it again - in effect, they are "Sort Now" choices, not "Sort Forever" choices.

@corrados
Copy link
Contributor

corrados commented Oct 14, 2020

One use case... older member of choir connects his interface incorrectly and connects squealing... Choir director issues request to mute "Tenor 2 Stephen". At least one of the choir will ask where his fader is. With the current options of sorting the faders in three different ways there is no way to answer that question without confusion.

Interesting usecase. Let's extend that use case a bit. Assume the choir has 100 singers. So "Stephen" has a problem with his interface and the director requests all singers to mute him:

  • Question one: How to find his fader quickly? Your solution: "Stephen" will show up consistenty at position, e.g., 67. So if a singer asks for the position of the fader, what does the director responds? If he says that its fader 67 it makes no sense since this numer is not shown on the fader. So he maybe say "the fader is somewhere in the middle". Unfortunately, with 100 singers you will get a scroll bar so you cannot see all faders. Where to search for the "middle" if you are a non-techy guy? Maybe a simpler solution would be that the director says "Please press Ctrl+n to sort by name and you will find the name quickly".

  • A bit unrelated: Ok, so let's assume all singers have found the fader and have muted "Stephen". So nobody will hear Stephens noise. Let's assume he quits the session, fixes his audio issues and on the next rehearsal his audio is ok. Unfortunately, all singers still have muted him (since Jamulus stores the Mute state). So the director now has to remember that at the last rehearsal he told all to mute him (and with 100 singers connected to Jamulus I am sure the director has other problems than to remember this). So "Stephen" will not be heard and will be frustrated. Eventually the directory remembers to tell everybody to unmute "Stephen" but maybe some will not know how to do it and may not ask the director how to do it. "Stephen" will be muted all the time for these singers.

  • Now coming back to the task of finding "Stephens" fader to unmute. Since the mute button is has a red LED, it is simple to search all faders for the LED and all singers will find that fader quickly without having to remember that "Stephens" position was "somewhere in the middle". Since "Stephen" has now fixed his problem, the director will never need to communicate his fader position anymore. So it does not matter where his fader is located (at the same position or a different one compared to the last rehearsal).

@corrados
Copy link
Contributor

I think, the current way I have implemented the fader sorting is not ideal. Right now it just sorts the faders on clicking the menu item. But I think it would be better to have this function persistently. So if you click on the menu item, now the item is checked and the sorting is applied all the time so that if a new client connects, it is correctly sorted. I think when this is implemented, that would help your choir usecase. So every singer must only switch on the sorting by name once and then it is stored in the settings file and always enabled. Then you have the situation you want to have: all singers see exactly the same fader layout.

@chrisrimple
Copy link

@corrados There are certainly upsides to continuous sorting. The downside is that newly-joined clients would no longer appear on the right, making them harder to find if needing to mute or adjust fader level. But perhaps I'm solving for a use cae without a user: does anyone really have a "sort once but don't continue sorting" need?

@corrados
Copy link
Contributor

corrados commented Oct 15, 2020

The downside is that newly-joined clients would no longer appear on the right

Well, I would not call it "downside". If you are continuously sorting, of course, the new fader does not appear on the right. This is the case if no sorting is enabled. And, of course, you can still do what is possible today: simply switch sorting on and immediately turn it off again. Then you have sorted the faders once (i.e. instead of pressing Ctrl+n once you then just do it twice).

@mayankasthana
Copy link

mayankasthana commented Oct 15, 2020

To the problem of finding a fader quickly-
What if a user's handle in the chat as well as something like @Stephen mention links to the fader, scrolls to it and highlights it?
Then the Director or any user could just @mention the name and finding faders is very easy.

An extension to the idea of using chat as an interaction tool could be chat actions, where the Director can type in simple commands - "MUTE @mention" and instruct everyone to click it. Whoever clicks the highlighted command, executed the command locally.

@storeilly
Copy link
Author

I think, the current way I have implemented the fader sorting is not ideal. Right now it just sorts the faders on clicking the menu item. But I think it would be better to have this function persistently. So if you click on the menu item, now the item is checked and the sorting is applied all the time so that if a new client connects, it is correctly sorted. I think when this is implemented, that would help your choir usecase. So every singer must only switch on the sorting by name once and then it is stored in the settings file and always enabled. Then you have the situation you want to have: all singers see exactly the same fader layout.

Thank you, that is excellent and gives exactly what is needed and saves you from my amateur code!

Would it be easy to add "Sort Channel Users by City" to the list please? If so, we can put the sort number in a field that does not occupy any space on screen. SATB is not alphabetical and we currently have 8 vocal groups in our large choir, I'm sure other choirs may have more. We currently use compact skin to fit everyone on screen and minimize the information in Alias/Name as attached and put full name in City field that everyone can see via the tooltip.

Jamulus CitySort

Thanks again,
Stephen

@corrados
Copy link
Contributor

corrados commented Oct 15, 2020

I am happy that you like my proposal.

Would it be easy to add "Sort Channel Users by City" to the list please? If so, we can put the sort number in a field that does not occupy any space on screen.

Interesting idea :-). Sure, I can implement that easily. I'll write it on my TODO list.

@corrados
Copy link
Contributor

grafik

Keep in mind that you have to use "01", "02", ..., "09", "10", "11", ... so that it sorts correctly.

@storeilly
Copy link
Author

Yes I understand that of course, character strings are not integers. :)

@corrados
Copy link
Contributor

It is now implemented on Git master:
grafik
It would be good if you could test it to check that everything works as expected.

@storeilly
Copy link
Author

Thank you, I can not build for windows at the minute, could you (or someone) build one for me please. I can test this tomorrow evening or Thursday evening.

@corrados
Copy link
Contributor

@storeilly Here is a Windows/Mac build available for testing: #619 (comment)

@storeilly
Copy link
Author

Thanks @corrados Tested and working well. (with 2 clients) I'll do a more in depth test with a few others on Thursday, but I'm happy that works.

@corrados
Copy link
Contributor

Thanks for testing. Can you now close this Issue?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants