removed unwanted bar now with waveforms, major updates

This commit is contained in:
Mark Gregory
2026-11-06 10:42:21 +00:00
parent 15c9f5914d
commit f947308421
10 changed files with 695 additions and 105 deletions
+18
View File
@@ -93,3 +93,21 @@ The DJ library advances to the next page when a user scroll reaches the bottom.
DJ waveform generation opens a modal with a coloured progress bar, percentage ring, counts and Cancel. The results stay visible until Done; any analysis issues are listed in the modal.
DJ library selection supports Command-click for separate tracks, Shift-click for ranges, and Command-A or right-click Select All Songs for all matching tracks across pages. The queue toolbar action adds the selected tracks in library order. Right-click selected tracks to generate or regenerate their saved waveforms or add the selection to the DJ queue.
## Library and audio responsiveness
DJ tracks appear in a native table with resizable Title, Artist, Album, Time and Rating columns. Favourite stars and five-star ratings are independent and saved in the DJ library. Right-click Song Info / Artist to edit metadata, or Reinterpret Selected Names to use the same preview/template tools as Karaoke Studio; Undo restores the last DJ name change.
Both studios use the same search field with a clear X. Filtered DJ rows are cached until search/library/playlist/favourites change; fader events do not rebuild the library table. Unchanged drag titles no longer redraw on every selection update. Platters use native display callbacks instead of SwiftUI frame-by-frame animation.
Waveform analysis processes contiguous bin segments rather than doing division for every sample. Batches admit at most two background workers, dropping to one while any player is playing; existing workers finish their current files, and decode blocks yield during playback. Original cache validity and cancellation rules remain. A local bundled-WAV benchmark measured about 3× faster analysis, with matching levels; this is not a guarantee for other media or drives.
Equaliser opens a shared ten-band graphic EQ for both DJ decks and headphone preview. Flat, Rock, Pop, Jazz, Vocal, Bass Boost and Treble Boost presets are editable, with bypass and automatic persistence. Gain changes apply without restarting playback.
Each deck also has a microphone toggle beside its level fader for basic centre-vocal reduction. It runs in the audio render path and can be switched during playback. Centred instruments are reduced too; mono is passed through, and stereo vocals may remain. This is centre cancellation, not AI source separation.
Ordinary loops are prepared on a worker and scheduled with the audio node's looping buffer, rather than restarting from a UI timer. Source display time wraps on that same audio clock. Loop buffers are capped at 64 MB; longer manual loops retain the streaming/timer fallback. At normal speed with no pitch shift the time-pitch unit is bypassed to reduce processing overhead. During scrubbing, the waveform follows accepted audio positions, rather than showing a newer mouse target before that audio is scheduled.
The waveform/BPM admission limit is shared across imports, on-load analysis and batch jobs, so separate analysis paths cannot each start their own pair of workers. Playing audio reduces that global limit to one; reads yield between blocks. Neutral time-pitch processing is bypassed.
Loop Off cancels scheduled repeating audio immediately and resumes normal playback at the current loop position. The TV/video view presents original decoded frames directly in a display-resolution-backed layer with aspect-fit scaling, and opens at 1280×720 by default. CDG source graphics remain their original fixed resolution; scaling cannot recover missing HD detail. Settings uses a non-wrapping Workspace selector; the Karaoke Studio toolbar omits the Settings button.