Repository navigation
This update brings a few UI improvements, a new plugin system, and an internal overhaul of the audio system.
Highlights:
Features / Changes:
- Added plugin system, which allows QPlayer to be extended with custom plugins
- Implemented crash handler, QPlayer will now attempt to save a log and project file when an unrecoverable error occurs
- EQ now processes samples in double precision
- Sound cue pause now adds a 5 sample fade out
- Added an OSC cue plugin which allows QPlayer to send an OSC message when an OSC cue is triggered
- Implemented a plugin which allows the MagicQCTRL hardware to control QPlayer (https://github.com/space928/MagicQCTRL)
- Creating a new project and opening a project now trigger a running cues check to prevent interruptions
- Complete overhaul of the audio limiter, the new algorithm should be punchier or smoother as desired and generally adapt better to a range of program material.
- Added AutoGain feature to the limiter
- Added plugin manager window
- Added new splash screen
Fixes / Internal Changes:
- The project now uses a custom source generator to generate a lot of the code needed for the binding logic needed by the UI
- Changed how cues are implemented internally to allow for cues from plugins to be supported
- Updated project to dotnet 10
- Removed old dependencies
- Improved text rendering
- Documentation updates
- Fixed create cue menu bug
- Fixed a couple of property dependency bugs
- Improvements and bugfixes to some of the views
- Added create cue button and hint text to the cue stack
- OSC go now triggers a delayed go instead of an instant go
- Fixed bugs in the pcm -> floating point converters
- Fixed some bugs in the resampler
- Bugfix for single file compilation which resulted in a failure to read the assembly metadata
- Fixed potential crash when reading broken peak files
- Reimplemented fade in/out code for reliability and performance, it should behave more predictably now
- Fixed OOB read in metering sample provider
- Fixed mixer automatic input removal code which removed inputs in the wrong order
- Fixed plugin loader bug in locating DLLs
- Added API to allow plugins to scroll the cue list
- Timers have been replaced with DispatcherTimers which should be more performant
- Minor UI improvements
- The WASAPI driver now attempts to set the AudioClientStreamOptions to Raw, which might help prevent windows APOs from messing with the audio
- Improvements to the delay buffer class
- API improvements for the EQSampleProvider static methods + new filter types added
- Reimplemented a lot of the LoopingSampleProvider for better reliability, it is now specialised to work specifically with the QAudioFileReader
- Removed almost all of the locks from the audio thread
- Implemented asynchronous audio buffering system, which allows audio files to be read and buffered in separate worker threads automatically
- All of it's seeking code has been moved to the QAudioFileReader and it has been partially re-written for clarity and performance
- QAudioFileReader now implements an advanced buffering system reduce dropouts and removes all locks/blocking from the audio thread. It also handles seeking to specific sample positions itself as well now
- Peak files now store the peak level of a sample separately
- Fixed a couple of event handler leaks
- Reduced GC pressure for some property change notifications by caching the event args
- Removed dependency on JetBrains profiler
- Loop mode is now a hidden combo box in the cue list for ease of editing
- Replaced uses of ProgressBar with MeterBar, which disables (a bit forcefully) UI Automation, which was causing performance issues
- Fixed nullable generation in source generator
- QAudioFileReader now reads a number of samples into a junk buffer when seeking to warm up the underlying reader stream
- Lots of internal refactoring
Full changelog:
1.10.3...1.11.10