We are a group of choir singers. We have experienced with Jamulus. It is good in terms of delay and sync of streams but we tend to go slower... You seem to have an architecture based on measuring βbarsβ somehow. A metronome providing a reference from the server side would benefit us. Any thoughts in that direction?
Kind regards,
Xavi
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Having a metronome is to fight the symptoms and not the root of the problem. The root of the problem is to get the latency down as much as possible and to only hear your own voice/instrument sound only from the server. I know for a singer this is hard to achieve but this is the only way to play synchronized to avoid getting slower.
To lower the latency there are some options: No WLAN, no ASIO4All, good audio hardware, good internet connection, server which is located near you.
But having a good audio hardware is sometimes not the solution. E.g. I have a Lexicon Omega audio card which is old but still a good device. When I install it on my Windows computer, the latency is not good since the driver provided by Lexicon is not good. What I do is to use this card on my Mac Mini. There I get much better latencies.
So setting up Jamulus initially by just downloading the software, installing ASIO4All and using the onboard laptop sound card is easy. But his is just a start. Comparing such a setup with a highly optimized system (software/hardware) you can easily gain 20 - 30 ms lower latency. And for the latency every ms counts!
π
2
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Singers (and musicians with acoustic instruments) can use noise-canceling headphones to achieve the goal of only hearing your voice/instrument sound from the server. For singers it takes a bit of practise.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I am part of another group of singers and I don't quite understand what you write in your answer, that a metronome wouldn't help. We are six singers, all of us are on the lowest latency setting (64 samples) in Jamulus. I reckon there is no way to lower latency any more by, for example, making sure everyone is on ethernet cable rather than wifi?
It is kind of possible to sing together, but as the starter of this thread mentions we tend to slow down and it is hard to keep the tempo up, no matter if we listen to our own voices or not.
If the Jamulus server would be reponsible for keeping globally synced timing but the actual metronome sound would be generated by the Jamulus client (i.e. not sent as audio through the stream), I believe there could be huge benefits.
I'm not enough technically skilled to understand if it would be even possible to implement such a thing in Jamulus, but I do believe it would be useful to have a server synced metronome.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
If all participants are on the 64 samples option, is there anything more we could do to reduce latency even more? Better server? Would ethernet cable rather than wifi for all participants make any difference in this situation?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Would ethernet cable rather than wifi for all participants make any difference in this situation?
Yes, definitely use ethernet.
Better server?
Depends on the ping time to the server. I play with 12 ms ping to the server. What ping times do your musicians have?
Do you use ASIO4All? If yes, you most probably waste a lot of ms. Do they have special audio hardware or just laptop internal sound card? Another waste of ms if it is just internal sound card.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Do you use ASIO4All? If yes, you most probably waste a lot of ms. Do they have special audio hardware or just laptop internal sound card? Another waste of ms if it is just internal sound card.
Could you explain this to me? Are you saying ASIO4ALL makes things slower adding latency? My understanding is ASIO4ALL's purpose is to reduce latency.
My ultimate goal is choir rehearsals/singing in small or larger groups. I am nowhere there yet.
π
1
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Right now I have 3ms ping time to the server, but I am currently the only one online. I remember that "Overall delay" has been around 40ms but right now with only me it's 25ms (on buffer size 128).
I my case, I use the iRig Pro Duo and a native asio driver was just released but for some reason everything gets quiet when I choose (2.67 ms (64)" in Jamulus, I need to stay on buffer size 128 with that driver.
And yes, unfortunately some of the participants only have their laptops internal sound card, I can understand that this is a problem.
Nevertheless: it's not unlikely that many people that try to use Jamulus doesn't have the optimal equipment. Perhaps they would be helped by a global metronome in sync. ;)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ASIO4ALL was made to work with just about any Windows hardware by simulating ASIO in top of native windows drivers, it is not optimised for good latency.
The way to get good latency is to use an external audio box, for example the Behringer U-Phoria UMC202HD, there are many others too. Note that Behringer has interfaces that are even less expensive, but they don't have their own ASIO drivers so one has to use ASIO4ALL with them, which is not a big help.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thank you. So in other words unless I buy additional hardware, which I can't ask my choir collegues to do, ASIO4ALL is my best option. Right? Note, I will only be using a microphone.
Can you tell how much extra hardware will remove from the delay? I've set up an aws Linux instance and get 22 ms ping and 50ish Overall Delay according to Jamulus (with 64 Buffer Delay and small network buffers).
Last edit: hk1020 2020-05-10
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The overall delay shown in Jamulus is an estimated value, not a measured one. When I actually measured the audio delay, usually the measured values with ASIO4All were large than given as Overall Delay in Jamulus.
If all participants are on the 64 samples option, is there anything more we could do to reduce latency even more?
If I use my Lexicon Omega interface on Mac and "Enable Small Network Buffers" and set the Sound card buffer to 64 with a ping time of 12 ms, I get a measured overall delay of about 26 ms. So for your 22 ms ping I would assume with a good audio interface and good driver, we should get as low as about 36 ms.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
And how would other people influence the delay? Is it set by the slowest participant?
No, you are only influenced by your own delay. But you have to sync on what comes back from the server. The larger the delay, the more difficult this is.
But if other players have too high latency so they cannot sync with what they hear from the server, they will come late and somewhat influence you (by coming late).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The "slow down" (loss of tempo) that you're experiencing is happening to many choral groups that are attempting remote rehearsals. The only recommendation I've seen is to use a click track or metronome and to encourage vocalists to "rush the tempo" a little, basically singing on the front edge of each beat, rather than reacting to what they're hearing from other vocalists (through the Jamulus server). Synchronization will also be better with ballads and slower-tempo songs than with uptunes.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The only recommendation I've seen is to use a click track or metronome
Chris I believe the best solution, rather than a metronome, is for the conductor to tap his baton on a coffee cup near his microphone.
For singers it is not possible to completely avoid local monitoring. It makes having a low overall delay that much more important. Low overall delay comes from a combination of:
1 - low ping time
2 - good audio hardware
3 - properly configured driver
4 - low network jitter
Last edit: punshon 2020-06-14
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Chris I believe the best solution, rather than a metronome, is for the conductor to tap his baton on a coffee cup near his microphone.
The problem with this approach is that singers will hear the coductor's pulse with individual delays. That's why there's a need for a globally synced metronome where the timing is managed by the server but the actual click sound is generated in each local client so that the click is played at the exakt same time in everyone's ears, even though the rest of the sound (i.e. the other singers' voices) arent exactly on time. Everyone should concentrate more on that synced click that on the other actual voices to keep in time.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Unfortunately it turns out it doesn't work - it's not a synced metronome. I opened it in two computers next to each other on the same network, the audio click is completely out of sync.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Having a metronome is to fight the symptoms and not the root of the problem. The root of the problem is to get the latency down as much as possible and to only hear your own voice/instrument sound only from the server. I know for a singer this is hard to achieve but this is the only way to play synchronized to avoid getting slower.
Volker's advice is worth repeating. The beauty of a low latency system is its ability to allow people to play / sing with each other, not to follow a metronome.
It is quite possible to inject a metronome into Jamulus. Eg. create a click track on Audacity, connect Audacity playback to Jamulus, and you're able to control the start/stop of the track. I found that it CAN be useful for learning a rhythmically tricky passage. However musically it can be quite damaging - leading musicians to listen to a machine and not each other, and if you listen to the results it is very dead compared to real people who will vary tempos and follow each other. For this reason, I would opt not to have an in-built metronome function.
π
1
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
With voices, it's extremely difficult to not listen to your own voice (as is the general recommendation when playing instruments through Jamulus).
If one person plays/distributes a click for the others to listen to, then everybody will hear this click at slightly different times - depending on what their own latency is. Even though everyone hopefully has a low latency, the click will be heard at slightly different times for each person.
The point of a globally synced metronome is that each participant will hear the click sound at exactly the same time, even though their latencys might be different. It's not a perfect solution, but it is a better solution when singing than listening to only each other's Jamulus "tracks".
Henrik please let us know the results of your test of the shared metronome.
This functionality is IMHO very difficult to implement as the Internet is a stocastic system. You never know how it will react in the future, even in the very short term. I can imagine that if poorly implemented it could be worse than a click track feed.
Don
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Dear Volker,
Thanks a lot for developing a fantastic app.
We are a group of choir singers. We have experienced with Jamulus. It is good in terms of delay and sync of streams but we tend to go slower... You seem to have an architecture based on measuring βbarsβ somehow. A metronome providing a reference from the server side would benefit us. Any thoughts in that direction?
Kind regards,
Xavi
Having a metronome is to fight the symptoms and not the root of the problem. The root of the problem is to get the latency down as much as possible and to only hear your own voice/instrument sound only from the server. I know for a singer this is hard to achieve but this is the only way to play synchronized to avoid getting slower.
To lower the latency there are some options: No WLAN, no ASIO4All, good audio hardware, good internet connection, server which is located near you.
But having a good audio hardware is sometimes not the solution. E.g. I have a Lexicon Omega audio card which is old but still a good device. When I install it on my Windows computer, the latency is not good since the driver provided by Lexicon is not good. What I do is to use this card on my Mac Mini. There I get much better latencies.
So setting up Jamulus initially by just downloading the software, installing ASIO4All and using the onboard laptop sound card is easy. But his is just a start. Comparing such a setup with a highly optimized system (software/hardware) you can easily gain 20 - 30 ms lower latency. And for the latency every ms counts!
Singers (and musicians with acoustic instruments) can use noise-canceling headphones to achieve the goal of only hearing your voice/instrument sound from the server. For singers it takes a bit of practise.
I am part of another group of singers and I don't quite understand what you write in your answer, that a metronome wouldn't help. We are six singers, all of us are on the lowest latency setting (64 samples) in Jamulus. I reckon there is no way to lower latency any more by, for example, making sure everyone is on ethernet cable rather than wifi?
It is kind of possible to sing together, but as the starter of this thread mentions we tend to slow down and it is hard to keep the tempo up, no matter if we listen to our own voices or not.
If the Jamulus server would be reponsible for keeping globally synced timing but the actual metronome sound would be generated by the Jamulus client (i.e. not sent as audio through the stream), I believe there could be huge benefits.
I googled and found a Princeton University dissertation on this subject: Tools and Techniques for Rhythmic Synchronization in Networked Musical Performance (Full text PDF available). And I found The Global Metronome: Absolute tempo sync for networked musical performance (full text available there as well, and I also discovered that someone built a Rasberry Pi implemenation on that one).
I'm not enough technically skilled to understand if it would be even possible to implement such a thing in Jamulus, but I do believe it would be useful to have a server synced metronome.
There is already a feature request for this on Github: https://github.com/corrados/jamulus/issues/79
Thanks, I commented there as well now.
If all participants are on the 64 samples option, is there anything more we could do to reduce latency even more? Better server? Would ethernet cable rather than wifi for all participants make any difference in this situation?
Yes, definitely use ethernet.
Depends on the ping time to the server. I play with 12 ms ping to the server. What ping times do your musicians have?
Do you use ASIO4All? If yes, you most probably waste a lot of ms. Do they have special audio hardware or just laptop internal sound card? Another waste of ms if it is just internal sound card.
Could you explain this to me? Are you saying ASIO4ALL makes things slower adding latency? My understanding is ASIO4ALL's purpose is to reduce latency.
My ultimate goal is choir rehearsals/singing in small or larger groups. I am nowhere there yet.
Right now I have 3ms ping time to the server, but I am currently the only one online. I remember that "Overall delay" has been around 40ms but right now with only me it's 25ms (on buffer size 128).
I my case, I use the iRig Pro Duo and a native asio driver was just released but for some reason everything gets quiet when I choose (2.67 ms (64)" in Jamulus, I need to stay on buffer size 128 with that driver.
And yes, unfortunately some of the participants only have their laptops internal sound card, I can understand that this is a problem.
Nevertheless: it's not unlikely that many people that try to use Jamulus doesn't have the optimal equipment. Perhaps they would be helped by a global metronome in sync. ;)
ASIO4ALL was made to work with just about any Windows hardware by simulating ASIO in top of native windows drivers, it is not optimised for good latency.
The way to get good latency is to use an external audio box, for example the Behringer U-Phoria UMC202HD, there are many others too. Note that Behringer has interfaces that are even less expensive, but they don't have their own ASIO drivers so one has to use ASIO4ALL with them, which is not a big help.
Thank you. So in other words unless I buy additional hardware, which I can't ask my choir collegues to do, ASIO4ALL is my best option. Right? Note, I will only be using a microphone.
Can you tell how much extra hardware will remove from the delay? I've set up an aws Linux instance and get 22 ms ping and 50ish Overall Delay according to Jamulus (with 64 Buffer Delay and small network buffers).
Last edit: hk1020 2020-05-10
The overall delay shown in Jamulus is an estimated value, not a measured one. When I actually measured the audio delay, usually the measured values with ASIO4All were large than given as Overall Delay in Jamulus.
If I use my Lexicon Omega interface on Mac and "Enable Small Network Buffers" and set the Sound card buffer to 64 with a ping time of 12 ms, I get a measured overall delay of about 26 ms. So for your 22 ms ping I would assume with a good audio interface and good driver, we should get as low as about 36 ms.
So it is ping + 12ms with good hardware. Good to know.
And how would other people influence the delay? Is it set by the slowest participant?
And a metronome option sounds appealing - to get back on track with this thread.
ping + 14 with Volkers numbers.
I get the same using a Native Instruments Komplete 2 audio interface.
Don
Sorry, what I meant.
No, you are only influenced by your own delay. But you have to sync on what comes back from the server. The larger the delay, the more difficult this is.
But if other players have too high latency so they cannot sync with what they hear from the server, they will come late and somewhat influence you (by coming late).
https://www.facebook.com/groups/1618969401583627
Facebook group for choral singers using Jamulus.
The "slow down" (loss of tempo) that you're experiencing is happening to many choral groups that are attempting remote rehearsals. The only recommendation I've seen is to use a click track or metronome and to encourage vocalists to "rush the tempo" a little, basically singing on the front edge of each beat, rather than reacting to what they're hearing from other vocalists (through the Jamulus server). Synchronization will also be better with ballads and slower-tempo songs than with uptunes.
Chris I believe the best solution, rather than a metronome, is for the conductor to tap his baton on a coffee cup near his microphone.
For singers it is not possible to completely avoid local monitoring. It makes having a low overall delay that much more important. Low overall delay comes from a combination of:
1 - low ping time
2 - good audio hardware
3 - properly configured driver
4 - low network jitter
Last edit: punshon 2020-06-14
The problem with this approach is that singers will hear the coductor's pulse with individual delays. That's why there's a need for a globally synced metronome where the timing is managed by the server but the actual click sound is generated in each local client so that the click is played at the exakt same time in everyone's ears, even though the rest of the sound (i.e. the other singers' voices) arent exactly on time. Everyone should concentrate more on that synced click that on the other actual voices to keep in time.
Maybe this solution will do the job http://www.shared-metronome.com/ .
It's a global synced metronome from what I understand.
Last edit: Luuk 2020-06-15
Very interesting, thanks! Will try this one when I have the opportunity.
Unfortunately it turns out it doesn't work - it's not a synced metronome. I opened it in two computers next to each other on the same network, the audio click is completely out of sync.
Volker's advice is worth repeating. The beauty of a low latency system is its ability to allow people to play / sing with each other, not to follow a metronome.
It is quite possible to inject a metronome into Jamulus. Eg. create a click track on Audacity, connect Audacity playback to Jamulus, and you're able to control the start/stop of the track. I found that it CAN be useful for learning a rhythmically tricky passage. However musically it can be quite damaging - leading musicians to listen to a machine and not each other, and if you listen to the results it is very dead compared to real people who will vary tempos and follow each other. For this reason, I would opt not to have an in-built metronome function.
No, you're missing the point.
With voices, it's extremely difficult to not listen to your own voice (as is the general recommendation when playing instruments through Jamulus).
If one person plays/distributes a click for the others to listen to, then everybody will hear this click at slightly different times - depending on what their own latency is. Even though everyone hopefully has a low latency, the click will be heard at slightly different times for each person.
The point of a globally synced metronome is that each participant will hear the click sound at exactly the same time, even though their latencys might be different. It's not a perfect solution, but it is a better solution when singing than listening to only each other's Jamulus "tracks".
The http://www.shared-metronome.com/ link that Luuk posted might be a solution, I haven't had an opportunity to test it yet.
Last edit: Henrik 2020-06-16
Henrik please let us know the results of your test of the shared metronome.
This functionality is IMHO very difficult to implement as the Internet is a stocastic system. You never know how it will react in the future, even in the very short term. I can imagine that if poorly implemented it could be worse than a click track feed.
Don