Skip to main content
MasterSelects handles audio through the Web Audio API, giving you real-time EQ, pitch-corrected scrubbing, and a master clock that keeps audio and video locked together during playback.

Audio master clock

The audio master clock drives the timeline playhead from audioContext.currentTime rather than the system clock. This matches the behavior of professional NLEs like Premiere Pro and DaVinci Resolve. How it works:
  • Audio playback sets the reference for timeline position
  • The playhead continuously reads audioContext.currentTime to stay in sync
  • Small drifts are corrected gradually by nudging the playback rate, preventing audible pops or clicks from hard seeks
  • During reverse playback or speeds outside the 0.25–4x range, audio is muted automatically
The result is frame-accurate audio-video sync without interruptions.

10-band parametric EQ

Each audio or video clip includes a 10-band EQ accessible from the Volume tab in the Properties panel.

Frequency bands

31 Hz · 62 Hz · 125 Hz · 250 Hz · 500 Hz · 1 kHz · 2 kHz · 4 kHz · 8 kHz · 16 kHz

Controls

ParameterRangeDefault
Gain per band-12 dB to +12 dB0 dB
Q factor1.4 (standard 10-band)fixed

Opening the EQ

  1. Select an audio clip or a video clip with linked audio in the timeline.
  2. Open the Properties panel.
  3. Click the Volume tab.
  4. Adjust any of the 10 vertical sliders — changes apply in real time via the Web Audio API.
  5. Click Reset to flatten all bands back to 0 dB.
Each band gain supports keyframe animation. Enable the keyframe toggle next to the EQ section to record gain changes over time. Video clips have a dedicated Audio tab in the Properties panel that exposes the same EQ and volume controls without needing to select the linked audio clip separately.

Live Web Audio preview

The AudioRoutingManager connects every playing media element through a Web Audio node graph:
HTMLMediaElement → MediaElementSourceNode → GainNode → EQ Filters [0–9] → Destination
Changes to volume or EQ are applied per frame with delta detection — only values that actually changed are written to the graph. If no EQ is active on a clip, volume is set directly on the element to avoid unnecessary Web Audio overhead. A single shared AudioContext is reused across all routes. The context resumes automatically when playback starts, working around browser autoplay restrictions.

Varispeed scrubbing

While dragging the timeline playhead, audio plays continuously at a speed and pitch that matches the scrub velocity.
Scrub behaviorAudio response
Slow scrubAudio plays at reduced speed
Fast scrubAudio speeds up proportionally
Stop scrubbingAudio fades out smoothly
Reverse scrubAudio plays backwards
Playback rate is clamped to 0.25–4x (browser HTMLMediaElement limitation). The AudioSyncHandler uses a position-change threshold of 0.005 s to avoid redundant triggers and plays short audio snippets at volume 0.8 centered on the scrub position.

Audio waveform display

Audio and video clips show amplitude waveforms in the timeline at ~50 samples per second, generated using decodeAudioData from the Web Audio API.
  • Waveforms render as a canvas overlay that scales with the timeline zoom level
  • Toggle visibility with the Wave On/Off button in the timeline toolbar
  • Generation progress is shown on the clip as a 0–100% indicator
  • Waveforms are cached in the project’s Cache/waveforms/ folder and restored between sessions
Waveform generation is skipped for audio files larger than 4 GB and video files larger than 500 MB. Clips from these files display without a waveform. Some container formats may also prevent waveform extraction depending on browser codec support.

Audio mixing

Track layout

The default timeline includes two video tracks and one audio track. New audio tracks are created automatically when a video clip with audio is placed and all existing audio tracks have overlapping clips. Each track has independent controls:
ControlFunction
M (Mute)Silence the track
S (Solo)Play only this track
EyeToggle clip visibility (video tracks)

Per-clip volume

Select any audio or video clip and use the Volume slider in the Properties panel to set level from 0% to 200%. Volume supports keyframe animation for automated fades and level changes across the timeline.

Pitch preservation

When a clip’s speed is changed, the Keep Pitch checkbox (on by default) maintains the original pitch. Disabling it produces a pitch-shift effect proportional to the speed change.
SettingBehaviorUse case
Keep Pitch on (default)Original pitch at any speedSpeech, music
Keep Pitch offPitch shifts with speedCreative speed effects

Seamless cut transitions

When two sequential clips on the same audio track share the same source file and have continuous in/out points, the system reuses the existing audio element instead of cold-starting a new one. This eliminates the 100–400 ms startup gap that would otherwise be audible at cut points.

Audio export

During export, audio goes through a full offline pipeline:
  1. Extract audio from clips (MP4Box-based, no re-encode)
  2. Trim to clip in/out points
  3. Apply speed and pitch changes via soundtouch-ts
  4. Render EQ and volume automation with sample-accurate keyframes using OfflineAudioContext
  5. Mix all tracks, respecting mute/solo
  6. Encode to AAC (MP4) or Opus (WebM)
  7. Mux with video
For more detail see the Export page.

Build docs developers (and LLMs) love