Прикрепление аудиофайлов к нескольким трехмерным объектам для пространственного аудио - PullRequest
0 голосов
/ 11 июля 2019

Следуя примеру проекта Apple Размещение объектов и обработка 3D-взаимодействия Я хочу добавить аудиофайлы к 3D-объектам. В частности, идея состоит в том, чтобы запустить аудиофайл для каждого размещенного объекта, чтобы сцена стала пространственным звуковым пейзажем. Я попробовал несколько подходов без примера проекта, но мне не удалось реализовать связный проект из-за недостатка знаний в области разработки под iOS / Swift.

В примере проекта есть несколько View Controllers и класс VirtualObject: SCNReferenceNode, который помогает с загрузкой объектов (это поначалу меня смутило). Некоторые проблемы, с которыми я сталкиваюсь сейчас, заключаются в том, что я не уверен, как поступить следующим образом:

  • В каком классе я должен создать свой экземпляр SCNAudioSource и настроить его?
  • Нужно ли создавать отдельный класс для реализации атрибутов / функций аудиосеанса, расширения View Controller или расширения класса 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()
            }
        }
    }

Однако я не уверен, как это сделать.

...