AUHostMusicalContextBlock“访问此属性的音频单元应在开始渲染之前将其缓存在实时安全的存储中”

问题描述

当使用AVFoundation MusicalContextBlock参数时,Apple会说:

“访问此属性的音频单元应在开始渲染之前将其缓存在实时安全的存储中。”

这是什么意思?

我正在尝试实现允许音频单元检索定时信息的回调。然而。我得到的结果参差不齐。也就是说,如果我在多个AudioUnit上设置MusicalContextBlock,则只有最后一个可以成功访问回调。其他人不称呼它。好像最新的音频单元正在“接管”该功能。

  public func contextBlock() -> AUHostMusicalContextBlock {
        func getMusicalContext(currentTempo : UnsafeMutablePointer<Double>?,timeSignatureNumerator : UnsafeMutablePointer<Double>?,timeSignatureDenominator : UnsafeMutablePointer<Int>?,currentBeatPosition: UnsafeMutablePointer<Double>?,sampleOffsetToNextBeat : UnsafeMutablePointer<Int>?,currentMeasureDownbeatPosition: UnsafeMutablePointer<Double>?) -> Bool {
            if self.delegate == nil { return false }
            let context = self.delegate!.musicalContext
            currentTempo?.pointee = context.currentTempo
            timeSignatureNumerator?.pointee = context.timeSignatureNumerator
            timeSignatureDenominator?.pointee = context.timeSignatureDenominator
            currentBeatPosition?.pointee = context.currentBeatPosition
            sampleOffsetToNextBeat?.pointee = context.sampleOffsetToNextBeat
            currentMeasureDownbeatPosition?.pointee = context.currentMeasureDownbeatPosition
            return true
        }
        return getMusicalContext
    }

    public func instrument(description: AudioComponentDescription) -> AVAudioUnitMIDIInstrument{
        let plugin = AVAudioUnitMIDIInstrument(audioComponentDescription: description)
        plugin.auAudioUnit.musicalContextBlock = contextBlock()
        return plugin
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)