Learn RNBO Basics

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

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++

Special Topics

Sample Accurate Patching
Scala and Custom Tuning

RNBO and Max for Live

RNBO Raspberry Pi OSCQuery Runner

Raspberry Pi Debug Interface


Raspberry Pi GPIO

Updating the RNBO Package

RNBO Basics

An introduction to using RNBO

Let’s get started with RNBO. We’ll be covering some essential territory that will allow you to get up and running quickly, as well as a number of resources to help you as you dive deeper.

Patching in RNBO (differences from Max/Gen)

If you've used Max before, then patching in RNBO will feel very familiar. RNBO objects are almost all designed after Max objects, so picking up RNBO should be very easy for Max users. The key difference is that you need to work inside a rnbo~ object that is added to a Max patcher. The work flow is very similar to gen~. You create an interface to the RNBO patcher by using special input and output objects for signal, event, and MIDI messages. Use the in~ and out~ objects for audio signals, the in and out objects for events, the param and param~ objects for event input, the inport and outport objects for event input/output, and an assortment of MIDI objects for MIDI input/output.

Audio signal processing in RNBO is vector-based, just like in Max. If you do wish to patch on a per-sample basis, then you can use codebox~ or gen~. Gen is fully functional inside of rnbo~. All you have to do is put a gen~ object in your RNBO patch. You can take filters, delays, reverbs and other audio effects that work inside of gen~ in Max, and use them in RNBO without any changes.

Some RNBO objects are slightly different from their Max counterparts. The zl. family of objects, for example, have been replaced by list. objects. In general, we've tried to stick as close to Max as possible, but we have made some small changes.

RNBO Help Files

Just like Max, every object comes with its own complete help file, often with multiple tabs and examples that allow you to cut & paste the code into your own rnbo~ patch. Along with these, there are reference pages for each object, and a wide assortment of RNBO guides. And as mentioned before, any previously created gen~ patches you have laying around should work inside RNBO without modification.

RNBO Toolbars

The RNBO patcher shares a lot of its interface with Max, but the patcher toolbars do have some new icons unique to RNBO. In the bottom toolbar you should see two arrows in a circle, as well as a little hammer. The "arrows in a circle" icon allows you to enable/disable Auto Compile. Whenever you edit a RNBO patch, the code behind the patch will need to be re-compiled. This usually happens automatically, but for large patches it might be convenient to disable this feature and re-compile your patch only when you click the hammer icon.

To the right of the hammer you'll see the build status. Usually this is blank, but while your patch is building you'll see the status displayed there. If there's an error, you can click on the status to open a window with more details.

The most notable icon in the RNBO patcher is at the bottom of the right toolbar. This is the “Show Export Sidebar” icon and a gateway to a whole range of possible destinations for your RNBO patch. Here you will find all of the Targets that your rnbo code can be sent to, which include JavaScript and C++ code export, Max External export, VST/AU plugin export, and Raspberry Pi export.

Importance of [param] objects

RNBO has dedicated objects for defining parameters called param for events and param~ for signals. These give your RNBO patch named properties that you can set from outside (i.e. from your Max patch). After you export, parameters will be observable and settable from within your export host. For example, they will become audio parameters in the context of a VST or Audio Unit plugin. On the Raspberry Pi, each parameter will have a settable OSC address associated with it.

Presets in RNBO

RNBO objects support snapshots, which save the current state of all parameters. When you export your RNBO patch, many targets will support including snapshots in the form of presets. This allows you to create a number of different preset states that can be recalled in the export host—for example, a VST preset in a DAW host.

Dynamic and Fixed Attributes

RNBO objects support attributes, just like Max objects. However, in RNBO these actually break down into two categories: those that are settable after compilation (such as changing the loop points on groove~), and those that can only be set at instantiation, like the @min and @max attributes of a param object. Settable attributes are called "dynamic attributes", while those that can only be set once at initialization are called "fixed attributes".