Das Problem
Ich versuche, die neue AUParameterTree
und AUParameter
‚s Mechanismus in meinem Audio Unit V3 Testprojekt arbeiten zu erhalten. Das Problem ist, dass der Parameter der Audio Unit-Erweiterung sich nicht zu ändern scheint, wenn ich von der Host-App einen Verweis darauf erhalte und dessen Wert ändere.Einstellung AUParameter Wert von Host-App
Hier ist mein Ansatz.
Ich benutze die neue Audio Unit V3 API. Ich habe eine AUParameter
in meinem AUAudioUnit
erstellt ‚s initWithComponentDescription
:
die Parameter Erstellen
AUParameter *param1 = [AUParameterTree createParameterWithIdentifier:@"frequency"
name:@"Frequency"
address:frequencyAddress
min:500
max:5000
unit:kAudioUnitParameterUnit_Hertz
unitName:nil
flags:0
valueStrings:nil
dependentParameters:nil];
einen Standardwert gesetzt ..
param1.value = 0.5;
einige der Argumente für den Parameter Erbauer kommen von ...
einige S tate
Ich habe die Adresse als globale Konstanten definiert:
const AudioUnitParameterID frequencyAddress = 0;
Und eine lokale Variable für eine AUValue
:
AUValue frequency = 1;
an dieser Stelle Beachten Sie, ich folge nur die drei Beispielprojekte, die Audio Unit V3 im gesamten Internet verwenden. Ich finde es schwierig, zusammenzufügen, wie dieser gesamte AU-Parameter-Tanz nur durch das Lesen der Dokumente gehen sollte.
mit dem Parameter Rendering
jetzt, wenn es darum geht, die AUValue
mit dem AUParameter
"param1" assoziiert mit, (I, das ist übernehmen, wie es funktioniert?) ..
dann bin ich Erfassung dieser AUValue
(die lokale Variable, die ich nicht klar bin, wie es mit der tatsächlichen AUParameter
zugeordnet ist) .. in meinem Audio-Unit-Rendering-Block:
- (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..
Parameter Steuerung von Host-App
Dies ist, wo das Problem auftritt.
erkläre ich eine lokale Referenz auf ein AUParameter
:
@interface ViewController(){
AudioEngine *_audioEngine;
AUParameter * _param1;
}
und wenn mein Audio Engine Klasse meine AUAudioUnit
instanziiert es geht es mir:
[_audioEngine setupAUWithComponentDescription:desc andCompletion:^(AUAudioUnit * unit){
_param1 = [unit.parameterTree valueForKey:@"frequency"];
}];
keine Wirkung?Jetzt
, wenn ich sage:
[_param1 setValue: 1000];
Die aufgenommenen AUValue
in meinem Rendering-Block bleibt gleich!
Ich habe entweder einen Fehler übersehen, einen gedankenlosen Typ (ich habe vielleicht einen Typ in diese Beschreibung meines Problems eingeführt, also behalte das im Hinterkopf), oder ich habe diesen Mechanismus grundlegend falsch verstanden.
Wenn ich mehr Kontext für dieses Problem bereitstellen muss, kann ich das Projekt einfach nach Github schieben.
Vielen Dank im Voraus.