DarkOneJSP3 v0.9.15 - Put a sock in it π§¦
DarkOneJSP3 v0.9.15 β Volume Interaction and Stability Update
DarkOneJSP3 v0.9.15 is a focused stability and interaction update over v0.9.8.
This release improves volume-knob responsiveness, prevents volume dragging from interrupting the Enhanced Spectrum Analyser, adds matching custom refresh controls to Playlist Manager, and resolves several Display and scheduler regressions discovered during testing.
Volume-knob performance
Rapid volume dragging previously assigned fb.Volume on every raw mouse-movement callback. Each assignment triggered global volume-change callbacks across multiple panels, which could intermittently pause the Enhanced Spectrum Analyser.
Volume handling is now coalesced:
- the first drag value is applied immediately;
- intermediate volume writes are limited to a protected minimum cadence of 16 ms;
- the exact final value is applied when the mouse button is released;
- duplicate callback-driven repaints are suppressed while dragging;
- the knob preview remains visually responsive without flooding the foobar2000 message loop.
This preserves smooth interaction while allowing native visualisers to continue updating reliably.
Adaptive volume preview cadence
The volume knob now includes:
Volume drag refresh rate
βββ Automatic
βββ 8 ms
βββ 10 ms
βββ 12 ms
βββ 16 ms
Automatic mode
Automatic mode follows the fastest currently configured refresh interval reported by:
- JS Playlist
- Smooth Playlist Manager
For example:
JS Playlist: 8 ms
Playlist Manager: 16 ms
Volume preview: 8 ms
The selected cadence controls:
- volume-knob preview repainting;
- Centre Display volume repainting.
Actual fb.Volume assignments retain the safe 16 ms minimum to prevent visualiser stalls.
Manual options remain available when a fixed preview cadence is preferred.
Factory reset restores Automatic mode.
Playlist Manager refresh controls
Smooth Playlist Manager now matches JS Playlist more closely by supporting:
- 8 ms
- 10 ms
- 12 ms
- 16 ms
- Set custom refresh interval...
The supported custom ranges are:
JS Playlist: 7β40 ms
Smooth Playlist Manager: 8β40 ms
Changes apply immediately to the active frame loop without reloading the panel.
Automatic screen-refresh detection was removed because the required display information was not reported reliably on all systems. Both playlist panels now use explicit user-selected refresh intervals.
Volume-knob interaction fix
A single click on the volume knob previously left it visually selected for approximately three seconds.
The knobβs active appearance was incorrectly tied to the same state used to keep the Centre Display volume readout visible after a volume change.
These states are now independent:
- holding the mouse button keeps the knob active;
- releasing the mouse button deselects it immediately;
- the Centre Display may continue showing the changed volume for three seconds;
- wheel, menu and external volume changes do not make the knob appear pressed.
Display and Dot Matrix fixes
Restored Dot Matrix inheritance
A later volume-rendering optimisation accidentally removed the prototype links used by the Dot Matrix image classes.
This caused errors such as:
Object doesn't support property or method 'isDrawDigit'
The inheritance links for the track number, time and bitrate image classes have been restored.
Validation now instantiates each Dot Matrix class and exercises its inherited rendering lifecycle so the same regression cannot pass unnoticed again.
Correct image roles retained
The Display continues to use the correct rendering paths:
- mutable off-screen Dot Matrix composition uses
IJSImage; - final panel output uses cached
IJSBitmapresources.
This preserves the Direct2D performance improvements introduced in earlier releases.
Scheduler cleanup fix
The volume-knob cleanup code incorrectly called:
preview_repaint.stop();The shared repaint scheduler exposes:
preview_repaint.cancel();All affected cleanup paths now use the correct method:
- mouse button release;
- mouse leaving the panel during a drag;
- panel disposal.
Validation now rejects incorrect .stop() calls on repaint schedulers.
Documentation updates
The Configuration Guide and troubleshooting documentation now cover:
- Playlist Manager custom refresh intervals;
- volume-drag refresh-rate controls;
- Automatic volume preview behaviour;
- the protected 16 ms audio-write cadence;
- visualiser performance guidance;
- manual cadence overrides.
Validation and hardening
The validator now includes regression coverage for:
- coalesced volume writes;
- exact final-value flushing;
- adaptive preview cadence;
- custom Playlist Manager intervals;
- repaint-scheduler cleanup;
- Dot Matrix prototype inheritance;
- volume-knob pressed-state behaviour;
- suppression of redundant volume repaints;
- visualiser-safe write cadence.
Final release verification completed successfully:
- 188 audited files
- Zero warnings
- ZIP integrity test passed
- Clean re-extraction passed the complete validation suite
DarkOneJSP3.fclremains manually maintained and is not modified by project tooling
Upgrade notes
Back up your active foobar2000 profile before upgrading.
Merge the supplied DarkOneJSP3 and user-components-x64 directories into the same profile location used by your existing installation, allowing the updated files to replace the previous versions.
The new volume and refresh-rate settings are available through the relevant panel context menus.
Important notice
DarkOneJSP3 is an unofficial community continuation. It is not an official release by tedGo, marc2003, Br3tt/Falstaff, dima-lur, Peter Pawlowski or the authors of the third-party components it uses.
Preserve all existing author headers, credits and third-party licence notices.
DarkOneJSP3 is supplied without warranty. Back up your foobar2000 profile before installation or upgrade.