0

我想在图表中使用我的kAudioUnitType_MusicEffectAU 。AVAudioEngine所以我试着打电话:

[AVAudioUnitMIDIInstrument instantiateWithComponentDescription:desc options:kAudioComponentInstantiation_LoadInProcess completionHandler:

但这只会产生 normal ,因此无法识别AVAudioUnitmidi 选择器(如 - )。[AVAudioUnit sendMIDIEvent:data1:data2:]:它似乎AVAudioUnitMIDIInstrument instantiateWithComponentDescription只适用于kAudioUnitType_MusicDevice.

有什么办法可以做到这一点?(注:OS X 10.11)

4

2 回答 2

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)")
    }
}
于 2016-05-17T19:18:09.440 回答
0

创建一个子类并从其 init 中调用 instantiateWithComponentDescription。

这篇博文中的血腥细节和 github 项目

http://www.rockhoppertech.com/blog/multi-timbral-avaudiounitmidiinstrument/#avfoundation

这使用了 Swift 和 kAudioUnitSubType_MIDISynth,但是你可以看到如何去做。

于 2016-05-16T12:19:09.223 回答