import Multitrack from "/vendor/multitrack.js"; import { fmtTime } from "./utils.js"; import { STEM_NAMES, TRACK_NAMES, STEM_COLORS, PROGRESS_COLOR, LOOP_DEFAULT_START_FRAC, LOOP_DEFAULT_END_FRAC, LANE_VOLUME_MAX, } from "./constants.js"; import { mixerEl, multitrackContainer, bpmChip, keyChip, stemsChip, timeEl, titleEl, npThumb, rulerTime, wavesGrid, playBtn, stopBtn, loopBtn, loopRegionEl, multitrack, currentJobId, trackIndex, totalDuration, loopEnabled, loopStart, loopEnd, trackAnalysers, masterVolume, masterFader, mixerState, audioEngine, setAudioEngine, setMultitrack, setCurrentJobId, setTrackIndex, setTotalDuration, setLoopEnabled, setLoopStart, setLoopEnd, setMasterVolume, waveScroll, selectedStems, footerTitle, footerMeta, footerThumb, setFooterWaveDrawFn, } from "./state.js"; import { createAudioEngine, estimateDecodedBytes } from "./audioEngine.js"; import { loadMixIntoState, resetMixerState, refreshMixerVisuals, setLaneControlsEnabled, ensureMixerStateDefaults, applyMix, renderRealMiniWave, renderMixerRow, } from "./mixer.js"; import { buildRuler, updatePlayheadMarker, updateLoopRegionVisual, applyWaveZoom, buildPresenceRuler, updateFooterTimes, updatePresencePlayhead, resetSpeed, } from "./transport.js"; import { stopVuLoop } from "./audio.js"; import { destroySections } from "./sections.js"; // Feature flag for the Web Audio decode-and-mix engine (audioEngine.js). // Playback runs off decoded AudioBuffers on a single AudioContext clock instead // of N streaming