Things that are very wrong:
- Audio will potentially crackle if devices have different Sample Rates and formats, need to introduce Converter Nodes.
- Hard coded artificial delay on starting the Output Engines, if delay is removed something (not sure what) is causing output callback to not be called.
People to thank:
- Vlad Gorlov for his RingBuffer class.
- Jasmin Lapalme for this CAPlaythrough rewrite to Swift
- Amateur code monkey Roman Kisil for this poor example