Audio Recorder
The Oscilla Audio Recorder allows performers to record short audio contributions directly inside the score, as part of the Contribution Surface. Recording is a score‑native action: audio is authored, contextualised, and stored within the same environment used for notation, navigation, and interaction.
Unlike a standalone recorder, the Audio Recorder is designed for leaving material inside the score — contributions become part of the score’s structure and can be activated using existing audio triggers.
Overview
The Audio Recorder:
- operates entirely inside Oscilla (no external app or booth)
- is only available in pen mode (annotation authoring)
- records short, bounded audio snippets
- stores audio in annotation‑scoped directories
- integrates with existing audio cues (audio, pool, impulse)
- requires explicit consent before recording
- supports optional contributor metadata
- works on desktop and mobile browsers
This design supports selective agency: performers may choose when to enter the sound world, leave material, and withdraw without maintaining continuous control.
Entering the Audio Recorder
1. Enable Pen Mode
Recording is only available while pen mode is active. Pen mode indicates that the user is authoring or modifying the score rather than performing playback.
2. Select or Create an Annotation
- Click an existing annotation to add audio to it, or
- Click empty score space to create a new annotation
The annotation context determines where the recording will be stored.
3. Open the Recorder
In the annotation editor’s trigger configuration section:
[ Upload Audio ] [ Record ]
Click Record to open the recording dialog.
Recording Dialog
The recording dialog is intentionally minimal but fully featured for safe, short‑form recording.
Recording Settings
All settings are arranged on a single compact row:
- Duration — 10s, 20s, 30s, 60s, custom (5–300s), or freewheel (until stop)
- Format — WAV (via JS encoder or native), WebM, OGG, MP4 (browser‑dependent)
- Bit depth — 16‑bit, 24‑bit, or 32‑bit float (WAV only)
- Input channels — auto‑detected from the audio interface; toggle buttons let you select one or more channels
Recording Controls
- Single Record / Stop toggle button
- 5‑second countdown before recording begins
- Large visual timer
- Keyboard support (Esc to cancel)
Input Channel Selection
When a multi‑channel audio interface is detected, numbered toggle buttons appear (e.g. [1] [2] [3] [4]). Select one or more channels to record from. This bypasses the browser's automatic downmix, so each channel is captured at full amplitude.
Input Monitoring
- Live VU meter using time‑domain peak measurement
- Input gain slider (0–200%)
- Peak dB readout with peak‑hold marker
- Visual clip indicator (resets after 2s)
The VU meter is for orientation only and does not affect the recording.
Recording Workflow
Start Recording
- Recording is disabled until consent is given
- On start, microphone permission is requested if needed
- Input monitoring and timer begin immediately
Recording automatically stops when the maximum duration is reached.
Stop Recording
- Recording may be stopped manually or automatically
- The microphone stream is closed immediately
- Input monitoring stops
Preview, Trim, and Normalize
After recording completes:
Waveform Preview
A canvas‑based waveform is displayed, drawn from the raw sample data using the same peak‑extraction algorithm as score waveforms.
Trim Handles
Draggable in/out handles appear on the waveform:
- Drag the left handle to set the start point
- Drag the right handle to set the end point
- Dimmed overlays indicate the excluded regions
- A timecode row shows in time, out time, and trimmed duration
- Minimum trim region is enforced (~0.5% of total duration)
When Use Recording is selected, only the trimmed region is exported. If no trimming was applied, the original recording is used as‑is (no re‑encoding overhead).
Normalize
A Normalize button adjusts the recording level:
- Default target: −6 dBFS
- Click to apply gain so the loudest peak matches the target
- Target level is shown (adjustable)
- Silent recordings are left unchanged
Playback
- Play previews only the trimmed region
- Playback includes a cursor that sweeps across the waveform
- VU meter remains active during preview
Re‑Record
- Click Record Again to discard and start over
- Only one recording is kept at a time
Metadata
At the top of the dialog, contributors provide:
- Your name — defaults to the client name if set; optional (defaults to "Anonymous")
- Filename — a short descriptive name for the recording
Metadata is stored alongside the contribution and may be used for attribution in documentation or performances.
Directory Selection
Each recording is saved into a directory that represents a contribution context.
Default Behaviour
- When editing an existing annotation, the recorder defaults to that annotation’s directory
- When creating a new annotation, a new directory is suggested automatically
Choosing a Directory
The dialog allows you to:
- Use the default annotation directory
- Select an existing contribution directory
- Create a new custom directory
Custom directory names are restricted to letters, numbers, and hyphens.
Examples
audio/
contributions/
4f2qk8ab/
voice_01.wav
9m8l2xyz/
anon_345678.webm
Directory names use the first 8 characters of the audio object ID. Filenames use author name plus a short timestamp (last 6 digits). Directories represent places in the score where material accumulates.
Consent and Licensing
Required Consent
Before recording or uploading audio, contributors must explicitly confirm:
I consent to my contribution being used by the artist in performances, installations, documentation, and future works related to this project.
- Consent is mandatory
- Recording controls remain disabled until consent is given
- Consent state is stored with the contribution
Licensing Model
- Contributions are not automatically public
- No Creative Commons licence is applied by default
- This conservative model allows artist use while protecting contributors from unintended reuse
Optional Creative Commons licensing may be offered in future versions as an opt‑in choice.
Saving and Uploading
When Use Recording is selected:
- If trimmed, the selected region is re‑encoded as WAV from the raw sample data
- The audio file is uploaded to the server
- WAV files are automatically transcoded to FLAC on the server (if ffmpeg is available)
- The destination directory is created if necessary
- The annotation's audio source field is updated automatically
- Filename conflicts are handled with auto‑increment (
name_2.flac,name_3.flac, etc.)
Once saved, recorded audio behaves exactly like uploaded audio files.
Integration with Audio Cues
Recorded audio can be used with all existing audio mechanisms:
- playhead‑triggered audio
- audio pools and stochastic fields
- impulse and transient cues
- OSC‑controlled playback
No special trigger types are introduced for recorded audio.
Mobile Support
The Audio Recorder is designed for phones and tablets:
- Large touch targets
- No file pickers required for recording
- Familiar microphone permission flow
- Short, bounded recordings
This makes it suitable for workshops, installations, and ad‑hoc participation.
What the Audio Recorder Is Not
The Audio Recorder is not:
- a DAW or audio editor
- a multitrack recorder
- a background capture system
- a publishing or sample‑sharing platform
- a separate application
It exists solely to support leaving sonic material inside the score.
Technical Details
Audio Capture
Recording uses either AudioWorklet (preferred) or ScriptProcessorNode (fallback) to capture raw Float32 samples from the Web Audio graph. For WAV format, a JavaScript encoder writes RIFF/WAV headers and interleaved sample data directly — no MediaRecorder dependency.
Channel Routing
On multi‑channel interfaces, a ChannelSplitterNode extracts the selected channels and a ChannelMergerNode recombines them. This avoids the browser's default N‑channel downmix (which divides amplitude by N).
Waveform Rendering
The preview waveform uses extractPeaks() from the shared waveform.js module, rendered onto an HTML canvas (the recording modal is DOM, not SVG).
Related Code
audioRecorder.js— recording UI, VU meter, trim, normalize, uploadwaveform.js— peak extraction algorithm (shared with score waveforms)audioBrowser.js— file manager for browsing, uploading, and managing audio filesserver.js— audio upload, FLAC transcoding, trash, restore, move endpoints
Summary
The Oscilla Audio Recorder extends the Contribution Surface with a safe, minimal, score‑native way to record and leave sound. It combines live input monitoring, multi‑channel support, waveform preview with trimming and normalization, annotation‑scoped storage, and optional metadata to support collective music‑making practices grounded in care, agency, and shared musical space.
Tip: use ← → or ↑ ↓ to navigate the docs