我正在玩 Apple 的示例项目“LoadPresetDemo”。我已将混响音频单元添加AudioUnit kAudioUnitSubType_Reverb2
到图表中,这是唯一可用的 iOS 混响。在 CoreAudio 头文件“AudioUnitParameters.h”中,它声明 Reverb2 应该响应这些参数:
enum {
// Global, CrossFade, 0->100, 100
kReverb2Param_DryWetMix = 0,
// Global, Decibels, -20->20, 0
kReverb2Param_Gain = 1,
// Global, Secs, 0.0001->1.0, 0.008
kReverb2Param_MinDelayTime = 2,
// Global, Secs, 0.0001->1.0, 0.050
kReverb2Param_MaxDelayTime = 3,
// Global, Secs, 0.001->20.0, 1.0
kReverb2Param_DecayTimeAt0Hz = 4,
// Global, Secs, 0.001->20.0, 0.5
kReverb2Param_DecayTimeAtNyquist = 5,
// Global, Integer, 1->1000
kReverb2Param_RandomizeReflections = 6,
};
在 AUGraph 初始化并启动后,一切都编译好了,我听到了声音。
接下来,我更改 kReverb2Param_DryWetMix 参数(更改为完全湿混):
AudioUnitSetParameter(_reverbUnit, kAudioUnitScope_Global, 0, kReverb2Param_DryWetMix, 100.0f, 0);
一切都好,我听到的声音带有完整的湿混合混响。
现在听到的是我遇到问题的地方。尝试更改除kReverb2Param_DryWetMix
错误代码以外的任何参数时-10877
。似乎头文件中列出的这些其他参数实际上并不存在。
例如,调用
AudioUnitSetParameter(_reverbUnit, kAudioUnitScope_Global, 0, kReverb2Param_DecayTimeAtNyquist, 20.0f, 0)
抛出-10877
错误。
这是一个错误吗?我是否省略了任何音频框架?我没有导入特定的音频头吗?
当前包含的音频框架是 AVFoundation 和 AudioToolbox。当前的音频导入是
#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>
#import <CoreAudio/CoreAudioTypes.h>
我已经搜索了谷歌没有解决方案。我知道当 Google 路由失败时我会遇到问题。任何帮助将不胜感激。
注意:我用模拟器和 iPhone 4S 设备测试过,同样的问题。
更新:我试过了
AudioUnitGetParameter(_reverbUnit, kReverb2Param_DecayTimeAtNyquist, kAudioUnitScope_Global, 0, &value)
它返回一个值0.500000
,这意味着该属性确实存在。那么我在设置值时做错了什么?