Clients
Overview
Oscilla is a networked score system. Multiple performers connect to the same server and share a synchronized view of the score, playhead position, and interactive elements. Each connected device is a client.
The client system provides:
- visual identification of connected performers
- per-client colors for markers and annotations
- editable display names
- targeted triggering for shared audio objects
Client Indicators
The client list appears in the top-left corner of the interface. Each connected client is represented by a colored square.
| Visual element | Meaning |
|---|---|
| Colored square | A connected client |
| White border | Your own client (local) |
| Green checkmark | Selected for targeted triggers |
Hover over any indicator to see the client's display name in a tooltip.
Editing Your Identity
Double-click your own client indicator (the one with the white border) to open the client editor:
- Name -- set a display name visible to all performers (e.g., "violin 1", "conductor", "electronics")
- Color -- choose from presets or pick a custom color
Your identity persists across browser sessions. Other performers see your name in tooltips and your color on shared markers and annotations.
Setting your performer name
If audio objects are targeted to specific client names, set your name to match:
- Double-click your client indicator
- Enter your performer name (e.g., "violin" to receive audio targeted to "violin")
- Click Save
If your name ends with * (the default for new clients), you'll hear all audio regardless of targeting.
Client Colors
Each client is assigned a unique color from a predefined palette. This color is used for:
- The client indicator square
- Markers dropped by that client (by default)
- Attribution of shared annotations
Colors help identify at a glance who created which markers or annotations. You can change your color in the client editor, and individual markers can override their color in the marker editor.
Targeted Audio Triggers
When audio objects are set to shared scope, triggering them normally broadcasts to all connected clients. The client indicator system allows you to target specific clients instead.
Selecting targets
- Click any client indicator to toggle its selection
- Selected clients show a green checkmark overlay
- Multiple clients can be selected simultaneously
- Click a selected client again to deselect
Triggering to targets
With clients selected:
- Single click a shared audio object -- the trigger is sent only to selected clients
- Double click to stop -- the stop command is also sent only to selected clients
- Randomised parameters (file selection, pan, pitch) are computed once and sent to all targets
Clearing selection
Click all selected clients to deselect them, or simply leave them selected for subsequent triggers. When no clients are selected, triggers revert to broadcasting to everyone.
Use cases
- Conductor control -- one performer directs audio cues to specific ensemble members
- Sectional triggers -- send a texture to strings only, or percussion only
- Call and response -- trigger audio on one client, then another
- Spatial distribution -- assign different audio to performers in different locations
Persistent Playback Targeting
Audio objects can be configured to always play on specific clients, regardless of runtime selection. This is set via the Playback dropdown in the audio object editor.
Saved client names
To target clients that aren't currently connected (e.g., when editing alone at home), add client names to your project:
- Open Settings (gear icon)
- Go to the Clients tab
- Type a client name and click Add
- Repeat for all performer names you need
- Click Save
These names appear in the Playback dropdown even when those clients aren't connected. Connected clients show with a solid color; saved-only names show with a dashed border and "saved" label.
Setting targets
- Open an audio object editor
- Find the Playback dropdown
- Select one or more client names (connected or saved)
- Save the audio object
The targeting is stored with the audio object and persists across server restarts.
DSL syntax
In the generated DSL, targeting appears as:
synth(..., playback:["violin", "cello"])
audio(..., playback:[conductor])
Client names with spaces must be quoted.
Workflow for distributed performance
- At home: Add performer names in Settings → Clients (e.g., "violin", "cello", "piano")
- At home: Create audio objects targeting those names
- At rehearsal: Musicians double-click their client indicator and set their name to match
- Playback routes automatically -- each device only plays its targeted audio
Hear All Mode
For testing and rehearsal, you may want to hear all audio on a single device regardless of targeting.
Default for new clients
New clients automatically start in "hear all" mode with a name like guest-ab12-*. This means:
- Reviewers can open the score and immediately hear everything
- Performers change their name to their specific role before the performance
To switch from review mode to performer mode, double-click your client indicator and change the name (removing the * suffix).
Enabling hear all mode
Set your client name to end with *:
guest-ab12-*-- default for new clientsrob-*-- descriptive name that still hears allconductor-*-- conductor can monitor all parts
How it works
When your client name ends with *, all playback targeting is bypassed:
- Audio objects with
playbackClientsset still play - DSL cues with
playback:[...]still play
This lets you test the full mix without changing audio object configurations.
Synchronization
Clients automatically synchronize:
- Playhead position and playback state
- Shared markers and annotations
- Shared audio objects and their triggers
- Drawing strokes (when shared)
- Timer states
Each client maintains its own local state for:
- Local markers and annotations
- View position and zoom level
- Part/layer visibility settings
- Preferences
Network Sync Toggle
The network sync toggle in the top bar controls how your client participates in synchronization. Click the toggle to cycle through three states:
| State | Icon | Transport | Triggers | Use case |
|---|---|---|---|---|
| Full Sync | chain link | send + receive | send + receive | Normal ensemble operation |
| Transport Muted | muted speaker | receive only | send + receive | Prevent accidental navigation changes affecting others |
| Disabled | blocked | none | none | Work independently |
Transport Muted mode is useful when:
- You want to follow the ensemble's playhead position
- But don't want your play/pause/seek actions to broadcast to others
- Audio triggers (start/stop shared sounds) still sync normally
This allows a performer to scrub around their own view without disrupting the conductor's timeline, while still participating in shared audio cues.
The sync state persists across browser sessions.
Connection Status
The client list updates in real-time as performers connect and disconnect. When a client disconnects, their indicator disappears from the list, but their shared markers and annotations remain on the score.
Relationship to Other Session Features
The client system integrates with:
- Markers -- new markers inherit your client color by default
- Audio Objects -- targeted triggering via client selection
- Annotations -- shared annotations are attributed to clients
- Drawing -- shared strokes are colored by client
The client identity provides a consistent visual thread across all shared interaction features.
Tip: use ← → or ↑ ↓ to navigate the docs