Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

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

Multi Channel Fader on one Jamulus #96

Closed
nicolopozzato opened this issue Apr 18, 2020 · 22 comments
Closed

Multi Channel Fader on one Jamulus #96

nicolopozzato opened this issue Apr 18, 2020 · 22 comments
Labels
feature request Feature request

Comments

@nicolopozzato
Copy link

I play with some friends... All of them have a simple request...

A way to send to the Jamulus Server multiple audio over different fader in the mixer, all of this can be Mono or Stereo.

Example:
I have a microphone, it's mono, so in the first channel I set it in mono, then i can select what device, and the input channel of that device.
After that I have a Keyboard, so in the second channel i can set it in stereo (stereo->stereo, for send two channel, or a stereo->mono to mix down a mono track), then i can select what device, and then i can select the two channel.

After the input I can select if i want a mono or stereo return from the server to hear in the headphone.

We ask this because we all have to open more Jamulus each time, and this leads us to throw away server bandwidth.
We need everyone to do their own mix on headphones, some musicians have two or more keyboards and a microphone, so they start jamulus many times.

If you put together all the open Jamulus as a second or more channel (99% in stereo) we find ourselves having a lot of bandwidth thrown away by the server because the server sends the mix to all the jamulus.

It would be nice to have a setting for unlimited channels. every channel could be mono or true stereo or a strereo mix down mono, every channel could select a different audio device and different channels, also a different name.

In this way you can eliminate the complexity of running multiple Jamulus client and the extra bandwith trown away.

@pljones
Copy link
Collaborator

pljones commented Apr 18, 2020

You can hook up a DAW to Jamulus - but it depends on having routing that both ends understand. JACK on Linux is fine. I can't comment on MacOS. On Windows, I run it using Reaper with about 60 or 70 different local channels running through the mixing desk before being routed out to Jamulus and the return audio fed back again.

@nicolopozzato
Copy link
Author

Ok but all the channel are local, only for you... The other member see only one channel. I was asking for a way to send multiple channel like I was using multiple Jamulus, so every member can adjust their own audio.

@pljones
Copy link
Collaborator

pljones commented Apr 18, 2020

You can run multiple instances of Jamulus, too, if you do it right - that gives that level of control, too.

@nicolopozzato
Copy link
Author

But running multiple Jamulus add up also all the output from the server, but they are not needed... So I was thinking at a solution to send multiple separate channel in a Jamulus Server, but to have only one feed to ear from the server.

@pljones
Copy link
Collaborator

pljones commented Apr 18, 2020

Two input channels on one client of software adds to the server just as much as two input channels on two clients. It makes no difference - it's just as much network load and CPU load.

@nicolopozzato
Copy link
Author

Yes, if I send two signal it's the same as two client, but if I use two client I receive two mix down audio from the server... but I only need to ear one. So in this case the server is creating a mix track that i never listen and so utilizing cpu and internet.

Also in the current state i have Mono/Mono, Mono in/Stereo out but can't send a stereo signal but earing a mono mixdown (Stereo in/Mono out)
This could be useful for a stereo keyboard while I'm wearing headphone only in one ear.
Also this reduce at the same time the extra bandwith for the first problem of having to use multiple jamulus (each of us use many jamulus to have all the voices and all the instruments in the mixer so anyone can have their mix, so keyboard, synth, drum... all of this are stereo but just selecting Stereoin/Monoout clould help with reducing the extra bandwidth)

@pljones
Copy link
Collaborator

pljones commented Apr 19, 2020

Actually, yes, you're right about the amount of data from server to two clients being more... (By the one downward stream, plus, if you use them the couple of bytes for the levels.) -edit- Oh dear, must have been a bad day: yes, everything to the second client would be extra...

@Snayler
Copy link
Contributor

Snayler commented Apr 21, 2020

If you're under Windows, Voicemeeter might be a good solution for you. You can mix up signals from different audio sources and it lets you control each signal's output, so you can adjust volumes as you'd like. I'm using it so I can have my guitar and my computer's microphone going into Jamulus at the same time, so only one Jamulus client needs to be running.

The same can be accomplished under Linux by using Jack and alsa_in to mix multiple audio interfaces together.

In MacOS, from a fast google search, it appears this is also possible by creating an "Aggregate Device".

@nicolopozzato
Copy link
Author

You can mix up signals from different audio sources

Yes. But as saied already, in this way every other member in Jamulus get only ONE fader in their mixer! And because I use this in a live streaming situation some friends have a "sing mic" (mono), and instrument (stereo or mono) and a "non live mic" (mono).
Everyone need a particular mix in their ears and also in the streaming pc in the sanctuary we don't want all the "non live mic" as they are only for speak to each other musicians and singers!

I'm using it so I can have my guitar and my computer's microphone going into Jamulus at the same time, so only one Jamulus client needs to be running.

Only you are able to set the mix about mic and instrument volume... so if another person in jamulus don't want your voice so loud they can't do anything... in our setup with multiple Jamulus client we can have fader for every things! So everyone can have their right mix in their ears!

All of this create pointless use of server cpu and bandwith! I don't know if it's simple or not to implement. But a first step is to divide the "send" from the "receive" so later it's just more socket that has to be open to send multiple channel... and we can receive what we need only one time! Also in this situation we could send a stereo signal (so if someone use stereo as return can listen the instrument in stereo) but recive a mono mixdown!

@WolfganP
Copy link

WolfganP commented May 6, 2020

Perhaps an easier way to implement this functionality is for the Jamulus client to start as a secondary/slave mode in second/third/... instances on the same machine, where it only contributes with an upload stream and doesn't request a download mix from the server.
Running multiple instances may be cumbersome for the end user, but the upload/input only mode could be easier to implement for the @devs as a general switch.

@kilcup
Copy link

