Learn Why We Made RNBO

Getting Started

Welcome to RNBO


RNBO Basics

Key Differences

Why We Made RNBO


Audio IO

Messages to rnbo~

Using Parameters


Messages and Ports

Polyphony and Voice Control

Audio Files in RNBO

Using Buffers

Using the FFT

Export Targets

Export Targets Overview

Max External Target
Raspberry Pi Target
The Web Export Target
The C++ Source Code Target

Code Export

Working with JavaScript
Working with C++

Why We Made RNBO

Max is really good at designing how different data streams come together.

Max is really good at designing how different data streams come together. When you do something like map mouse movement to the pitch of an oscillator, you're making a creative choice about how two different streams of data should influence each other. RNBO takes that particular strength—designing the interaction between data streams—and helps you bring it outside of Max.

RNBO takes a graph representation of mixed event-and-signal processing and turns it into portable code. In addition, it can directly compile that code to a VST, a Max External, or a Raspberry Pi instrument.

What it is, What it's not

When we're describing RNBO above, you'll notice that we're careful to de-emphasize Max. Rather than saying "it turns Max patches into code," we say "it generates code from a graph representation." That's on purpose. Similar to Gen, RNBO is its own language. Also like Gen, RNBO is heavily inspired by Max. Not only does it borrow the fundamental Max paradigm—objects with multiple ports connected by patch cords—it also implements RNBO versions of many Max objects. As a result, the learning curve from Max to RNBO should be very gentle. If you know Max, you basically know RNBO already. In many cases, it's possible to copy a group of objects from Max and paste them into RNBO, all without changing their behavior.

Screen Shot 2022-10-15 at 10.53.13 AM.png

On the left, A Max patch. On the right, a RNBO patch. Very similar.

When you're editing a RNBO patcher in Max, you're actually using Max as an interface to manipulate the graph description of a RNBO patcher directly. When you run a RNBO patch in Max, what you're hearing is the same code as will ultimately be running on your chosen export platform.

What you can do with RNBO

One of the first things you might want to do with RNBO is export your patch as an audio plugin. This lets you take your custom audio process and run it in any number of DAWs, including Logic, and Cubase. This is probably the most immediate and direct way to experience what RNBO offers: being able to design an effect in Max and then take it somewhere else. The audio plugin template lets you build a Unity plugin as well, so you could run your custom audio process inside a Unity game.

Another fun thing to try is building a Max external. This lets you share work built in RNBO with other Max users, without requiring them to download the RNBO package. Max externals built with RNBO are also generally more efficient than the equivalent patch built in Max without RNBO, especially when it comes to polyphony. If you re-write a polyphonic Max for Live device as a Max external, it will load faster and use less CPU at runtime. Finally, a compiled Max external does not reveal its source. If you're secretive about your sound processing IP, building a Max external is a good way to keep it hidden.

If you want to get away from your keyboad and your screen, you might be interested in the Raspberry Pi export. When you send your patch to a Raspberry Pi, you've already built a fully functional MIDI instrument. The Pi will receive MIDI over USB and synthesize sound according to your RNBO patch design. If you're comfortable writing simple Python and JavaScript programs (or if you're willing to learn), then there's almost no limit to what you can do with RNBO on a Raspberry Pi. You could make an art installation with dynamic sound. You could build an instrument that you play with a custom sensor array. Or you could even design your own guitar pedal.

Lastly, RNBO will also export plain C++ and JavaScript code. From here, with a little bit of work, there's really no limit to what you can do. Web export lets you add real time sound synthesis to web applications. If you're interested, we've provided a Webpage template project that you can use to get started. On the C++ side of things, one thing you can do is go much deeper into audio plugin development. If you're willing to write a little code, you can design an audio plugin with a custom user interface, as well as other custom functionality. To help with this, we have a C++ template project that discusses building a C++ application from scratch. With this, you really could do anything. You could even re-build Max, from scratch, if you really wanted.