【问题标题】:Setting rate on AudioUnit subtype kAudioUnitSubType_NewTimePitch设置 AudioUnit 子类型 kAudioUnitSubType_NewTimePitch 的速率
【发布时间】:2017-06-25 08:41:07
【问题描述】:

我正在尝试获取/设置子类型为 kAudioUnitSubType_NewTimePitch 的 AudioUnit 的速率。

音频单元通过AUNode添加到AUGraph,其组件描述如下:

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

根据AudioUnitParameters.h,获取/设置速率应该和获取/设置音频单元上的速率参数一样简单。

// 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 单元。

有什么想法吗?

【问题讨论】:

    标签: ios core-audio audiounit


    【解决方案1】:

    原来音频单元的类型是错误的。

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

    get/set the tempo 现在都可以正常工作了。

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

    【讨论】:

    • 我会将此答案标记为正确,但欢迎使用 cmets 和答案 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2015-11-24
    相关资源
    最近更新 更多