A trailer needs its music and effects on the same timeline as its
pictures. Until now a composition could only place objects, so sound
had to be started by hand from a behavior and drifted against the
picture.
- Audio items: a sound, a clip of a sound, a pattern or a song dragged
from the asset panel onto a track becomes an item as long as one
pass of it. It may share a track with object and video items and
overlap them.
- Editing works as for other items: move, resize, trim on the left
(moves the offset), fit to media, delete, copy and paste, box
selection. Sounds draw their waveform, the colour tells the kind.
- The inspector shows what it plays, start, length, offset, volume
(-60 to +12 dB) and bus. The bus is "From asset", the master or one
of the buses, as asked for in the issue.
- An item longer than its material plays in rounds. Sounds and
patterns start over, a song runs on in its loop. Loop marks on the
item follow the same rule, a song's first mark sits at its loop end.
- compositionAudio.ts turns the items into sequences, each with its
own tempo. CompositionSound plays them, in the tab and in a game.
- In the tab the items are heard from the playhead on, straight into
the master like every tab. A scrub is silent. Playing a song or
pattern in its own tab stops the composition, and the other way
round.
- In a game they are planned on the audio clock for the moment the
composition clock reaches them, with the scheduler's LEAD made up.
While the clock stands (waiting for a video, paused, placement off)
they are silent and resume at the right spot.
Found along the way:
- The asset panel never let a song out of its list, so a song could
not be dragged anywhere. Song and scene tab reject it as they reject
a pattern.
- The asset panel scrolled to the selected asset on every rebuild of
its list, so folding a group far below the selection jumped back up.
Only a new selection scrolls now.
- At the end of the list, folding a group pulled every row down by the
rows that went away. ScrollContainer has a new opt-in holdOffset,
set only in the asset panel, that keeps the offset until the user
scrolls up.
Limits: a time scale other than 1 or a frame longer than 0.1 s moves
the picture and not the sound. A baked song plays its notes here, not
the bake.
Tests:
- tsc, eslint, Prettier clean. Gate on melektaus-atx green,
309 files, 4788 tests (4772 plus 16 new).
- Unit: composition-audio.test.ts 13 new, scroll-container 3 new.
Counter-checks: without catching up on load time or without the
silence on pause the unit tests go red.
- e2e 68h: the sound is planned 1.2 ms after the composition reaches
0.5 s. Without the LEAD make-up it is 54 ms late and red.
- e2e 04 and 69 ALL PASSED, 86 checks. 69o-ii drags a pattern and a
song onto a track, 20 frames each.
- e2e 04: folding Sound at the end of the list keeps its header at
y 234. With the old panel it jumps to 984 and the check is red.
- Not run in a browser: the loop marks of a song item, copy and paste
of audio items, the bus choice.
- README and wiki count 2072 checks.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>