Skip to content

DarkOneJSP3 v0.9.15 - Put a sock in it 🧦

Choose a tag to compare

@Pav-Osmolski Pav-Osmolski released this 01 Aug 18:37
· 11 commits to main since this release

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 IJSBitmap resources.

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.fcl remains 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.