v1.1.3 — 2026-07-11
Critical Fix: VideoPlayer 2x Speed
Video playback previously ran at approximately 2x speed due to a mismatch between user-configured sample rate/buffer size and the actual audio device values. The global \gSampleRate\ and \gBufferSize\ variables were set from user preferences but never corrected when JUCE's audio device used different values.
Root Cause: \MainComponent.cpp\ only logged a warning when the actual device sample rate/buffer size differed from preferences — it did not update the global timing variables. This caused \gTime\ to advance at the wrong rate, making all time-dependent modules (including VideoPlayer) run too fast or too slow.
Fixes Applied
| File | Fix |
|---|---|
| MainComponent.cpp | Sync \gSampleRate/\gBufferSize\ from actual audio device after \initialise()\ |
| ModularSynth.cpp | Sync \mIOBufferSize\ from \gBufferSize\ every callback; use \gBufferSize\ for \elapsed\ |
| VideoPlayerModule.cpp | Remove FloatSliderUpdated→SetPosition feedback loop that triggered seek every frame |
| VideoPlayerModule.cpp | Remove double-seek in SetPosition (direct call + atomic flag) |
| MovieClip.cpp | Fix \isFrameAvailable()\ — removed broken bounds check mixing native rate vs time_base |
| FFmpegReader.cpp | Fix \�v_seek_frame\ — convert samples to stream time_base via \�v_rescale_q\ |
Portable Build
This portable zip includes full Python 3.13 stdlib (for scripting support) and FFmpeg DLLs (for video playback).
Note
Extract and run \Syntetika.exe\ directly — no installation required.