将音频文件附加到多个3D对象以获得空间音频

时间:2019-07-11 07:12:16

标签: swift avfoundation scenekit augmented-reality arkit

在Apple的示例项目Placing Objects and Handling 3D Interaction之后,我想向3D对象添加音频文件。具体而言,其想法是为每个放置的对象触发一个音频文件,以使场景成为空间音景。在没有示例项目的情况下,我尝试了多种方法,但是由于缺乏iOS / Swift开发知识,我无法实现具有凝聚力的项目。

在示例项目中,有多个View Controllers和一个VirtualObject: SCNReferenceNode类可帮助加载对象(最初使我感到困惑)。我现在面临的一些问题是我不确定如何解决以下问题:

  • 我应该在哪个课程中实例化SCNAudioSource并进行设置?
  • 我是否必须创建一个单独的类来实现音频会话属性/功能,扩展视图控制器或扩展VirtualObject类?
  • 如何将特定的音频文件附加到每个对象?目前,它们是通过以下方式加载的:
    static let availableObjects: [VirtualObject] = {
        let modelsURL = Bundle.main.url(forResource: "Models.scnassets", withExtension: nil)!

        let fileEnumerator = FileManager().enumerator(at: modelsURL, includingPropertiesForKeys: [])!

        return fileEnumerator.compactMap { element in
            let url = element as! URL

            guard url.pathExtension == "scn" && !url.path.contains("lighting") else { return nil }

            return VirtualObject(url: url)
        }
    }()

我尝试过尝试一下,并在AVAudioEngine类中实例化了VirtualObject

    var audioNode: AVAudioEngine = AVAudioEngine()
    var active: Bool = false {
        didSet {
            if(active) {
                self.audioNode.prepare()
            } else {
                self.audioNode.pause()
            }
        }
    }

但是我不确定该怎么做。

0 个答案:

没有答案