从主机设置AUParameter的价值应用
的问题
我试图获得新的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。
在此先感谢。
这个问题最终与Core Audio无关,一切都与基本的语言级错误有关。
frequency
被宣布在这样的文件级别范围:
AUValue frequency = 1;
@implementation MyAudioUnit
@end
我的理解是,frequency
现在绑定到文件的范围,而不是实例范围内。因此,在不同实例上重复设置它只是覆盖以前的值。因此,最后一项任务是呈现的频率。