使用AVAudioEngine快速托管AUv3在iOS模拟器中崩溃

问题描述

我启动了一个新的iOS应用程序,其中托管了一个通过AudioUnit Extension创建的AUv3插件。我基本上是使用Apple提供给我的模板。我的主要应用程序是托管AUv3。以下代码可在我的设备(iPad Pro 11-iOS 14)上运行,但在模拟器(iPhone 11-iOS 14)中则收到以下错误消息:

2020-10-15 21:07:36.786306 + 0200 MyApp [2132:84039] [插件] AddInstanceForFactory:没有为id F8BB1C28-BAE8-11D6-9C31-00039315CD46

2020-10-15 21:07:37.124600 + 0200 MyApp [2132:83972]例外: os_eventlink_activate失败(45)

2020-10-15 21:07:37.125009 + 0200 MyApp [2132:83972] [i-aa] AUAudioUnit_xpc.mm:665:-[AUAudioUnit_xpc allocateRenderResourcesAndReturnError:]:渲染管道用户创建 失败(Error Domain = NSOsstatusErrorDomain Code = -1“(null)”)

2020-10-15 21:07:37.125389 + 0200 MyApp [2132:83972] [avae]
AVAEInternal.h:109 [AVAudioEngineGraph.mm:1389:Initialize:(err = AUGraPHParser ::: InitializeActiveNodesInOutputChain(ThisGraph, kOutputChainoptimizedTraversal,* GetoutputNode(), isOutputChainActive)):错误-1错误:无法进行该操作 完成。 (com.apple.coreaudio.avfaudio错误-1。)

ViewController.swift

import UIKit
import AVFoundation
import CoreAudioKit


class ViewController: UIViewController {

    @IBOutlet weak var auView: UIView!
    
    var avUnit:AVAudioUnit?
    var engine:AVAudioEngine!
        
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.engine = AVAudioEngine()
        
        do {
            try AVAudioSession.sharedInstance().setMode(.default)
            try AVAudioSession.sharedInstance().setPreferredSampleRate(44100)
            try AVAudioSession.sharedInstance().setCategory(.playback,options: [.allowBluetooth,.allowBluetoothA2DP,.mixWithOthers])
            try AVAudioSession.sharedInstance().setActive(true)
            
        }catch let error{
            print("error \(error.localizedDescription)")
        }
        
        // Retrieve audio unit components by description.
        let description = AudioComponentDescription(componentType: kAudioUnitType_MusicDevice,componentSubType: 0x6775616e,componentManufacturer: 0x5775616e,componentFlags: 0,componentFlagsMask: 0)
        
        
        AVAudioUnit.instantiate(with: description,options: []) { avAudioUnit,error in
            
            guard error == nil else {
                dispatchQueue.main.async { /* Show error message to user. */ }
                return
            }
            
            guard let aUnit = avAudioUnit else { return }
            self.avUnit = aUnit
            
            //let format = AVAudioFormat(commonFormat: .pcmFormatFloat32,sampleRate: 44100,channels: 2,interleaved: false)!
            let formatOutput = self.engine.mainmixerNode.outputFormat(forBus: 0)
            let formatAU = aUnit.outputFormat(forBus: 0)

            self.engine.attach(aUnit)
            self.engine.connect(aUnit,to: self.engine.mainmixerNode,format: formatAU)
            self.engine.connect(self.engine.mainmixerNode,to: self.engine.outputNode,format: formatOutput)
            
            
            do {
                
                try self.engine.start()
                
            } catch let error {
                print(error.localizedDescription)
            }
            
            self.addpluginView()

        }
        
    }
    
    
    private func addpluginView() {

        self.avUnit?.auAudioUnit.requestViewController(completionHandler: { plugInViewController in
            
            if plugInViewController != nil{
                
                if let pluginView = plugInViewController!.view{
                    
                    pluginView.frame = self.auView.bounds
                    self.auView.addSubview(pluginView)
                    
                }
                
            }
            
        })
        
    }
    
}

AVAudioEngine ..内部是否有问题? 任何帮助表示高度赞赏。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...