在 installTapOnBus () 方法中我不能做什么?

use*_*ser 2 audio core-audio avfoundation ios

我在 installTapOnBus() 方法中不能做什么?

如果您参考讲座 WWDC 2016 Delivering an Exceptional Audio Experience @ :31 分钟,它提到在实时音频中我不需要创建线程或分配任何内存。

这篇文章也提到了这一点。

这里的游戏名称是将任何可以移动的东西从渲染块移到初始化函数中。这包括分配内存块和调用系统函数之类的事情。

这是我的示例代码:

inputNode?.installTap(onBus: bus,
                 bufferSize: myTapOnBusBufferSize,
                     format: theAudioFormat) {

            (buffer: AVAudioPCMBuffer!,
               time: AVAudioTime!) -> Void in
            theShowInfo.audioFormat = theAudioFormat

            self.onNewBuffer(buffer)
        }
Run Code Online (Sandbox Code Playgroud)

这是否意味着在我的 onNewBuffer() 函数内部

我无法输入以下内容

var myStringArray = ["",""]
Run Code Online (Sandbox Code Playgroud)

或这个 ..

DispatchQueue.main.async(qos: .userInteractive) {

        }
Run Code Online (Sandbox Code Playgroud)

或这个?

NotificationCenter.default.post(name: Notification.Name(rawValue: MyNotificationIdentifier), object: nil)
Run Code Online (Sandbox Code Playgroud)

这是否意味着如果我在线程中执行这些调用并分配内存,我的应用程序将会崩溃?

这是否意味着如果我执行 fft 算法,我需要在 onNewBuffer 函数的线程中编写 fft 的所有代码?

dav*_*234 5

音频渲染线程上不会调用 InstallTapOnBus 的闭包,因此您不必担心此处的锁。渲染回调是使用 C API 设置的。如果您使用渲染回调,那么是的,您将避免任何 Swift 函数、Objective-C 消息、获取 ObjC 对象 (ARC) 所有权的分配、分配或任何其他可能需要锁定或可能需要很长时间才能完成的操作。返回。