Minor Changes
- c9c3c59: Time:
metronomeClicks(tempo, changes, until, rhythm)gives the clicks of a metronome in seconds through the time-signature changes, the first of each bar accented, so a host can schedule them on the audio clock. - c9c3c59: Playback:
@audio-ui/core/playbackplays an arrangement's audio clips on the audio clock, to the frame. APlaybackStatecounts both sides in whole frames, so a loop of any length never drifts;TrackRendereris a track's player, which copies a recording bit for bit at speed 1, reads it through a cubic interpolator when warped, folds a looped clip, mirrors a reversed one, fades a stop or a jump over 2 ms, and keeps a track that heard of a play late in step;CLIP_PLAYER_WORKLETis that player as an AudioWorklet module, whatever the bundler, which answers asynconce it has every message before it, so an offline render can wait for its players before it starts. The mixer's arithmetic comes with it:panGains(constant power, 0 dB in the centre and +3 dB at either end, each channel on its own gain),soloStateanddelayCompensation. - c9c3c59: Device: an instrument's
noteOn(note, timing?)andnoteOff(timing?)take an optionalNoteTiming,{ at, id }.atis a time of the audio clock, so a host that schedules notes ahead plays them on the frame they fall at instead of when its timer fires;idnames the note, so anoteOfffor a note that another one took over from lets nothing go. With no timing, both act now on the held note, as before.