11 #import "IPlugAUPlayer.h" 14 #if !__has_feature(objc_arc) 15 #error This file must be compiled with Arc. Use -fobjc-arc flag 18 @implementation IPlugAUPlayer
20 AVAudioEngine* audioEngine;
21 AVAudioUnit* avAudioUnit;
25 - (instancetype) initWithComponentType: (UInt32) unitComponentType
30 audioEngine = [[AVAudioEngine alloc] init];
31 componentType = unitComponentType;
36 BOOL success = [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error];
39 NSLog (
@"Error setting category: %@", [error localizedDescription]);
45 - (void) loadAudioUnitWithComponentDescription:(AudioComponentDescription)desc
46 completion:(
void (^) (
void))completionBlock
48 [AVAudioUnit instantiateWithComponentDescription:desc options:0
49 completionHandler:^(AVAudioUnit* __nullable audioUnit, NSError* __nullable error)
51 [
self onAudioUnitInstantiated:audioUnit error:error completion:completionBlock];
55 - (void) onAudioUnitInstantiated:(AVAudioUnit* __nullable) audioUnit error:(NSError* __nullable) error completion:(
void (^) (
void))completionBlock
60 avAudioUnit = audioUnit;
62 self.currentAudioUnit = avAudioUnit.AUAudioUnit;
64 AVAudioSession* session = [AVAudioSession sharedInstance];
65 [session setCategory: AVAudioSessionCategoryPlayAndRecord error:&error];
67 [session setPreferredSampleRate:44100. error:nil];
68 [session setPreferredIOBufferDuration:0.005 error:nil];
69 AVAudioMixerNode* mainMixer = [audioEngine mainMixerNode];
70 mainMixer.outputVolume = 1;
71 [audioEngine attachNode:avAudioUnit];
72 AVAudioFormat* inputFormat = [avAudioUnit inputFormatForBus:0];
73 AVAudioFormat* outputFormat = [avAudioUnit outputFormatForBus:0];
75 if (inputFormat != nil)
76 [audioEngine connect:audioEngine.inputNode to:avAudioUnit format: inputFormat];
78 [audioEngine connect:avAudioUnit to:audioEngine.outputNode format: outputFormat];
88 BOOL success = [[AVAudioSession sharedInstance] setActive:TRUE error:nil];
91 NSLog (
@"Error setting category: %@", [error localizedDescription]);
93 if (![audioEngine startAndReturnError:&error])
94 NSLog (
@"engine failed to start: %@", error);