的問題
我試圖獲得新的AUParameterTree
和AUParameter
的機制在我的音頻單元V3測試項目。問題是,當我從主機應用程序中獲得參考並更改其值時,音頻單元擴展的參數看起來不會改變。從主機設置AUParameter的價值應用
這是我的方法。
我正在使用新的音頻單元V3 API。我創建了一個我AUAudioUnit
的initWithComponentDescription
的AUParameter
:
創建參數
AUParameter *param1 = [AUParameterTree createParameterWithIdentifier:@"frequency"
name:@"Frequency"
address:frequencyAddress
min:500
max:5000
unit:kAudioUnitParameterUnit_Hertz
unitName:nil
flags:0
valueStrings:nil
dependentParameters:nil];
設置的默認值..
param1.value = 0.5;
一些參數的參數構造函來自...
Some S泰特
我已經定義的地址作爲全局常量:
const AudioUnitParameterID frequencyAddress = 0;
和本地變量的AUValue
:
AUValue frequency = 1;
在這一點請記住,我只是跟隨在整個互聯網上使用Audio Unit V3的三個示例項目。我發現很難拼湊出整個AU參數跳舞應該只從閱讀文檔開始。
與參數渲染
現在,當涉及到使用與AUParameter
「參數1」相關聯的AUValue
,(我認爲這就是它是如何工作的?)..
我再捕獲這AUValue
(我不清楚它如何與實際AUParameter
相關聯的局部變量)..在我的音頻單元渲染塊:
- (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..
從主機應用
這就是問題出現控制參數。
我宣佈一個本地引用到AUParameter
:
@interface ViewController(){
AudioEngine *_audioEngine;
AUParameter * _param1;
}
當我的音頻引擎類實例化我的AUAudioUnit
將其傳遞給我:
[_audioEngine setupAUWithComponentDescription:desc andCompletion:^(AUAudioUnit * unit){
_param1 = [unit.parameterTree valueForKey:@"frequency"];
}];
沒有影響?
現在,當我說:
[_param1 setValue: 1000];
拍攝的AUValue
在我的渲染塊是一樣的!
我已經忽略了一個錯誤,一個盲目的類型(我可能在這個問題中引入了一個類型來記住我的問題,所以記住),或者我從根本上誤解了這個機制。
如果我需要爲這個問題提供更多的上下文,我可以輕鬆地將項目推送到Github。
在此先感謝。