TAAE2 is on its way
Hi!
This is a heads-up: I'm working on TAAE2 and it's brand new, with very little code inherited from TAAE1. TAAE1 is well over 3 years old now, and it's gained quite a bit of technical debt over the years. I need some features in Loopy Masterpiece Edition which would be a bit onerous to build into TAAE1, and so I'm taking this opportunity to start with a clean slate and build something simple, modular and easily extensible.
The design's being informed by discussions I've had with enormous-brain-on-legs Jonatan Liljedahl of Kymatica (you'll know him through his products AUM, AudioShare, SECTOR, etc.), and centres around the idea of a buffer stack, which can have buffers pushed to it and popped from it, and a central render loop where all modules are brought together.
It'll look a little something like this:
AEAudioUnitInputModule * input = [AEAudioUnitInputModule new];
AEDelayModule * delay = [AEDelayModule new];
AEAudioFilePlayerModule * player = [[AEAudioFilePlayerModule alloc] initWithPath:backgroundMusic];
AEAudioFileRecorderModule * recorder = [[AEAudioFileRecorderModule alloc] initWithPath:savePath];
self.output = [[AEAudioUnitOutput alloc] initWithBlock:^(const AERenderContext * _Nonnull context) {
// Pushes a buffer on the stack (containing the input audio)
AEModuleProcess(input, context);
// Modifies the top buffer in place (apply delay effect)
AEModuleProcess(delay, context);
// Pushes a second buffer (containing playback audio)
AEModuleProcess(player, context);
// Mixes the buffers (input + playback = karaoke funtimes)
AEBufferStackMix(context, 2);
// Processes the top buffer in place (record it to file)
AEModuleProcess(recorder, context);
// Sends the top 1 buffer(s) to the output starting at output channel 0
AERendererMixOutput(context, 1, 0);
}];
I'm still tweaking the concepts, and it'll almost certainly look a bit different to the above, but the goal here is to keep things really simple. I've already got a working demo, but I don't want to share it with you just yet until the ideas are all nailed down and proven. I'm expecting to have a version ready for play in about a week or two, though.
When that happens, any feedback would be more than welcome.
So, stay tuned for that! If you're not already on the mailing list, I'd suggest subscribing, especially if you're using TAAE in your app(s).
Best,
Michael
Comments
Woot!
Awesome!
Very cool! Any planned swift support?
Haha, thanks (I guess!)
BTW, here's a picture of me while building the audio engine in AUM:
Cheers!
Yes and no; it's all in C/Objective-C by necessity, but it's trivial to add it to the bridging header. The sample app's going to be written in Swift, with the audio stuff in Objective-C.
Wow, it looks just like you!!
Looks a lot like the way Heraka works (obviously different field).
https://github.com/haraka/Haraka
Any chance you can do a talk at melb cocoaheads?
Perhaps I might do a talk on 2Ed when it gets released.
(Replying via DM)