AudioUnit子类型上的设置速率kAudioUnitSubType_NewTimePitch
问题描述:
我试图获取/设置子类型为kAudioUnitSubType_NewTimePitch
的AudioUnit的速率。AudioUnit子类型上的设置速率kAudioUnitSubType_NewTimePitch
音频单元被添加到AUGraph
,通过AUNode
,其具有以下组分的描述:
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单元。
任何想法?
答
事实证明,音频单元的类型是错误的。
我更改为kAudioUnitType_FormatConverter
为类型并保持相同的子类型。
无论是获取/设置速度现在按预期工作。
我还不清楚为什么我没有得到任何错误,既没有设置音频设备,也没有设置速率值。
我会将此答案标记为正确,但欢迎评论和回答:) – Vince