a big release with lots of changes to low-level machinery.
user-facing:
- added a new "crossfade" playback mode that can be used instead of "gapless". users can change this functionality in the settings view.
- fixed audio artifacts in WasapiOut and DirectSoundOut when pausing and resuming playback multiple times very quickly.
- fixed a really bad bug where dialogs could not be easily dismissed in some cases. this included the first-run dialog! yikes.
low-level:
- added Latency() and Drain() methods to the IOutput interface
- reduced CPU load in some output plugins by being less aggressive about keeping the output buffers 100% full all the time. 75%+ fill rate should be sufficient.
- generalized MessageQueue and moved it out of app, and into core so it can be reused for other functionality (e.g. crossfading)
- added support for "mix points" in Player -- get a callback as soon as a specific playback position is hit!
- fixed DirectSoundOut to fall back to software mixing if hardware mixing is unavailable
- fixed DirectSoundOut to start playback immediately, instead of sometimes requiring the buffer to be completely full