Audio backends are based around 3 callbacks.

- The initialization callback is set by subclasses to initialize the output.
- The writing callback fills buffers.
- The shutdown callback kills streams, etc.
Changed my mind. We can do this by virtual functions.