Live

Without Oscilla, and in rooms

Oscilla Live also runs on a page of its own, live.html: the console on an empty stage, with no project and no Oscilla server. Every cue a set uses works there (sound, shapes, gui, text, MIDI), served from any web host.

The stage is dark: Oscilla's dark mode, the page turned to its negative, with the code, shapes, sound boxes, words, pictures and film turned back to their own colours. light (the sun / moon icon, top right) switches it, remembered in this browser. The keyboard icon beside it shows the keys over the code (as Ctrl+Shift+H does). The icons in that corner stay there while pinned (the pin at the end of the row, pinned at first); unpinned, they are out of sight until the pointer comes to the corner.

It opens on a landing: Start for the console alone, Random example for one of the examples, playing, the Examples by name, Join for a room, and a short What is it?. Over a session, example (the shuffle icon, top right) clears the stage and plays another, and the list icon beside it lists them all by name, to pick one. Each example opens as a session of its own -- fetched as it is now, so a changed example comes new -- and what you change in it is yours. The examples are short pieces in public/live-examples/ (listed in its index.json): a few lines each, with no files, so they play on any host. On Oscilla's server it is at /live. Reloading in the middle of a set goes straight back to the console (and its room); coming to /live again shows the landing.

The page

From a checkout, any static server will do:

cd public && python3 -m http.server 8080
# then open http://localhost:8080/live.html

Or build it into one folder, minified, ready to put on a host:

npm run build:live          # writes dist/live/

On Oscilla's server, Live has a folder of its own for media, among your projects (_live; the landing shows where): images/, audio/, video/, text/. What goes there is found by name, as in a project -- image(path:plates), audio(src:kick.wav) -- and the stash is kept there too. On a static host, give URLs.

On a static host, what needs Oscilla's server is not there: Live's folder, the stash, say(). The score's own cues (page(), nav(), play(), zoom() ...) are the score's, on any host.

Every set is a session with an address of its own, live.html#s=k3f9q2ab: its code is kept in this browser, so the address brings it back -- bookmark it, or find it on the landing under Continue, newest first. Start makes a new one.

share (the link icon, top right, beside room) copies a link with the code itself in it, compressed: live.html#code=…. Whoever opens it gets that code as a session of their own, on any machine, without a server; what they change is theirs, and the link stays as it was.

Rooms

Performers in a room see each other's code (each has their own buffer; the others' show as read-only tabs), chat, and count the same beats, so quant: lands together on every machine. A room is reached through a relay, and Oscilla's server is one: on the live.html it serves, room in the top right corner joins a room there.

https://localhost:8001/live.html?room=jam

On any other host, run a relay of its own and say where it is:

node server/liveRelay.js --port 8090
live.html?room=jam&relay=ws://localhost:8090

The first to join makes the room with the password they give; the others need the same password. The room is gone when the last one leaves. The password is never put in the address: it is typed, and kept for that tab, so a reload in the middle of a set joins again without asking. Without relay=, the page looks for one on its own host at /live-relay.

Over https

Serve it over https (./start-ssl.sh, with a certificate in certs/; see certs/README.md). On a plain http:// page anywhere but localhost, the browser leaves out what a set needs: fuzz: and sub: play clean (they run in the audio engine, which the browser keeps for secure pages), and MIDI is not offered. A self-signed certificate has to be accepted once in each browser.

A room carries the console's text and nothing else: what runs in your browser is the cue language, never a program sent by someone else.

On Oscilla's own server, the people on a project are a room already: the console shares buffers there in the same way, without a relay.

Tip: use ← → or ↑ ↓ to navigate the docs