swift - AUHostMusicalContextBlock “访问此属性的音频单元应在开始渲染之前将其缓存在实时安全存储中。”
问题描述
当使用 AVFoundation MusicalContextBlock 参数时,Apple 说:
“访问此属性的音频单元应在开始渲染之前将其缓存在实时安全存储中。”
这是什么意思?
我正在尝试实现允许音频单元检索时间信息的回调。然而。我得到的结果参差不齐。也就是说,如果我在几个 AudioUnits 上设置 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
}
解决方案
我不确定这里发生了什么。
想要使用的音频单元musicalContextBlock
很可能想要使用它的渲染功能。但他们不应该直接在渲染函数中访问该属性。
AudioUnit 可以实现allocateRenderResourcesAndReturnError
,主机应该在每次渲染之前调用。在那里它可以安全地检查是否musicalContextBlock
已设置,如果是,则将其存储在渲染函数中以供稍后使用。
您确定allocateRenderResourcesAndReturnError
在进行渲染之前调用每个 AudioUnit 吗?
推荐阅读
- javascript - AJAX 调用转到文件位置而不是实际 URL
- c# - 围绕鼠标点缩放自绘窗口
- python - Marshmallow_MongoEngine:ModuleNotFoundError:没有名为“marshmallow.compat”的模块
- arrays - 雄辩的 where 子句不采用关联数组
- android - (React-Native 0.62.0)无法找到项目的匹配变体:react-native-community_async-storage(其他库也一样)
- javascript - LitElement - 如果值为 false,则不要添加属性
- r - 在 R 中对多个条件使用 rle() 函数
- java - Java Spark Map 错误:错误执行程序:阶段 0.0 spark scala 中的任务 0.0 异常?
- r - 在 R 的上下文中,波浪号是什么?
- java - 片段在活动上重叠