kilcup commented May 22, 2020

I'm a happy camper who would be even happier with the multiple fader feature.
For now I am running multiple instances of Jamulus (in the Linux/Jack world),
and have one small hopefully easy request --- how about having the client display the
choices made in the profile setting? Call it a first world problem, but I occasionally get
confused as to which instance is which, something I resolve now by opening up the
setting menu. How about saving me a mouseclick and displaying a small version of the
name/instrument icon somewhere, even before we connect?
and again kudos for everything!

@Snayler
Copy link
Contributor

Snayler commented May 22, 2020

@kilcup you can use --clientname to rename each instance

@WolfganP
Copy link

WolfganP commented May 26, 2020

@kilcup you can use --clientname to rename each instance

Thanks for the tip @Snayler ! I was experimenting with multiple clients yesterday and found out that using --inifile was even better as it allows to maintain separate profiles with more customized settings for each instance (even using different devices/channels).

@slimvince
Copy link

If the option to split somebody's stereo (or dual mono) feed to two faders would also include the pan control (plus level meter, mute and solo) - we would be able to do true panning of stereo/dual mono feeds, both signals independently. No more forcing everybody else to hear my guitar in one ear only and my singing in the other :)

As implemented now, for stereo feeds, the pan control actually acts as a balance control (not pan). Only if the source is mono it acts as a pan control.

Of course - the performance hitting work-around is to run multiple Jamulus clients - as mentioned.

@slimvince
Copy link

A compromise I have tested is to change the server's implementation of how to pan a stereo signal.
I changed it to become a stereo spread control for stereo sources (instead of balance).

Assuming I send in stereo (but really dual mono A and B):
Pan turned fully left: A --------- B A gets panned fully to the left and B fully to the right
Pan turned midway: -----AB----- Both A and B get panned in the middle
Pan turned maxright: B ----------A B to the left and A to the right
(and everything in between)

The compromise is others still cannot set A and B:s levels individually (or mute or solo them).
The upside is that is is really quick to implement - if most users prefer a stereo spread control over a balance control.

@alanz1357
Copy link

I would greatly appreciate the ability to control the volume level of each of the two channels individually. The solution to use multiple Jamulus clients for the individual channels will work with sophisticated user in a band that rehearses regularly, but is not practical for casual jam sessions with folks you meet on Jamulus. Most users have voice in one channel and instrument in another and set the relative balance to suit themselves. The balance a user sets, takes into account acoustic energy from their instrument or voice in addition to what they hear back from Jamulus in their headphones. The relative balance the musician sets for themselves may be very different than what other musician on the session require.

@DeanWyant
Copy link

Being able to have a client show up as two channels (left and right - mono) would be an excellent feature. slimvince stereo spread control as an option on a Stereo channel would be an acceptable first step - perhaps sharing the Pan control (toggle from Pan to Spread - or set from a client setting).
It seems that this feature request is for having one computer sending any number of outputs to a server as separate channels. That would cover the separate left and right also.
I have read that this is possible already using multiple clients.
A possible solution could be to have a "master" instance for the client mix with options that get passed to "slave" clients that run as senders only. That would allow a "client set" to be executed by a single launch which would appear as a single interface. Basically automating the use of multiple clients in a way that could be mostly transparent to the user. Since each client (slave) can pan to only send left or right, the simpler issue of having a left and right channel (mono) would be either a master and two slaves or a master for one output and one slave for the other. Of course, the master would have to pass on settings and connects / disconnects / shutdown etc. to the slaves. The user would see this as Jamulus having the ability to send out any number of outputs which get their own client channels. To the user, it might not appear any different than a solution integrated into one instance.
Just a thought... the idea does not make the code changes trivial. It might be easier than implementing the feature in a single instance.. or not... I have not studied the code, so I do not know.

@Lotharyx
Copy link

Lotharyx commented Jan 6, 2021

I'm another voice in the crowd that would love to see an implementation of this. I'm also a professional software developer, so I'm going to take a crack at the code and see if I can find a path that isn't too intrusive. The idea of a send-only client is a good one, and would theoretically mean minimum changes server-side (just knowledge to not send a mix back to the client). On the client side, a first pass could be a separate instance with a very reduced UI (only really need the level meter, as the "master" instance gives all the network health and mixing interface needed). Anyway, I'm going to fork and play with the idea a while. I'm primarily a Windows and Linux developer (although, ironically, I'm running Jamulus on a Mac Mini), so I might not be able to do good UI work for the Mac version.

@gene96817
Copy link

@Lotharyx Would your idea of a send-only client look like an output device to the client computer? Then it could play an mp3 on one channel?

@Lotharyx
Copy link

Lotharyx commented Jan 7, 2021

@gene96817 That's not my current intent, no. However, that would certainly be a useful feature. I also think it would be useful to have Jamulus be able to serve as a VST plugin for better DAW integration, but that's definitely not what I'm looking at right now.

@insolace
Copy link

Better audio routing is a very important feature. Almost everyone jamming has a mic in addition to their instrument, usually for talkback and often for singing. Having separate controls for these two signals is key for musicians to be able to set up a clean mix for themselves.

For anyone looking to use jamulus for a live broadcast, the remote audio engineer needs control over vocals/instruments. Being able to assign each instrument to a discrete USB audio interface output would be huge for professional applications. Using multiple clients might be a temporary workaround, but these features should be high priorities on the roadmap as they affect adoption.

@gilgongo
Copy link
Member

Hi all - so that we can keep Issues to actionable backlog items, I'm moving this to a discussion if that's OK. Once we have some agreement on how best to implement this we can add the relevant issue(s).

@jamulussoftware jamulussoftware locked and limited conversation to collaborators Feb 19, 2021

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
feature request Feature request
Projects
None yet
Development

No branches or pull requests