With the COVID-19 pandemic in full swing, more and more people are practicing social distancing and staying at home. Unfortunately for musicians, this means no getting together for a rehearsal or jam session. Forunately, the open-source community already has a solution: online jam software.
Online jamming is nothing new. NINJAM's loop-based jam software has been around for nearly 15 years. At the time of its inception, the quality of internet streaming and real-time audio codecs was not nearly as good as it is today. It cleverly got around the variable latency of the internet and the unavoidable Ogg Vorbis codec latency by forgoing the real-time aspect most people associate with jam sessions, instead setting a fixed size "interval" and having everyone in the session always play to the previous interval.
But what if you want to jam in real time, as though you were in the same room as everyone else? Well, Volker Fischer's Jamulus software fills that niche nicely. Originally created in 2006, Jamulus utilized low-latency audio codecs to provide latencies that depended only on your internet connection. Originally using ADPCM, Jamulus has pivoted to CELT and finally to Opus to deliver very high quality audio with low latency and low bandwidth.
While it is easy to install and run Jamulus, I've encountered a lot of people who had difficulty setting it up to work properly with their audio interface. Some folks couldn't hear the audio output from the server, others couldn't get their input to be heard by others, and still others were managing to feed back the output into the input, causing bad echoes. So I thought I would share the setup I use on Windows using REAPER as a software mixer.
REAPER comes with a special virtual audio device called ReaRoute that allows it to send and receive audio via ASIO. What this means is that you can use REAPER to adjust audio levels, add effects, mix multiple inputs, and more, giving you a lot more flexibility than you'd normally have with Jamulus.
Set Up (Windows)
1. Install Jamulus
Download and install Jamulus from here: https://sourceforge.net/projects/llcon/
2. Set up your audio interface
You will need to install an ASIO driver to get low latency audio to and from your audio device. Most pro audio devices, and even many consumer ones, will come with ASIO drivers or provide them on the manufacturer's website. If your audio interface didn't come with an ASIO driver, or if you don't have a separate audio interface and want to use your computer's built-in audio, chances are ASIO4ALL will enable ASIO for you. For the rest of this guide. I will assume you have an ASIO audio interface set up.
3. Install REAPER
REAPER is a DAW (digital audio workstation). It costs $60 for a personal license, but
you can use it for free with the shareware license. I strongly recommend purchasing REAPER,
it is probably the most value I've ever gotten from a software purchase.
Update: It turns out that in light of the COVID-19 situation, Cockos is offering a free temporary license.
4. Configure your audio device in REAPER
Open up REAPER, and go to the Audio device settings by clicking in the upper-right corner below the "X" button, or by going to Options → Preferences → Audio → Device. Make sure you are using the ASIO audio system, that you have at least 1 input enabled, and that the sample rate is set to 48000 – Jamulus seems to require 48000 Hz sample rate.
5. Set up your REAPER project
Double click in the blank space of the REAPER mixer to add two new tracks. The first track will be the output from Jamulus, and the second track will be your input into Jamulus. Note that you may have to increase the size of the mixer to see all the dropdown menus. If the mixer is not visible then click View → Mixer.
For your input track, you should do the same, but choose the input(s) from your audio interface instead of the ReaRoute input. Then click on the Route button for your input track. Click "Add new hardware output..." and select ReaRoute 1 / ReaRoute 2. This tells REAPER to send the audio from this track to Jamulus.
From here, you can save your project somewhere so that you don't have to do all this set up next time. You can add more tracks and make them children of the input track to get more inputs into Jamulus. Check out the REAPER user guide for an in-depth look at what's possible with REAPER.
6. Jam On!
Open Jamulus, go to settings, and choose ReaRoute ASIO as your device. Connect to a server. Play some music. You should hear it echoed back to your output track in REAPER.