Using Abstractions

How to create and save RNBO abstractions.

Just like Max and Gen, RNBO supports abstractions. These are reusable RNBO patches, saved in the .rnbopat format. When you change the original abstraction file, any patchers containing an instance of that abstraction will be updated as well. This allows you to build up a library of abstractions, both to fit your own particular workflow, and to share with other RNBO users.

Creating an Abstraction

To create a RNBO abstraction, focus on the window containing the RNBO patcher that you want to turn into an abstraction. Then, press Command-Shift-s (or Control-Shift-s on Windows), or select "Save As..." from the file menu. This should bring up a save dialog for the RNBO patcher itself. If you see the .rnbopat extension on the default file name, then everything is working as expected.

saving-an-abstraction.png

Using an Abstraction

Using abstractions is slightly different depending on whether you're creating a rnbo~ object in a Max patch, or creating a subpatcher in RNBO itself. In a Max patcher, a rnbo~ object will bind to an abstraction if the first argument matches the filename of the abstraction, minus the .rnbopat extension.

using-an-abstraction.png

To use an abstraction inside of RNBO, use the p object with the @file attribute. For example, an object like [p @file my_abstraction] will load the file "my_abstraction.rnbopat" as an abstraction.

In order for a Max patch or RNBO patch to use an abstraction, the abstraction file must be in Max's search path. The usual rules for the search path apply. See the Max Search Path documentation for details.

Abstraction Arguments

When using an abstraction inside of RNBO with the p object, you can supply arguments to the abstraction with the @args attribute. These arguments will replace placeholders in the abstraction that use "#n" syntax. For example, if you create an abstraction with box text [p @file my_abstraction @args 440 10], then any instance of "#1" in the abstraction will be replaced with "440," and any instance of "#2" will be replaced with "10."

abstraction-arguments.png

There are some limits to what you can do with this technique. For example, you can't dynamically set the class of an object this way (of course, you couldn't do this in Max either). But object arguments and attribute values will work.

This website uses cookies
Clicking "Accept" means you consent to your data being processed and you'll let us use cookies and other technologies to process your personal information to personalize and enhance your experience. Click "Close" to deny consent and continue with technically required cookies that are essential for the website to function.