WASAPI shared output

Component for foobar2000 v1.5 and newer.

foobar2000 v1.4 version available here.

Released:2024-03-30 14:56
Size:82.8 KB
License:Modified ISC license




Shared mode WASAPI output for Vista and newer Windows versions. This component tried to provide smoother volume adjustment and seek/pause/stop transitions than existing outputs. Now core supports identical features.

Additional info


0.6.24 (2024-03-30):Fixed latency reporting. The new API wants latency in samples so it needed converting from playback rate to source rate to match expected duration.
0.6.23 (2024-03-23):Changed the component to request proper amounts of data to refill internal buffer with extreme ratios between incoming sample rate and Windows mixer.
0.6.22 (2024-03-20):Changed to use latest output implementation
0.6.21 (2023-09-15):Reduced delay before playback actually stops when hitting stop. Updated to the latest SDK.
0.6.20 (2023-09-11):Changed some error messages to be more clear. Increased timeout before stopping playback forcefully terminates the playback thread in case it's not responding.
0.6.19 (2023-03-16):Recompile with latest SDK and foobar2000 v1.5 compatibility.
0.6.18 (2022-09-11):Fixed a bug that playback didn't automatically stop after the last track under certain conditions.
0.6.17 (2022-02-05):Support for foobar2000 64-bit version
0.6.16 (2020-12-27):Added advanced config setting to adjust the quality scale of the automatic resampler.
0.6.15 (2020-10-10):Fixed mix format reading to not require WAVEFORMATEXTENSIBLE structure.
0.6.14 (2020-08-04):Added 22.2 channel downmixer.
0.6.13 (2020-07-25):Fixed playback of very short tracks.
0.6.12 (2020-06-29):Added ability to play over 8 channel audio content with missing channel mapping.
0.6.11 (2020-06-27):Ignore device disappearing error when playback is paused.
0.6.10 (2020-06-24):Improved standby handling. Playback should no longer error out when the machine is resumed from sleep.
0.6.9 (2020-06-16):Added standby event handling.
0.6.8 (2019-09-28):Removed locks from the playback thread. Added error details previously only shown on console to the error popup
0.6.7 (2019-09-03):Fixed stuttering with extreme downsampling ratios. Problem was introduced by the processing change in v0.6.5.
0.6.6 (2019-06-28):Reduced the glitch size when default audio device changes and buffer gets converted to the new format. Fixed player getting stuck when pausing a short track (bug introduced in 0.6.5)
0.6.5 (2019-06-27):Fixed player UI freeze while processing very large audio chunks
0.6.4 (2019-06-22):Fixed noise issue during channel count change when automatic resampling was active
0.6.3a (2019-06-17):Version 0.6.2 introduced glitches when buffer refill events were signalled too early. Restored the retry logic for most parts to match v0.6.1
0.6.3 (2019-06-17):Fixed fade-in missing when initial playback didn't start from the beginning of a track
0.6.2 (2019-06-15):Fixed audio glitches when switching tracks. Changed playback thread not to abort so easily on buffering problems. Increased the fade duration to 50 ms to improve interpolation smoothness
0.6.1 (2019-04-07):Reverted the 0.6 buffering change. Default device change mid-playback will now resample and convert the already buffered samples to new target format. The transition isn't as smooth as with 0.6 but better than in prior versions. Fixed a glitch when seeking while paused
0.6 (2019-03-31):Buffer is no longer flushed when using the default device and the device changes mid-playback. Added a short fade-in after default device change
0.5.8 (2019-03-21):Improved compatibility with audio drivers that signal events incorrectly
0.5.7 (2019-03-14):Mixer setting report now includes channel mask configuration
0.5.6 (2019-03-09):The output device was incorrectly reinitialized when default changed even when not using default output
0.5.5 (2019-03-09):Made default output notice changes and automatically switch to new device
0.5.4 (2019-02-15):Hopefully fixed playback thread init failure related crashing
0.5.3 (2019-01-31):Added COM library initialization to device enumerator
0.5.2 (2018-10-29):Fixed crash on device close
0.5.1 (2018-10-27):Volume adjustment was incorrectly delayed during initial playback start
0.5 (2018-10-18):Fixed glitching with sub 100 ms output buffers, the component incorrectly played silence when its buffer went empty. Eliminated need for Sleep() which should make the component immune to timer resolution fluctuations
0.4.1 (2018-10-15):Fixed device identification by GUID
0.4 (2018-10-13):Improved error handling
0.3 (2018-10-06):Fixed inability to start playback in paused state. Made volume adjustment smoother. Further reduced glitching with seeking. Attempts to reinitialize output device on error
0.2 (2018-09-30):First public version