我正在开发一项功能,使用
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;
我不知道该怎么做。有什么建议吗?
这并不简单,因为您想在包装效果的 AudioUnit 中调用 swift 外部的 c 代码。看看 DunneAudioKit,例如:
/来源/DunneAudioKit/StereoDelay.swift
/来源/CDunneAudioKit/StereoDelayDSP.mm
/Sources/CDunneAudioKit/DunneCore/调制延迟/StereoDelay.cpp