Adding support for new formats to AVAudioEngine on macOS
Adding support for new formats to AVAudioEngine on macOS
- Subject: Adding support for new formats to AVAudioEngine on macOS
- From: "Stephen F. Booth via Coreaudio-api" <email@hidden>
- Date: Wed, 8 Apr 2020 14:07:51 -0500
I'm interested in adding support for additional formats (WavPack, Musepack,
True Audio, etc.) to macOS. My goal is to play these formats using
AVAudioEngine.
Ideally I'd be able to subclass AVAudioFile and things would just work with
AVAudioEngine but thus far I haven't been successful. I'm not sure if
AVAudioFile is designed to support additional formats through subclassing.
Years ago Apple released Core Audio utility classes (ACCodec,
AudioFileObject, and friends, still available at
https://developer.apple.com/library/archive/samplecode/CoreAudioUtilityClasses/Introduction/Intro.html#//apple_ref/doc/uid/DTS40012328)
and using those it was possible to create new codecs/AudioFile components
for the system. Apple even released ACFLACCodec as an example. These are no
longer updated and I don't know if third-party audio components are
supported on recent versions of macOS.
Under the hood as best I can tell AVAudioEngine wraps AUGraph and
AVAudioPlayerNode wraps AUAudioFilePlayer, so I have a hunch that if one
could add a codec it would work across macOS including throughout
AVAudioEngine.
Is there a way to add additional formats?
I've considered the following options but I don't know which are realistic:
1. Subclass AVAudioFile
2. Create audio codecs/AudioFile components
3. Wrap the decoder in AVAudioSourceNode
Of the options, (1) would probably be the easiest to implement if it's
supported, (2) would provide the decoders across the system and avoid
reinventing the wheel, and (3) would probably work but is less desirable.
Thanks,
Stephen
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden