如何在AudioKit中实现自定义音频效果节点?

问题描述 投票:0回答:1

我正在开发一项功能,使用

AudioKit 5.6
在麦克风上应用实时效果,用户可以更改其值。

这是一个例子:

private func initializeEffects() {
        guard let inputNode = engine.input else { return }
        fader = Fader(inputNode, gain: 1)
        
        compressor = Compressor(fader)
        compressor.masterGain = 0

        dynamicRangeCompressor = DynamicRangeCompressor(compressor)
        dynamicRangeCompressor.ratio = 100
        dynamicRangeCompressor.attackDuration = 0.01
        dynamicRangeCompressor.releaseDuration = 0.1
        
        dynamicRangeCompressorDryWetMixer = DryWetMixer(compressor, dynamicRangeCompressor)
        dynamicRangeCompressorDryWetMixer.balance = 0.75
        
        bandPassButterworth = BandPassButterworthFilter(dynamicRangeCompressorDryWetMixer)
        bandPassButterworth.bandwidth = 4000
        bandPassButterworth.centerFrequency = 0
        
        delay = Delay(bandPassButterworth)
        delay.feedback = 20
        delay.time = 0.25
        delay.dryWetMix = 100
        
        delayDryWetMixer = DryWetMixer(bandPassButterworth, delay)
        delayDryWetMixer.balance = 0
        
        reverb = Reverb(delayDryWetMixer)
        reverb.dryWetMix = 0
        reverb.loadFactoryPreset(.largeChamber)
        
        pitchShifter = PitchShifter(reverb)
        
        flanger = Flanger(pitchShifter)
        flanger.frequency = 1
        flanger.depth = 1
        flanger.feedback = 0
        flanger.dryWetMix = 1
        
        flangerDryWetMixer = DryWetMixer(pitchShifter, flanger)
        flangerDryWetMixer.balance = 0.5
        
        stringResonator = StringResonator(flangerDryWetMixer)
        stringResonator.feedback = 0.9
        
        stringResonatorDryWetMixer = DryWetMixer(flangerDryWetMixer, stringResonator)
        stringResonatorDryWetMixer.balance = 0
        
        engine.output = stringResonatorDryWetMixer
    }

现在我想创建一个自定义音调校正效果并将其添加到链中。我有一个 Objective-C++ 库,它采用音频缓冲区并返回修改后的缓冲区:

- (void)processStereo:(const float *)srcL leftDestination:(float *)dstL rightSource:(const float *)srcR rightDestination:(float *)dstR numSamples:(int)nsmp;

我不知道该怎么做。有什么建议吗?

swift audiokit
1个回答
0
投票

这并不简单,因为您想在包装效果的 AudioUnit 中调用 swift 外部的 c 代码。看看 DunneAudioKit,例如:

  • /来源/DunneAudioKit/StereoDelay.swift

  • /来源/CDunneAudioKit/StereoDelayDSP.mm

  • /Sources/CDunneAudioKit/DunneCore/调制延迟/StereoDelay.cpp

© www.soinside.com 2019 - 2024. All rights reserved.