-
Notifications
You must be signed in to change notification settings - Fork 241
Description
Prefaces:
I: I am the drummer in a 3 peace advanced jazz band "fuTunes" and a retired SW developer/project manager, located in Munich, Germany. I have also been working as a sound engineer (FoH/Monitor/Studio).
II: Currently I am struggling for our band to get a local Jamulus server running on a DS-Lite connection so the work on this Issue deducts me from essential research for our band.
III: The more I dig into Jamulus topics the more I question myself: Are we going the right way to support the community (also regarding the current Corona situation)? From the (few) threads I was able to follow I see two separate movements: 1) Keep it simple and work as expected => optimize the current implementation without caring too much for documentation ("bottom-up"). 2) Update the documentation to match the implementation and improve the implementation only after it is clear how the pieces should work together and what to change where and why ("top-down"). Personally I support 2) but I admit that it will take more time in the beginning.
IV: For me "local" always means "related to the (physical) location of my equipment (HW and SW)".
Referring to https://jamulus.io/wiki/Software-Manual ["the Manual"], to http://llcon.sourceforge.net/PerformingBandRehearsalsontheInternetWithJamulus.pdf ["the Case Study", February 2015], and to #64 (comment) ["the Audio Diagram", May 2020], there are features which from my PoV do not work as documented or do not work as expected. I list the issues which have caused the biggest waste of time for me so far. Everything was tested with Jamulus V3.6.1. Once the root causes are clear, we can split up this summary into separate issues.
Signal Flow Diagram: In the Case Study we find "Figure 2: Simplified Jamulus block diagram" which shows the data processing but cannot be taken as an audio flow diagram. It shows the input from "other client" but does not show the server output to other clients and the text below says "This mix is ... transmitted to all connected clients ..." suggesting that there is only a single mix which is distributed to all clients - I was completely misled by this when I started working with Jamulus. Meanwhile I was pointed to the Audio Diagram which explains the audio flow but still suffers from missing information (see my points below).
- Feature request: Provide two up-to-date diagrams to be taken up into the Manual (maybe into a new "Technical Reference" section): 1) data flow and 2) audio signal flow. Rationale: "A picture paints a thousand words" - Jamulus is too complex to be quickly understood by simply reading the Manual, and the currently required "trial and error" method is a waste of time.
I believe that most every musician will be able to read an audio signal flow diagram. From my PoV, 1) could be easily achieved by updating the block diagram from the Case Study, but 2) is more complicated because - at least for me - there are a lot of things which are not working as expected (see my points below). What is also required: Select a drawing tool - are there any preferences? Personally I would start with Visio.
Input level: The Manual: "This shows the level of the two stereo channels for your audio input." According to the Audio Diagram (congruent to the Manual), this display is expected to be always working. Issues:
- Input level is not displayed while the local client is not connected to a Jamulus server.
- There is only one stereo channel, not two.
- In the Manual the wording "for your audio input" is ambiguous - does it mean "from your Jamulus audio input" (i.e. the output of your audio interface to the input of the Jamulus client) or "received by the Jamulus server" (i.e. the output of the Jamulus client sent to the Jamulus server if there is an active connection)? [I think the current implementation is the latter - OK from my PoV.]
- Feature request: Input level shall be displayed permanently. Rationale: The generation of the local audio to be eventually sent to the Jamulus server is influenced by a huge number of parameters (audio interface, drivers, OS settings, Jamulus settings, maybe more). A permanent monitoring of this signal would drastically reduce the time required to achieve a correct setting of all local parameters without the need to additionally set up a local Jamulus server (on the same computer or on another computer in your LAN, while you are not yet 100% familiar with the SW). The Manual then shall read "This shows the level of the stereo channel which will be sent to the Jamulus server."
Mute Myself button: The Manual: "Cuts your audio stream to the server so that you will be able to hear yourself and see your own input levels, but other musicians will not." According to the Audio Diagram, the local user's signal bypasses the Jamulus server and is fed back to the local audio interface directly (together with the mix coming from the server). If the Audio Diagram is correct, I see the following issues:
- Why is this working only while connected to the server - the server is bypassed anyway.
- The signal remains completely on the local computer, not affected by any network delay (verified to the extent I can w/o disturbing remote musicians), so it does not make much sense to mix-in the server output as the "golden principle" to "always listen to your signal from the server" is violated.
- The Audio Diagram cannot be correct because the fader and mute button (but not the pan) within the "Server audio mixer" affect the signal (see also Honour own fader and Mute button in “Mute Myself” #148 but there I do not see a solution for my finding).
- Feature request: 1) Split "Mute Myself" into two separate functions: 1a) "Local Audio Loop" (Client): Enable to listen only to your own signal "as if it would come from the server" but without any network delay, i.e. feed the signal which would go to the server directly into the local client's input jitter buffer and do not send any audio to the server. In this mode the "Server audio mixer" display shall be emptied (as it is now while not connected but of course the "Input level" needs to be displayed - see above). 1b) "Mute me for others" (Server): Introduce a new info bit to inform the the server which will then set 1b1) your own signal to Mute and Solo *) and 1b2) the signal of all other users to [Edit] Mute [/Edit] for your personal mix. According to the Audio Diagram, this would be sufficient to create the correct mixes without the need to implement new mixing methods in the server and the GUI remains unchanged. 2) Remove the red bar "Muted (...)" on top of the "Server audio mixer" which currently causes the single channel strips to jump. The status of each user's channel for their personal mix would be displayed correctly anyway. 3) Update the Audio Diagram accordingly.
In the GUI of course a new button is required. I think the input level display can be shrunk to get the space for the new button. Local Audio Loop and Mute me for others shall be mutual exclusive (one activated releases the other).
[Edit] *) "Mute and Solo" does not work as you would expect from the Audio Diagram - Mute takes precedence :-( So this needs to be also changed so that for your own client Solo takes precedence.
- Proposal by dakhubgit (https://github.com/jamulussoftware/jamuluswebsite/issues/174#issuecomment-744040593):
"Ok, what I consider useful for startup is, assuming you are unconnected, to behave as follows:
a) as if "mute myself" is active, namely route audio to the mixer directly rather than through a server
b) add a mixer strip for oneself as if one were connected on one's own to a server
That allows playing around with quite a bit of things in a private sandbox before even going online." - My comment: The behavior is exactly what I want, but I think the GUI should be visually different in the two connection states - if you see a fader, you may think you are connected while you are not. The input level meter is sufficient to check for input overload (once my proposal above is implemented), the playback volume can be set with the volume control of the audio interface.
Reverb effect: The Manual: "Reverb can be applied to one local mono audio channel or to both channels in stereo mode ...". This together with the following description ("... a microphone signal is fed in to the right audio channel of the sound card and a reverb effect needs to be applied ...") suggests that in mono mode, the reverb is applied only to the channel selected by the radio buttons. Issues:
- The reverb always generates a stereo signal, also if "Settings/Misc/Audio Channels" is set to Mono. Is this the designed and wanted behavior?
- In the GUI it is not clear that the reverb directly belongs to the Input.
- Feature request: 1) Update The Manual and the Audio Diagram to reflect the implementation. 2) GUI: Move the vertical separator which is currently on the left side of the reverb slider to the right to clearly show the relationship.
Local audio pan / balance control: To me it is completely unclear how this is supposed to work, see also #353, and I think it is wrong what I wrote in #778 (comment) (I will edit this comment after things have been clarified). Issues:
- If the vertical pan affects the final signal sent to the client, then it is related to the input and this not clearly seen in the GUI - same as with Reverb effect above, so moving the vertical separator to the right side would remove this problem.
- There are two separate elements labelled "Pan": 1) The Local audio pan / balance control with the vertical slider and 2) the rotary pan above the channel fader (which - for some reason - disappears when I switch "Settings/Misc/Audio Channels" to Mono).
- Depending on "Settings/Misc/Audio Channels" the effect of the vertical slider is different:
- When I input a mono signal (i.e. I feed audio only into the left or right input of the audio interface) then 1a) Mono: The mix is a stereo signal with the input signal equally distributed to the left and right channel (centered), the vertical pan just affects the level and there is no possibility to pan the signal => useless. 1b) Mono in/Stereo out: The mix is a stereo signal, the rotary pan above the fader works as expected, but the vertical pan just affects the level => useless. 1c) Stereo: The mix is a stereo signal with the input signal present only at the channel where it is input. Both the vertical and the rotary pans just affect the level => both are useless.
- When I input a stereo signal then 2a) Mono: The mix is a stereo signal with the left and right input signals mixed together and then equally distributed to the left and right channel (centered). The vertical pan attenuates the left or right input signal prior to being mixed together, but the reading above the vertical fader (top position: R-50, bottom position: L-50) has the channels exchanged (bug, I think). 2b) Mono in/Stereo out: The mix is a stereo signal, the vertical pan attenuates the left or right input signal prior to being mixed together (same bug regarding the channel reading) and the rotary pan works as expected. 2c) Stereo: The mix is a stereo signal, the vertical pan attenuates the left or right input signal (same bug regarding the channel reading) and the rotary pan works as expected.
- Conclusion from my tests above:
- The vertical slider labelled "Pan" is not a pan but an attenuator for the left and right input signals. Therefore a better label would maybe be "LR Attenuator", the channel attenuation reading is exchanged and "Center" in the middle position is wrong (it should simply read 0).
- Why is the rotary pan not available if "Settings/Misc/Audio Channels" is set to Mono?
- I will not make any concrete request for implementation and/or documentation update unless it has been clarified how the "Pan" features are supposed to function. Maybe it is possible to change at least the GUI so as to reflect the relationship of Local audio pan / balance control and Reverb effect to the lefthand Input section (just move the vertical bar), change the label of the vertical slider from "Pan" to "LR Attenuator" and correct the attenuation number display.
So far for the documentation of the quirks I have found.
@corrados @gilgongo @dakhubgit @WolfganP @Matzix: Could you please kindly review what I have written and direct me how to continue, thanks.