设置 AudioUnit 子类型的速率 kAudioUnitSubType_NewTimePitch

Setting rate on AudioUnit subtype kAudioUnitSubType_NewTimePitch

我正在尝试 get/set 子类型为 kAudioUnitSubType_NewTimePitch 的 AudioUnit 的速率。

音频单元通过 AUNode 添加到 AUGraph,它具有以下组件描述:

acd->componentType = kAudioUnitType_Effect;
acd->componentSubType = kAudioUnitSubType_NewTimePitch;
acd->componentManufacturer = kAudioUnitManufacturer_Apple;

根据 AudioUnitParameters.h,get/set 速率应该与 get/set 音频单元上的速率参数一样简单。

// rate control.
// Global, rate, 1/32 -> 32.0, 1.0
kNewTimePitchParam_Rate                         = 0,

但是,虽然设置值似乎没有问题(没有返回错误),但获取值会产生一个 OSStatus,值为 -10878 (kAudioUnitErr_InvalidParameter)

我是这样设置值的:

- (void)setTempo:(float)value {
    OSStatus err = noErr;
    err = AudioUnitSetParameter(tempoUnit, kNewTimePitchParam_Rate, kAudioUnitScope_Global, 0, (Float32)value, 0);
    if (err != noErr) {
        NSLog(@"Could not set tempo unit rate: %d", err);
    } // no error
}

以及我是如何(尝试)得到它的:

- (float)tempo {
    OSStatus err = noErr;
    Float32 value = 1.0;
    err = AudioUnitGetParameter(tempoUnit, kNewTimePitchParam_Rate, kAudioUnitScope_Global, 0, &value);
    if (err != noErr) {  // -10878
        NSLog(@"Could not get tempo unit rate: %d", err);
    }
    return value;
}

节点的输入连接到混频器节点,输出连接到 RemoteIO 单元。

有什么想法吗?

原来Audio Unit的类型不对。

我将类型更改为 kAudioUnitType_FormatConverter,并保留相同的子类型。

两个 get/set 速度现在都按预期工作。

我仍然不清楚为什么我没有收到任何错误,无论是在设置音频单元时还是在设置速率值时。