我想在kAudioUnitType_MusicEffect
图表中使用我的AVAudioEngine
AU。所以我试着打电话:
[AVAudioUnitMIDIInstrument instantiateWithComponentDescription:desc options:kAudioComponentInstantiation_LoadInProcess completionHandler:
但是这只是正常AVAudioUnit
,所以midi选择器(如 - [AVAudioUnit sendMIDIEvent:data1:data2:]:
)无法识别。似乎AVAudioUnitMIDIInstrument instantiateWithComponentDescription
仅适用于kAudioUnitType_MusicDevice
。
有什么办法吗? (注:OS X 10.11)
答案 0 :(得分:0)
创建一个子类并从其init。
调用instantiateWithComponentDescription 中的Gory详细信息和github项目http://www.rockhoppertech.com/blog/multi-timbral-avaudiounitmidiinstrument/#avfoundation
这使用Swift和kAudioUnitSubType_MIDISynth但您可以看到如何操作。
答案 1 :(得分:0)
这很有效。它是一个子类。您将它添加到引擎并通过它路由信号。
class MyAVAudioUnitDistortionEffect: AVAudioUnitEffect {
override init() {
var description = AudioComponentDescription()
description.componentType = kAudioUnitType_Effect
description.componentSubType = kAudioUnitSubType_Distortion
description.componentManufacturer = kAudioUnitManufacturer_Apple
description.componentFlags = 0
description.componentFlagsMask = 0
super.init(audioComponentDescription: description)
}
func setFinalMix(finalMix:Float) {
let status = AudioUnitSetParameter(
self.audioUnit,
AudioUnitPropertyID(kDistortionParam_FinalMix),
AudioUnitScope(kAudioUnitScope_Global),
0,
finalMix,
0)
if status != noErr {
print("error \(status)")
}
}