我无法正确连接audiokit 5.5中的输出

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

我对audiokit很陌生,所以请原谅我……我想做的是一个应用一系列音频效果的应用程序。假设我有一个文件音频(或麦克风或两者):

  1. 我需要分割左右通道
  2. 有幅度检查来验证音频信号是否高于或低于阈值
  3. 有两次延误。延迟 1 和延迟 2。
  4. 如果信号高于阈值,则由一个均衡器进行均衡,否则由另一个均衡器进行均衡。根据延迟,左声道输入和右声道输入可以独立地在均衡器 1 或 2 之间切换。左声道输入的输出在均衡之后应该是相应的左声道输出,右声道输入也应该发生同样的情况。当然,代码不会出现任何错误,但是当我尝试在模拟器中测试应用程序时,应用程序崩溃了 - 告诉我正在尝试启动引擎而没有设置正确的输出。我不知道该怎么办...谢谢!

线程在这一行

engine.output = 立体声输出混合器

这里是我写的类的初始化:

var audioFilePlayer:音频播放器?

音频处理器类:ObservableObject { var 引擎:AudioEngine var mic: AudioEngine.InputNode! 变种混合器:混合器

var equalizer1: Equalizer
var equalizer2: Equalizer
    var amplitudeTap: AmplitudeTap?
var threshold: Float = 40.0
var equalizer1Mixer: Mixer
    var equalizer2Mixer: Mixer

    var leftPanner: Panner
    var rightPanner: Panner
var leftPannerMixer: Mixer
    var rightPannerMixer: Mixer

    var stereoOutputMixer: Mixer
    var delay1: Delay
    var delay2: Delay
    var highPassFilter: HighPassFilter
    var lowPassFilter: LowPassFilter
    var leftVolumeMixer: Mixer
    var rightVolumeMixer: Mixer
    var micMixer: Mixer
    var fileMixer: Mixer
    var leftOutputPanner: Panner
    var rightOutputPanner: Panner

    var isAboveThreshold: Bool = false

    var preferences: UserPreferences

init(preferences: UserPreferences = UserPreferences()) {
    // First, initialize all properties
    self.preferences = preferences
    self.engine = AudioEngine()
    self.mixer = Mixer()

    // Initialize equalizers with default frequencies
    let frequencies: [Double] = [125, 250, 500, 750, 1000, 1500, 2000, 3000, 4000, 6000, 8000]
    self.equalizer1 = Equalizer(engine: engine, input: mixer, frequencies: frequencies)
    self.equalizer2 = Equalizer(engine: engine, input: mixer, frequencies: frequencies)

    
    
    self.delay1 = Delay(equalizer1.output)
    self.delay1.time = preferences.delay1Time
    self.delay2 = Delay(equalizer2.output)
    self.delay2.time = preferences.delay2Time
    self.threshold = preferences.threshold  // Initialize threshold

    self.highPassFilter = HighPassFilter(mixer, cutoffFrequency: preferences.highPassFilterFrequency, resonance: 1)
    self.lowPassFilter = LowPassFilter(mixer, cutoffFrequency: preferences.lowPassFilterFrequency, resonance: 1)

    self.leftPanner = Panner(mixer, pan: -1)
    self.rightPanner = Panner(mixer, pan: 1)

    self.leftOutputPanner = Panner(equalizer1.output, pan: -1)
    self.rightOutputPanner = Panner(equalizer2.output, pan: 1)

    self.leftVolumeMixer = Mixer()
    self.rightVolumeMixer = Mixer()

    self.stereoOutputMixer = Mixer()

    self.micMixer = Mixer()
    self.fileMixer = Mixer()

    self.isAboveThreshold = false
    self.amplitudeTap = nil

    // Now that all properties are initialized, call methods to set up the audio chain
    // Initialize mixers for each equalizer
            equalizer1Mixer = Mixer()
            equalizer2Mixer = Mixer()

            // Initialize panners and their mixers
            leftPannerMixer = Mixer()
            rightPannerMixer = Mixer()

    
    setupDelays()
    setupFilters()
    setupPanners()
    setupVolumeControlMixers()
    setupMicAndFileMixers()
    applyEqualizerGains(preferences: preferences)
    setVolumeBalance(leftVolume: preferences.balanceVolumeLeft, rightVolume: preferences.balanceVolumeRight)
    setMicPlaybackBalance(micVolume: preferences.micGain, playbackVolume: preferences.playbackVolume)

    
    if preferences.micEnabled {
        setupMicrophone()
    }
    startEngine()
    setupInitialAudioChain()
    
    setupAmplitudeMonitoring()
    checkAmplitudeAndApplyDelays()
    applyDelaysAndSwitchEqualizers()
    engine.output = stereoOutputMixer
}
swift signal-processing audiokit
1个回答
0
投票

在设置引擎的输出之前,您正在调用

startEngine()
,其中可能包含
engine.start()
。即
engine.output = stereoOutputMixer

还要确保您已将输入添加到

stereoOutputMixer
。使用
engine.connectionTreeDescription
查看引擎的输出树。

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