Like many of you, one of the things I've missed during the pandemic and lockdown was the chance to get together with friends and make some noise. There aren't a lot of tools out there if you're interested in low-latency network jamming, so it's a topic of conversation that I often find myself in the midst of, and one of those places where folks are on the lookout for new options. One of those newer options out there came to my attention — the work of Miller Puckette, who requires no introduction. I figure that anything Miller turned his attention to deserved a looksee, so I checked out a presentation by Miller for Brad Garton's sound seminar at Columbia University. Owing to the lockdown, the Zoom presentation was recorded, so you can check it out, too.
Damon Holzborn was involved in the presentation, too. You probably know of his work on George Lewis' Voyager project. (I interviewed George and Damon together on the software and its life as a Max patch. You might find it interesting.) And Damon was involved in creating a Max-centered version of the project, so I figured he'd be the perfect person to ask about the project.... I was complaining to someone recently about the fact that I miss being able to play across the 'net with friends and bandmates while we're all locked down (the last thing anyone in the world wants to see me doing is bobbing my head and appearing to read email as an online performance), and my friend said, "Man. You have to check out this..." Um... is it Quack strip?
Quaxtrip is a set of Max patches that makes low-latency uncompressed audio and messaging interconnections over the internet, intended for musicians wishing to play together remotely. Quaxtrip runs Miller Puckette’s Quacktrip Pure Data patch within Max.
Quacktrip, in turn, is an implementation, in Pure Data, of Chris Chafe’s JackTrip network protocol, based on jacktrip.pd by Roman Haefeli and Johannes Schuett. It establishes a low-latency, point-to-point connection between two sites, with no audio compression.
Quaxtrip allows up to four of these connections, allowing an ensemble of up to five players at once. In addition to audio signals, you can send messages (e.g. OSC) to the ensemble as well.
If you’re familiar with Quacktrip for Pd, Quaxtrip works more or less the same, just with a Max coat of paint and a few extras. In fact, since it’s actually running Quacktrip (though hidden in the background) through the pd~ object, it’s even compatible, so you can have one peer running Quacktrip in Pd that is streaming to/from another peer running Quaxtrip in Max.
Quacktrip/Quaxtrip simplifies the process of streaming in a couple of ways.
- It reduces the software stack to one app, so you don’t have to configure command line tools or manage routing between applications.
- The connection process is streamlined too. It uses a server, called the “conniption” server, to connect players, bypassing the need to set up port forwarding on your router or exchanging each player’s IP addresses. Once connected, however, the audio streams are connected directly peer-to-peer, not routed through the server.
Is it intended for situations where I'm playing with one other person, or can I reconvene PGT (my two laptop/mandolin trio) with this?
Theoretically, there’s no limit to the number of players who can connect through Quacktrip/Quaxtrip, but due to bandwidth limitations, particularly upload speeds, the practical number of players is a smallish, finite, number. In Quaxtrip, I decided that 5 players max was a good compromise that should work for most people who have a decent internet connection. Much more than that I felt too many people were likely to run into problems. However, if you’d like to experiment with a larger ensemble, modifying Quaxtrip to add more channels is just a matter of duplicating the remote channel bpatcher and changing incrementing its channel number in the arguments.
Those wishing to play with larger ensembles should check out Miller Puckette’s related projects Netty McNetface and Music 101. I don’t currently have plans to port those apps to Max, but I may look into it at some point.
Whoa. This sounds pretty cool. Where do I download the Max stuff?
The best place to go is my post over at the lines forum. There I give the rundown of the requirements and provide download links. If you have any questions or comments about the project, that would be the best place to leave them.
Quaxtrip is an open source project (MIT license) that lives at GitHub. If you’d prefer, you could just go straight to the repository and download or clone it from there.
Do I need to install anything else to do this? I need to install Pd on the machine I want to work on, right?
Once you’ve downloaded Quaxtrip, the manual includes step-by-step installation instructions. In short, in addition to Max, you’ll need to install Pd and PdMax (that’s the pd~ object that lets you run Pd patches from within Max). The first time that Quaxtrip runs you’ll be presented with a dialog box instructing you to locate the Pd app so the patch knows where to find it, but after Pd is located Quaxtrip will remember.
Does it require any driver stuff or other exotic software?
What kinds of challenges did you face doing the Max version?
Since Miller Puckette has done all the heavy lifting with his Quacktrip patch, it was a pretty smooth process. I did have to modify the Quacktrip Pd patch a bit to make a version I could integrate with Max, and since I don’t really know Pd, that took a bit of fumbling around. But other than that, it was largely a fairly straightforward design task. Since I wanted to add some features to make it easy for people to integrate existing Max patches with Quaxtrip, my primary challenge was to try to imagine the ways people would want to hook into it.
Don't get me wrong. I'm pretty interested here... I'm just nervous. Once I have the right stuff installed, can you walk me through what setting up a session with someone else looks like?
Again, my post on the lines forum will walk you through that you need and how to do the initial setup, After that, the process of initiating a Quaxtrip session is quite simple. It’s just a matter of launching the patch, entering the “Call Name” used to connect peers, and toggling the session on. If you’re connecting to more than one peer, then you’ll do that for each person. Depending on your network performance, you may have to experiment with a few other settings, but that’s it.
It sounds like my friends who rave about it really don't feel a lot of latency when they perform together. Is it really that tight? I've tried lots of other stuff, but that other stuff just feels well... spongy. How is Quaxtrip different?
This will depend a lot on the distance between two performers. If you’re playing with someone across town, or across the state, you should experience latency low enough to perform in rhythmic synchrony. Latency will add with distance so as the distance increases the likelihood that this will be possible decreases. Of course, for music that doesn’t require such tight adherence to a pulse, even quite distant partners should experience latency low enough for a satisfying experience.
What’s in store for future versions of Quaxtrip?
The first major addition to Quaxtrip since it first launched, which will be available by the time this is published, is an input mixer. Rather than use a hardware mixer to get my hardware synth setup into the computer, I tend to go directly into my multi-channel audio interface and do the mixing in software. Since Quaxtrip’s release I’ve developed an evolving set of patches to manage my personal integration with Quaxtrip. Figuring that there are likely others who work the same way, I decided to build this functionality into Quaxtrip. When you launch the mixer, you can combine up to eight stereo or mono channels to send to your remote peers as a mono or stereo mix. For those who just have a single (mono or stereo) signal to send, the patch remains unchanged.
There will be a stream of new features rolling out over the coming weeks and months. The next tool that will be added is a recording feature that will enable each performer to record their local signal with a start time synchronized with their partners. This means that each person can have a clean recording of their own performance to be mixed with the other’s in post, free from any connection glitches that might have popped up during the performance.
Next will be a more robust text chat. Quaxtrip already includes a chat feature but it currently is quite rudimentary and is little more than a demo of how to send messages for those who want to use the message sending feature in their own patches. And finally, I’ve been experimenting with sharing clock signals. It’s still a bit experimental, but I hope later to release a system to give an ensemble access to shared timing systems.
The ability to collaborate despite distance has been vital to my creative life this past year. After spending so much time working remotely with others, I realized that a habit of working with distant partners is something that will be valuable long after things return to normal. This forced isolation has shown me that physical distance doesn’t have to be an impediment to working closely together. With so many friends scattered about the globe, it’s really a lost opportunity to limit who I work with based solely on proximity.