首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为AVAudioUnit的kAudioUnitType_MusicEffect

作为AVAudioUnit的kAudioUnitType_MusicEffect
EN

Stack Overflow用户
提问于 2016-05-14 06:55:50
回答 2查看 286关注 0票数 0

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

代码语言:javascript
复制
[AVAudioUnitMIDIInstrument instantiateWithComponentDescription:desc options:kAudioComponentInstantiation_LoadInProcess completionHandler:

但这只是一个普通的AVAudioUnit,所以midi选择器(如-[AVAudioUnit sendMIDIEvent:data1:data2:]:)是无法识别的。似乎只有kAudioUnitType_MusicDevice才能使用AVAudioUnitMIDIInstrument instantiateWithComponentDescription

有办法做到这一点吗?(注: OS X 10.11)

EN

回答 2

Stack Overflow用户

发布于 2016-05-16 20:19:09

创建一个子类,并从它的初始化调用instantiateWithComponentDescription。

blog post中的Gory details和github项目

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

这使用了Swift和kAudioUnitSubType_MIDISynth,但你可以看看怎么做。

票数 0
EN

Stack Overflow用户

发布于 2016-05-18 03:18:09

这是可行的。它是一个子类。你将它添加到引擎中,然后通过它路由信号。

代码语言:javascript
复制
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)")
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37220499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档