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:

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

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:

Recording Controls

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

The VU meter is for orientation only and does not affect the recording.


Recording Workflow

Start Recording

Recording automatically stops when the maximum duration is reached.

Stop Recording


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:

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:

Playback

Re‑Record


Metadata

At the top of the dialog, contributors provide:

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

Choosing a Directory

The dialog allows you to:

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.

Licensing Model

Optional Creative Commons licensing may be offered in future versions as an opt‑in choice.


Saving and Uploading

When Use Recording is selected:

  1. If trimmed, the selected region is re‑encoded as WAV from the raw sample data
  2. The audio file is uploaded to the server
  3. WAV files are automatically transcoded to FLAC on the server (if ffmpeg is available)
  4. The destination directory is created if necessary
  5. The annotation's audio source field is updated automatically
  6. 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:

No special trigger types are introduced for recorded audio.


Mobile Support

The Audio Recorder is designed for phones and tablets:

This makes it suitable for workshops, installations, and ad‑hoc participation.


What the Audio Recorder Is Not

The Audio Recorder is not:

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


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