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.
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.
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.
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.
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.
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.
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
@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".