maxton.xyz (because maxton.net was taken)

Back to Blog

Real-time Online Jamming with Jamulus & REAPER

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.

jamulus client interface
This is Jamulus's interface. It looks a lot like a mixing console. You can jam with people from around the world!

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.

REAPER installer dialog showing that ReaRoute ASIO Driver is selected
Make sure you select "ReaRoute ASIO Driver" when installing REAPER, as this is required to allow REAPER to act as an ASIO device for Jamulus.

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.

REAPER audio device settings dialog
Your configuration should look something like this. The key thing is that you either request 48000 Hz sample rate here or configure it in the ASIO Configuration for your device. Make sure that the inputs and outputs you want are included in the input/output ranges, if your device has multiple inputs and outputs.

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.

Set the input of the first track to ReaRoute1/ReaRoute2
Set the input to your first track to be ReaRoute 1 / ReaRoute 2.
This means that the audio from Jamulus will be the input to this track.
Click on the record icon and the gray speaker icon to enable input monitoring.

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.

Set the input of the first track to ReaRoute1/ReaRoute2
Configure your input track routing like this. If you don't want to hear your audio input, then make sure the "Master send" checkbox in the upper left is unchecked. This makes it so your input audio doesn't go directly to your interface's output (i.e., your speakers or headphones).
Mixer panel after configuring everything
After configuring everything your mixer should look something like this. You should see the input meter move when you make a sound. If you left "Master send" checked in your input routing, then you will also hear your sounds coming back through your interface and see the Master meter moving on the left.

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.

my REAPER setup
This is my setup, I have a number of audio inputs and VST instruments that I can control using MIDI.

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.

Jamulus settings dialog showing ReaRoute ASIO selected

Sorry, there is no way to comment directly on my blog posts.
But feel free to contact me if you have questions or comments!