【问题标题】:What I can not do inside of an installTapOnBus () method?在 installTapOnBus () 方法中我不能做什么?
【发布时间】:2017-05-26 05:31:10
【问题描述】:

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

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

此外,article 也提到了这一点。

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

这是我的示例代码:

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的所有代码?

【问题讨论】:

  • 在第 502 课 - 实践中的 AVAudioEngine => 在 22 分钟内。在水龙头块内部说我可以用这些数据做任何我需要做的事情

标签: ios audio avfoundation core-audio


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2018-10-24
    • 2020-08-05
    • 2019-06-01
    • 2020-03-22
    相关资源
    最近更新 更多