Let a song track automate parameters of its sounds and FX (#337)
Stage 3 of #337. Lanes moved volume and pan only. Now a lane can steer a parameter of anything on its track, and a voice already planned or still waiting for its file follows it too. - A lane may aim at param:<name>. A parameter has no range of its own, so the lane keeps min and max. A parameter lane stays without points, so its range is not lost. Remove lane takes it away. - It reaches the track FX, the FX of an item, the instrument of a note with its own FX, and the FX of a clip. When several have the name, all of them change, as with Set sound FX parameters. - The scheduler hands the lane value to a note or clip at its start. Values a voice only reads at its start act from the next note. - While a voice sounds, the knobs of buses and voices of the track follow the lane on the audio clock, read every 10 ms, because a knob is not always the parameter itself (trackParams.ts). - A voice waiting for its file takes the marks when it starts. - When a lane is removed, the parameter goes back to its default. An edit while playing does not reset a parameter a lane rules. - This holds in the song tab, for Play song, in compositions and in the bake. - Song tab: Add parameter lane in the track head menu opens a dialog for parameter and range (ParamLaneDialog.ts). The lane head menu has Range and Remove lane. - Inspector: while a lane rules a value, a hint at the track names the lanes and says the fields act once the lane is gone. Known limit: a knob that depends on two automated parameters reckons each lane with the last value of the other, so it may lag one window. Tests: - automation-params.test.ts (9, new), 3 new in sound-library and 3 in song-lanes. Affected files 407/407. - 17 counter checks, all compile, all red. - e2e 65 on melektaus-atx: ALL PASSED, 67 checks. 65h3 is new: a clip with FX parameter cut starts at the lane value and its knob stays within 0.04 dB of the lane. It goes red when automateBus does not pass parameters on. - Gate on melektaus-atx: CHECK EXIT 0, 330 files, 5080 tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
bd99f9e79d
commit
b50c7dbc35
19 files changed
+1248
-115
No files matched your search
@@ -491,8 +491,15 @@ export function strikeNote(
|
||||
duration: note.duration,
|
||||
};
|
||||
const timing = { at: note.at, tempo: note.tempo, ...(note.bus && { bus: note.bus }) };
|
||||
const fx = fxVoiceOf(sources.project, instrumentFx(sources.project, note.instrument, ''), note.tempo);
|
||||
return playNote(sources, note.instrument, struck, owner, {}, timing, fx);
|
||||
// What the lanes of its track start it with (#337) reaches its instrument and its sound FX alike.
|
||||
const params = note.params ?? {};
|
||||
const fx = fxVoiceOf(
|
||||
sources.project,
|
||||
instrumentFx(sources.project, note.instrument, ''),
|
||||
note.tempo,
|
||||
params,
|
||||
);
|
||||
return playNote(sources, note.instrument, struck, owner, params, timing, fx);
|
||||
}
|
||||
|
||||
/** A clip of a song (#334): its sound at its own volume times the item's, through its sound FX. */
|
||||
@@ -509,7 +516,7 @@ export function playClip(
|
||||
return audio.playClip(
|
||||
playedSoundOf(ref),
|
||||
{ at: clip.at, offset: clip.offset, duration: clip.duration, volume, bus: clip.bus },
|
||||
clipFx(project, clip.fx, clip.tempo),
|
||||
clipFx(project, clip.fx, clip.tempo, clip.params),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user