jamulussoftware / jamulus

Jamulus enables musicians to perform real-time jam sessions over the internet.
https://jamulus.io
Other
997 stars 222 forks source link

Assistant mode: Gain access to another client's controls #706

Closed kwindrem closed 3 years ago

kwindrem commented 3 years ago

We have one user that is having difficulty using Jamulus because of the need for each musician to adjust their own mix. This user just wants to turn on the computer running Jamulus (a Raspberry PI in this case) and play. The display confuses them and a faceless box controlled by another person remotely may be unavoidable. We are planning to VNC into their system for configuration changes. VNC could also be used for level adjustments but you would not be able to hear the client's audio.

When mixing on-stage monitors live with a console located on the stage, the engineer has the ability to "flip" the faders to one of the musician's mixes and hear that mix in the engineer's cue monitor. With the mixer for Jamulus located at the server, it seems possible to route the mix for any client to any other client for the purposes of adjusting the unskilled client's mix. The server knows that each channel level and pan are for that client, but if another client were to make level changes, those would need to be communicated to the original client so their faders move too.

"Client Solo" buttons could be added below each client's fader in the Jamulus mixer to route that client's audio to the "engineer's client" and to make level changes. You would probably want an enable for this mechanism in settings to avoid unexpected interactions.

Another approach would be to copy a mix from another client into your mixer, make changes and copy it back to the other client. Jamulus already provides menu items for saving and loading the current mix, so adding two more menu items would make this work from a U/I standpoint. I just checked, and Save and Load Mixer Setup doesn't work while connected, so that needs to change. The server knows every client's levels (and pan) but sending the modified mix back to the client may need a new data path.

chrisrimple commented 3 years ago

This might go well with my ask #704, to allow the Jamulus Client to send commands to a remote Jamulus Server, essentially launching Jamulus in Remote Server mode (rather than Local Server) to control cloud server functions via the user interface.

gilgongo commented 3 years ago

I think this request is probably in forking territory really, but I recently used Zoom's remote control feature to install and configure Voicemeeter on somebody's machine so that they could play background music on Zoom (and other) calls. Other than being a bit slow, it was fairly easy. I wonder if you could do the same with Jamulus so that you could then use Zoom to hear what the client was hearing and adjust the mix that way?

kwindrem commented 3 years ago

I have not played with it but apparently RealVNC has some provision for getting audio from the remote computer. Unfortunately, it's not offered in the free version so it's $40 per year per server (in this case a Jamulus client)!

I have set up a mechanism to route Jamulus audio into Zoom for distributing virtual concerts to those that don't run Jamulus. So there is a path to get that audio to an "engineer's station". Then VNC would provide the control path. However, this means that the engineer would need to leave Jamulus for two other apps: one to control and one to hear. The engineer's station would also need a way to switch audio from their normal Jamulus client to a remote one's audio via Zoom or whatever.

The alternate approach I outlined above which uses Load and Save Mixer Setups would allow the engineer to remain in Jamulus for control and monitoring of other clients. User interface changes would be reduced to additional menu items to get mixer setups from another client and send the modified mixer setup back to the client. Under the hood, data paths to transfer mixer setups from one client to another that would be needed. This path would probably need to route though the Jamulus server to avoid issues with firewalls.

I think one additional feature of this approach would be to set all clients to the same mix. I think this would help large groups like choirs so that the musician's experience can be simplified to just turning on and singing. This has the advantage over an alternate posting that would send the same mix to all clients: once the mix was sent to all clients, each client could then make minor adjustments to their mix for "more me".

corrados commented 3 years ago

The server knows that each channel level and pan are for that client, but if another client were to make level changes, those would need to be communicated to the original client so their faders move too.

That is a very complicated and error prone process in the code and therefore should not be implemented.

One possible alternative would be that you share your mixer settings in the Chat dialog. So you make your mix, send it in the chat and the other user just has to click on the link and all settings are applied. Unfortunately, the implementation is tricky since the amount of data send through the chat is larger than the maximum number of bytes allowed for one chat message. And also this "I just checked, and Save and Load Mixer Setup doesn't work while connected, so that needs to change." has to be changed, too. So this alternative solution would be a lot of work, too.

kwindrem commented 3 years ago

Part of the use case for having one user make level changes for another is that some users have no aptitude for setting up a mix so it sounds good for them. In fact I have one user who is running his Jamulus client with no user interface at all. We VNC in to make changes FOR him. But we can't hear the mix we are creating.

Sending the mix somehow (like chat) to another user assumes they are savvy enough to see the new mix and click on the link.

corrados commented 3 years ago

Sending the mix somehow (like chat) to another user assumes they are savvy enough to see the new mix and click on the link.

I agree. This is an open issue. So, maybe this solution would not help for your usecase.

Another approach would be to copy a mix from another client into your mixer, make changes and copy it back to the other client [...] I just checked, and Save and Load Mixer Setup doesn't work while connected, so that needs to change.

First step is done: Now you can store the mixer settings during a connection (loading still requires a disconnect): https://github.com/corrados/jamulus/commit/3d213e4c028d256269ccf14accaa190d56b47ab5

corrados commented 3 years ago

Second step is also done (wasn't a big deal). So, loading the mixer settings during an active connection is now also possible: https://github.com/corrados/jamulus/commit/a29863827a7bf75d61caa11d5bc3917457035a04

corrados commented 3 years ago

I implemented another nice feature. Now it is possible to drag'n'drop mixer setup files into the Jamulus software: jV4o2rlAXY @houbsta, @sthenos This new feature might also be interesting for you for the Worldjam mixing.

nefarius2001 commented 3 years ago

That is a very complicated and error prone process in the code and therefore should not be implemented.

I totally see these concerns if the server shall trigger a transmit "onChange". Do you see the same high danger for requesting a mixer-setting (of a chosen other participant) from the server and auto-loading the response upon receiving? This could then also be triggered automatically e.g. every 0.5s

corrados commented 3 years ago

One way would be to upload the current settings file to a cloud server and post the link in the Jamulus chat dialog.

nefarius2001 commented 3 years ago

That is a valuable option already. What I am missing there is the „fire and forget“ feeling. In a choire rehearsal I would like to spend a few minutes at the start for configuration, and then have the participants forget the tools and dive into the music. (Except for one person, who is in charge of adjusting the mix)

corrados commented 3 years ago

Do you think you have to re-adjust the mix all the time? I assume once you have a good sound, you just distribute the mix to all participants and do your rehearsal without having to modify any faders at all.

nefarius2001 commented 3 years ago

Do you think you have to re-adjust the mix all the time?

I think tweaking from time to time will be wanted.

From experience, singers adjust their voice intuitively to what they hear. It depends on their experience-level how strongly, especially with any kind of voice-amplification. And it varies from song to song. Instruments are more constant.

I'd expect 2-3 iterations of sing, adjust, distribute at the begin of rehearsal, and then maybe an adjustment every 30 min (when switching song).

corrados commented 3 years ago

That sounds reasonable. In that case, a distribution of the settings via a could drive and a link postet in the chat window seems to be a good solution to me.

gilgongo commented 3 years ago

Hi All - until we have an actionable specification for what to do here, I'm moving this to a discussion if that's OK. Once a spec is firmed up we can add it as an Issue to be worked on.