Следуя примеру проекта 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()
}
}
}
Однако я не уверен, как это сделать.