Le problème
Je suis en train d'obtenir le nouveau mécanisme de AUParameterTree
et AUParameter
travaillant dans mon projet de test Audio Unit V3. Le problème est que lorsque j'obtiens une référence de l'application hôte et que j'en change la valeur, le paramètre de l'extension Audio Unit ne semble pas changer.Réglage de la valeur de AUParameter de Host App
Voici mon approche. J'utilise la nouvelle API Audio Unit V3. J'ai créé un AUParameter
dans mes AUAudioUnit
« s initWithComponentDescription
:
Création du paramètre
AUParameter *param1 = [AUParameterTree createParameterWithIdentifier:@"frequency"
name:@"Frequency"
address:frequencyAddress
min:500
max:5000
unit:kAudioUnitParameterUnit_Hertz
unitName:nil
flags:0
valueStrings:nil
dependentParameters:nil];
Définir une valeur par défaut ..
param1.value = 0.5;
quelques-uns des arguments au paramètre constructeur viennent de ...
Certains S tate
J'ai défini l'adresse en tant que constantes globales:
const AudioUnitParameterID frequencyAddress = 0;
et une variable locale pour un AUValue
:
AUValue frequency = 1;
Gardez à l'esprit à ce moment, je suis juste après la trois exemples de projets qui utilisent Audio Unit V3 sur l'ensemble de l'Internet. Je trouve difficile de reconstituer la façon dont toute cette danse de paramètre AU devrait aller seulement de la lecture des docs.
Rendu avec le paramètre
maintenant en ce qui concerne l'utilisation du AUValue
associé au AUParameter
"param1" (je suppose thats comment cela fonctionne?) ..
Je suis alors capturant cette AUValue
(la variable locale dont je ne sais pas comment il est associé à la réelle AUParameter
) .. dans mon bloc de rendu Audio Unit:
- (AUInternalRenderBlock)internalRenderBlock {
AUValue * param1Capture = &frequency;
return ^AUAudioUnitStatus(AudioUnitRenderActionFlags *actionFlags, const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, NSInteger outputBusNumber, AudioBufferList *outputData, const AURenderEvent *realtimeEventListHead, AURenderPullInputBlock pullInputBlock) {
// use parameter value
someValue = *param1Capture;
// more dsp stuff..
Contrôle des paramètres de l'hôte App
C'est là que le problème se pose.
Je déclare une référence locale à un AUParameter
:
@interface ViewController(){
AudioEngine *_audioEngine;
AUParameter * _param1;
}
et quand ma classe Audio Engine instancie mon AUAudioUnit
il passe à moi:
[_audioEngine setupAUWithComponentDescription:desc andCompletion:^(AUAudioUnit * unit){
_param1 = [unit.parameterTree valueForKey:@"frequency"];
}];
aucun effet?
Quand je dis:
[_param1 setValue: 1000];
Le capturé AUValue
dans mon bloc de rendu reste le même! J'ai soit ignoré un bug, un type stupide (j'ai peut-être introduit un type dans cette écriture de mon problème alors gardez cela à l'esprit), ou j'ai fondamentalement mal compris ce mécanisme.
Si j'ai besoin de fournir plus de contexte pour ce problème, je peux facilement pousser le projet vers Github.
Merci d'avance.