Web embedded max patch capabilities

damu's icon

Firstly i'd like to congratulate the Cycling team on the fantastic achievement of releasing RNBO. My mind is abuzz with possibilities.

I'd like to ask whether a couple of possibilities are feasible with this new technology.
I like the idea of being able to clock sync and share audio and control signals between multiple devices accessing a patch via a web browser. This might allow layman users who are new to Max to collaborate on pieces of music using user-friendly instruments on separate laptops.
This could be done in Max using link and UDPSend/Receive. Is there any way this could be facilitated for users who don't have Max/Ableton/Link and are just accessing online patches using a browser? The idea being to make it as simple for the end-user as possible.

Apologies if i'm jumping straight in with an idea which is outside the scope of the software, I can just think of so many opportunies to use this as a teaching tool, or to make electronic music-making and jamming more accessible for the less technically inclined.
Thank you for any guidance you can offer.

Florian Demmer's icon

Hi Damu,

as of now RNBO does not offer this sort of network or peer to peer communication out of the box. However, you can use the web export patch for the audio part of your application and then add a layer of code in your web application that enables this and synchronizes events across multiple instances.


If you are looking for some first pointers some technologies that can be used to achieve this include WebSockets, real-time databases like Firebase or also WebRTC.


The [rnbo.remote] object is a Max Object that allows you to connect to an instance of a running instance of the OSCQuery runner. One use-case here would be that once you exported your patch to a Raspberry Pi you can set and receive information of the patch running on the Raspberry Pi within Max.


damu's icon

Thank you so much for your reply. I believe I will have a look into this :)

Andrew Benson's icon

You can use inport/outport objects in RNBO to define arbitrary messages to and from the RNBO exported code, which are easy to access using the RNBO API from Javascript. You could, for example, create a "sync" inport in your RNBO patch that receives a timing value from a master clock in your code, as shown here: https://rnbo.cycling74.com/learn/sending-and-receiving-messages-inlets-outlets