diff --git a/DeepDrftPublic.Client/Controls/MixWaveformVisualizer.razor.cs b/DeepDrftPublic.Client/Controls/MixWaveformVisualizer.razor.cs index 7f14860..55ef5e6 100644 --- a/DeepDrftPublic.Client/Controls/MixWaveformVisualizer.razor.cs +++ b/DeepDrftPublic.Client/Controls/MixWaveformVisualizer.razor.cs @@ -58,7 +58,7 @@ public partial class MixWaveformVisualizer : ComponentBase, IAsyncDisposable // datum-fetch / subscription / playback-coupling seams log to the browser console (prefixed // `[MixVisualizer]`, same as the JS logs so the two interleave into one timeline). These pinpoint // which upstream link is broken when the ribbon stays blank — set false once confirmed healthy. - private const bool Debug = false; + private static readonly bool Debug = false; private const string Tag = "[MixVisualizer]"; private static void DebugLog(string message) diff --git a/DeepDrftPublic/Interop/visualizer/MixVisualizer.ts b/DeepDrftPublic/Interop/visualizer/MixVisualizer.ts index c8b5f6d..aafda76 100644 --- a/DeepDrftPublic/Interop/visualizer/MixVisualizer.ts +++ b/DeepDrftPublic/Interop/visualizer/MixVisualizer.ts @@ -742,10 +742,11 @@ export function create(canvas: HTMLCanvasElement): MixVisualizerHandle { // // Smoothness (spec §2e / §5.4): the scroll must advance every animation frame, not // step at Blazor's ~10 Hz playback-push cadence. We achieve that by interpolating - // the playhead on the wall clock — each frame uploads effectivePlayhead(), which - // advances the last pushed position by real time elapsed since the push. (The - // separate uTimeSeconds monotonic clock is reserved for Wave 3's field/blob motion - // and is unused by this parity shader; it is NOT what drives the scroll here.) + // the playhead on the wall clock — each frame uploads renderedPlayhead() (= effectivePlayhead() + // + the decaying jitter-correction offset), which advances the last pushed position by real time + // elapsed since the push and blends out any accumulated timing error. (The separate uTimeSeconds + // monotonic clock is reserved for Wave 3's field/blob motion and is unused by this parity shader; + // it is NOT what drives the scroll here.) /** Draw one still frame immediately, without scheduling a new rAF. */ function redrawOnce(): void {