A group of round
singers were interested in trying out the
bucket brigade singing program, and
I realized that with a small tweak it could support rounds directly.
We just needed to write audio both at the place it belonged to, and an
appropriate distance into the future. This would let everyone hear
everyone else, though the leader still has to wait a bit before they
start to hear others.
The system already needs to know BPM (beats per minute) so it can run
a metronome, but the support around it also needs to know BPR (beats
per repeat). For example, "Row, Row, Row, Your Boat" is a 16 beat
round with participants entering every four beats, so you would
probably set BPR to be 16. Four (or more) people could sing, with one
person leading and each other person joining after the right number of
beats as if they were singing together in person. Once everyone has
been singing for 16 beats they all hear everyone else, and also
themself.
You can get interesting effects by setting the BPR to some other
multiple of the part interval, such as 12. This lets you sing along
with yourself an offset, so that you appear to be one of the other
singing voices.
It's also possible to configure the system with multiple repeats, so
you would hear each iteration of your voice, say, three times. This
can be fun if you have a small group of people and want to sing many
parts, or even if you're playing around by yourself.
One thing this made me realize is that the latency calibration is
really very important, and the previous way we were handling it was
not sufficient. Originally, it started off trying to get a very
accurate estimation of your latency, but if it wasn't doing very well
it would slowly lower its standards. After about 30 seconds, it would
let in people even with pretty inaccurate estimates. I've updated it
now to be very careful, and if it can't estimate your latency to
within 2 ms, it lets you know and gives you the choice between trying
again, and joining without sending any of your audio to the server.
A group of round singers were interested in trying out the bucket brigade singing program, and I realized that with a small tweak it could support rounds directly. We just needed to write audio both at the place it belonged to, and an appropriate distance into the future. This would let everyone hear everyone else, though the leader still has to wait a bit before they start to hear others.
The system already needs to know BPM (beats per minute) so it can run a metronome, but the support around it also needs to know BPR (beats per repeat). For example, "Row, Row, Row, Your Boat" is a 16 beat round with participants entering every four beats, so you would probably set BPR to be 16. Four (or more) people could sing, with one person leading and each other person joining after the right number of beats as if they were singing together in person. Once everyone has been singing for 16 beats they all hear everyone else, and also themself.
You can get interesting effects by setting the BPR to some other multiple of the part interval, such as 12. This lets you sing along with yourself an offset, so that you appear to be one of the other singing voices.
It's also possible to configure the system with multiple repeats, so you would hear each iteration of your voice, say, three times. This can be fun if you have a small group of people and want to sing many parts, or even if you're playing around by yourself.
One thing this made me realize is that the latency calibration is really very important, and the previous way we were handling it was not sufficient. Originally, it started off trying to get a very accurate estimation of your latency, but if it wasn't doing very well it would slowly lower its standards. After about 30 seconds, it would let in people even with pretty inaccurate estimates. I've updated it now to be very careful, and if it can't estimate your latency to within 2 ms, it lets you know and gives you the choice between trying again, and joining without sending any of your audio to the server.
Feel free to play with it: echo.jefftk.com.
Comment via: facebook