About MusicCutter
MusicCutter is a static web app. Once the page has loaded, every step — decoding, editing, effects, encoding and checking the result — runs in your browser using Web Audio, Web Workers and WebCodecs. There is no backend that receives audio.
Feature labels
NATIVE uses a browser API or code written for this site. WASM marks a bundled third-party codec (the MP3 encoder is a pure-JavaScript port of LAME). APPROX is a bounded best effort whose quality limits are stated next to the control. UNSUPPORTED means your browser cannot do it here and nothing is sent to a server instead. Roadmap items are not built yet.
Libraries
- @breezystack/lamejs 1.2.7 — MP3 encoder, LGPL-3.0, used unmodified in its own Worker chunk.
- mp4-muxer 5.2.2 and webm-muxer 5.1.4 — MIT, container writers for WebCodecs output.
- Next.js, React — MIT. Fonts: Big Shoulders Display and Schibsted Grotesk (SIL OFL), self-hosted.
Feature status
48 done, 8 partial, 1 not done, of 57 requirements.
| ID | Feature | Status | Label | Notes |
|---|---|---|---|---|
| MUSIC-01-001 | Drag-drop multiple local audio files | Done | NATIVE | Drop anywhere on the editor or Open files (multi-select); files append as clips. |
| MUSIC-01-002 | Format sniffing and unsupported codec messages | Done | NATIVE | Magic-byte sniffing for WAV/RF64/MP3/FLAC/Ogg/MP4/WebM/AIFF/CAF/AMR/MIDI and non-audio; specific fix per format. |
| MUSIC-01-003 | Waveform and zoomable timeline | Done | NATIVE | Canvas waveform with peak pyramid, sample-level zoom, overview pan, Ctrl/⌘+wheel zoom. |
| MUSIC-01-004 | Sample-aware transport and playhead | Done | NATIVE | Positions stored as integer frames; playhead clock in ms, sample counts shown. |
| MUSIC-01-005 | Select range by drag and numeric entry | Done | NATIVE | Drag, move selection, typed In/Out/Length (m:ss.mmm, s, ms, frames). |
| MUSIC-01-006 | Frame-accurate in/out markers | Done | NATIVE | Markers at playhead or typed time; editable; Alt+arrow 1-sample nudge on handles. |
| MUSIC-01-007 | Trim keeping selected portion | Done | NATIVE | Sample-exact; regression fixture 10.000–25.500 s verified by re-decode. |
| MUSIC-01-008 | Remove selection and ripple close | Done | NATIVE | With automatic 3 ms de-click at non-contiguous joins. |
| MUSIC-01-009 | Split at playhead and per markers | Done | NATIVE | Split at playhead (S) and at all markers; export parts as ZIP. |
| MUSIC-01-010 | Multi-clip non-destructive arrangement | Done | NATIVE | Single-track clip list referencing immutable sources. |
| MUSIC-01-011 | Undo/redo transactional history | Done | NATIVE | Immutable snapshots, 200 steps. |
| MUSIC-01-012 | Duplicate, reorder, move and snap clips | Done | NATIVE | Duplicate, drag/keyboard reorder; selection snaps to clip edges, markers, zero crossings. |
| MUSIC-01-013 | Loop playback and A/B original toggle | Done | NATIVE | Loop selection; A/B bypasses the effects chain. |
| MUSIC-01-014 | Stereo and mono channel view | Done | NATIVE | Mixed or per-channel lanes. |
| MUSIC-01-015 | Keyboard shortcuts and touch drag handles | Done | NATIVE | Space/T/Del/S/M/I/O/R/L, Ctrl+Z/A; 44 px In/Out grips. |
| MUSIC-02-001 | Linear and equal-power fade in/out | Done | NATIVE | Per clip, sample-accurate lengths. |
| MUSIC-02-002 | Adjust gain and avoid clipping | Done | NATIVE | Clip, range and master gain; clipped-sample count and red marks. |
| MUSIC-02-003 | Peak normalization with true-peak caveat | Done | NATIVE | Sample-peak normalize; UI states it is not true-peak. |
| MUSIC-02-004 | Loudness normalization with measured LUFS | Done | NATIVE | BS.1770-4 integrated loudness, EBU 3341 case 1 in tests. |
| MUSIC-02-005 | Change speed with pitch shift option | Done | NATIVE | Tape-style varispeed via windowed-sinc resampling. |
| MUSIC-02-006 | Time stretch preserving pitch | Partial | APPROX | WSOLA in TypeScript (no WASM library); artefacts at extreme ratios disclosed. |
| MUSIC-02-007 | Pitch transpose and cents controls | Partial | APPROX | Resample + WSOLA; approximate quality. |
| MUSIC-02-008 | Reverse selected audio | Done | NATIVE | Non-destructive reversed clips. |
| MUSIC-02-009 | Silence trim with adjustable threshold | Done | NATIVE | Threshold, minimum length, padding; preview shading before cutting. |
| MUSIC-02-010 | Noise gate with preview | Done | NATIVE | Gate with A/B preview; labelled as not AI denoising. |
| MUSIC-02-011 | Equalizer 3/10 band | Partial | NATIVE | 3-band EQ done; 10-band is roadmap. |
| MUSIC-02-012 | High-pass/low-pass and compressor | Done | NATIVE | RBJ biquads; soft-knee feed-forward compressor. |
| MUSIC-02-013 | Limiter and clipping indicators | Done | NATIVE | Look-ahead brickwall (sample peak). |
| MUSIC-02-014 | Crossfade between joined tracks | Done | NATIVE | Equal-power overlap crossfades at joins. |
| MUSIC-02-015 | Mono/stereo conversion and channel remix | Done | NATIVE | Mono, stereo-from-mono, swap, left/right only. |
| MUSIC-02-016 | Sample-rate conversion with quality presets | Partial | NATIVE | Windowed-sinc SRC on import/export; a single quality level (no user preset picker). |
| MUSIC-02-017 | Ringtone exact duration presets | Done | NATIVE | iPhone 30 s (.m4r when AAC encoder exists), Android, notification, alarm. |
| MUSIC-03-001 | Microphone capture with explicit consent | Done | NATIVE | Explicit Allow button; denied/revoked/missing device messages. |
| MUSIC-03-002 | Record/pause/resume and monitor safety | Done | NATIVE | MediaRecorder pause/resume; level meter, no speaker monitoring. |
| MUSIC-03-003 | Export selected range or full project | Done | NATIVE | Range selector in Export. |
| MUSIC-03-004 | Export WAV PCM 16/24/32-bit | Done | NATIVE | 16/24-bit PCM and 32-bit float, LIST/INFO tags. |
| MUSIC-03-005 | Export MP3 using local encoder | Done | WASM | lamejs (pure JS, LGPL-3.0) in a Worker; CBR; ID3v2.3 incl. cover art. |
| MUSIC-03-006 | Export AAC/MP4 with capability checks | Done | NATIVE | WebCodecs AAC + mp4-muxer when supported; otherwise labelled UNSUPPORTED with MP3 fallback. |
| MUSIC-03-007 | Export Opus/WebM | Done | NATIVE | WebCodecs Opus + webm-muxer when supported. |
| MUSIC-03-008 | Export FLAC when enabled | Not done | UNSUPPORTED | Shown as roadmap in the format list. |
| MUSIC-03-009 | Batch trim with shared settings | Done | NATIVE | Shared start/end/fades/effects, ZIP output. |
| MUSIC-03-010 | Bitrate/sample rate/channel settings | Done | NATIVE | Per-format constraints enforced (MP3 rates, Opus 48 kHz). |
| MUSIC-03-011 | Metadata title/artist and cover art when supported | Partial | NATIVE | MP3 ID3 (title, artist, cover) and WAV INFO; not yet for M4A/Opus. |
| MUSIC-03-012 | Listen to rendered output before download | Done | NATIVE | Audio player for the exported file before download. |
| MUSIC-03-013 | Output size and duration estimate | Done | NATIVE | Live estimate in Export. |
| MUSIC-03-014 | Save project manifest and local file handles | Partial | NATIVE | Versioned JSON manifest; File System Access handles not used (roadmap). |
| MUSIC-03-015 | Restore project with missing-file relink | Done | NATIVE | Match by name+size; missing files reported, clips removed. |
| MUSIC-04-001 | Large-file worker memory budget | Partial | NATIVE | Pre-flight budget refuses oversized projects (no chunked/OPFS streaming yet). |
| MUSIC-04-002 | Long render progress/cancel | Partial | NATIVE | Export progress + cancel (worker terminate); preview render has no cancel. |
| MUSIC-04-003 | Mobile playback unlock handling | Done | NATIVE | AudioContext created/resumed on user gesture. |
| MUSIC-04-004 | Audio device change and suspend/resume | Done | NATIVE | Interrupted banner with Resume; restarts on devicechange. |
| MUSIC-04-005 | Keyboard accessibility and numeric alternatives | Done | NATIVE | All drag actions have typed or keyboard equivalents. |
| MUSIC-04-006 | Touch-accessible handles | Done | NATIVE | 44 px grips, 22 px touch hit tolerance. |
| MUSIC-04-007 | Auto-save project metadata locally | Done | NATIVE | IndexedDB, debounced; restore banner on return. |
| MUSIC-04-008 | Prevent tab-close loss with warning | Done | NATIVE | beforeunload when unsaved edits exist. |
| MUSIC-04-009 | Export verification: decode and duration sanity | Done | NATIVE | Every export is re-decoded (browser decoder + built-in WAV reader). |
| MUSIC-04-010 | No audio upload or telemetry payloads | Done | NATIVE | No analytics; CSP connect-src self; smoke test asserts no third-party requests. |