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.
Sessions, and links to share
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