在installTapOnBus()方法内部我不能做什么?
如果您引用WWDC 2016演讲:@ 31分钟,提供卓越的音频体验,它会提到实时音频,我不需要创建线程或分配任何内存。
这个article也提到了这一点。
这里的游戏名称是将您可以移动的所有内容移出渲染块,并移入Initialize函数。
这包括分配内存块和调用系统功能之类的事情。
这是我的示例代码:
inputNode?.installTap(onBus: bus,
bufferSize: myTapOnBusBufferSize,
format: theAudioFormat) {
(buffer: AVAudioPCMBuffer!,
time: AVAudioTime!) -> Void in
theShowInfo.audioFormat = theAudioFormat
self.onNewBuffer(buffer)
}
这是否意味着在我的onNewBuffer()函数内部
我无法输入以下内容
var myStringArray = ["",""]
或这个 ..
DispatchQueue.main.async(qos: .userInteractive) {
}
或这个?
NotificationCenter.default.post(name: Notification.Name(rawValue: MyNotificationIdentifier), object: nil)
这是否意味着如果我将在线程中进行这些调用并分配内存,否则我的应用程序将崩溃?
这是否意味着如果我执行fft算法,我需要在onNewBuffer函数的线程中制作fft的所有代码?
最佳答案
不会在音频渲染线程上调用给InstallTapOnBus的闭包,因此您不必担心这里的锁定。使用C API设置渲染回调。如果您使用的是渲染回调,则可以,避免使用任何Swift函数,Objective-C消息,对ObjC对象(ARC)拥有所有权的分配,分配或其他可能需要锁定或可能花费太长时间才能完成的操作返回。