Fork me on GitHub

Input plugin API to change in 3.5

August 31, 2013

In Audacious 3.5, the input plugin API has been greatly simplified. Input plugins no longer provide their own playback control callbacks (pause, mseek, and stop). Also, the play() function has three less parameters: start_time, stop_time, and pause are gone. Instead, the API provides two new functions, check_stop() and check_seek(), that should be polled periodically from the plugin's decoding loop.

The benefit of these changes lies in the fact that a substantial amount of code has been moved into core, so that it no longer needs to be copied and maintained in each and every input plugin. As a result, features such as resuming playback in the middle of a song, cuesheet support, and A-to-B repeat will work correctly and uniformly across all audio formats. Reducing the number of subtle differences between plugins also makes it less likely for serious bugs to slip through testing. (As an example, see bug #314, which broke gapless playback for audio CDs. Because the bug did not affect other formats like MP3, no one noticed it until 3.4 was released as a stable version.)

A side effect of the changes is that input plugins must use PCM output. Hence direct output to a hardware MIDI synthesizer is no longer possible. MIDI files can still be played in Audacious via FluidSynth.

Here is an example of how to update an input plugin for Audacious 3.5.