A song could only be filled with sounds that were made somewhere else.
Record plays the song from the cursor and takes the input meanwhile, so
a part played along lands on the bar it was played to.
- An audio worklet takes the input's samples on the clock the song
plays on. Each run carries the frame it was taken at, so the take is
cut where the song was heard to start. The output's and the input's
latency are taken off, as far as the browser reports them.
- The take goes up as mono 16-bit WAV. Sound, a new track "Recording"
under the track clicked last and the item at the cursor are one undo
step. The sound is named "Song – Take 1", 2, 3 and so on.
- While recording the take grows red with its waveform on its track,
and a meter beside the input dropdown shows the level. The lanes take
no edits then, only a middle-drag pans.
- The loop is not used while recording. The song plays once through
and on past its end until Stop, Play or Space keep the take. Esc
throws it away and nothing goes up.
- Echo cancelling, noise suppression and auto gain are off, nothing is
played back. The input picked is kept in localStorage.
- A take stops by itself at the size a sound may have. A failed upload
offers Retry, Download WAV and Discard.
- The API takes sounds up to 256 MB and bodies of the same size. nginx
and PHP were raised to match outside the repo (body 256m, upload and
post 256M, memory_limit 512M).
- The pure rules (cut, cap, WAV header, name, track) live in
core/music/take.ts. The scheduler tells where it started on the
audio clock.
- The e2e browser gets chromium's fake microphone and skips the
permission prompt. Each run leaves its take in the sound store.
Found on the way:
- The header was too full with the new widgets and cut the track and
item count on the right. Input dropdown and meter are narrower now.
Tests:
- Unit take.test.ts: 7 new, svg-icons adjusted to 8 toolbar icons
- e2e 65 (melektaus-atx): ALL PASSED – 31 checks (+4)
- Gate (melektaus-atx): CHECK EXIT 0, 252 files, 3923 tests
- Probe on stein2: a 3 s take of the test tone, peak 32767,
285100 bytes, waveform seen in the screenshot
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>