在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)拥有所有权的分配,分配或其他可能需要锁定或可能花费太长时间才能完成的操作返回。

09-29 21:50