Comment créer un AVAudioUnit avec son AURenderCallbackStruct?
Bonjour
Je sèche depuis plusieurs jours. Il me faut pour un projet avec AVAudioEngine MacOS créer un AVAudioUnit. Je ne parviens pas à l'instancier. D'autres fois j'emploie le audioUnit du inputNode ou du outputNode de l'audioEngine, mais là ce n'est pas possible : il me faut créer ce audioNode.
J'ai bien vu cette discussion :
https://forums.developer.apple.com/thread/39715
J'ai fait :
AVAudioEngine *audioEngine;
AVAudioUnit *aUnit;
AudioUnit captureUnit;
puis dans le constructeur de la classe audio
AudioComponentDescription desc = { kAudioUnitType_Effect,'fltx','rvnr',0,0 };
[AUAudioUnit registerSubclass:aUnit.class asComponentDescription:desc name:@Herve:TestCaptureAudioRythm version:67072];
[AVAudioUnit instantiateWithComponentDescription:desc options:0 completionHandler:^(AVAudioUnit * unit, NSError *error) {
self->aUnit = unit;
[self->audioEngine attachNode:self->aUnit];
NSLog(@AVAudioUnit: %@, error: %@", unit.description, error);
}];
(captureUnit = aUnit.audioUnit; //sera utilisé plus tard)
avec dans info.plist la NSExtension suivante :
NSExtensionAttributes
AudioComponents
description
$(PRODUCT_NAME)
factoryFunction
$(PRODUCT_MODULE_NAME).AudioClass
manufacturer
Herve
name
Herve:TestCaptureAudioRythm
sandboxSafe
subtype
fltx
tags
Effects
type
aufx
version
67072
NSExtensionMainStoryboard
MainInterface
NSExtensionPointIdentifier
com.herve.testCapture
Je n'y arrive toujours pas. Le AVAudioUnit reste 'null', il ne s'instancie pas. Avec alloc-init avant pas davantage.
(après, il sera facile de mettre le renderCallback une fois le audioUnit actif, je l'ai déjà fait en dérivant les noeuds par défaut de AudioEngine)
Quelqu'un aurait une idée?? Merci par avance.
Réponses
Le site montre de façon bizarre la plist, il ne conserve les balises. Désolé...
En fait, c'était un peu plus compliqué que ça. Voyez plutôt :
https://medium.com/better-programming/create-audio-unit-extension-from-scratch-77abee79d12
Ah, quand on sait pas!... (problème résolu en quelques sortes...)
Le forum utilise le Markdown. Dans mon expérience, ça fonctionne mais il faut bien être dans un bloc de code (en décalant le code grâce à une tabulation).