【问题标题】:Lazy var for playing audio when reference image is detected检测到参考图像时播放音频的惰性变量
【发布时间】:2020-11-22 10:37:16
【问题描述】:

我想播放参考图像中的单个音频文件。

我会使用lazy var 来加载音频文件然后使用

func getNode(withImageName name: String) 

触发播放哪个音频?

【问题讨论】:

    标签: swift augmented-reality scenekit arkit realitykit


    【解决方案1】:

    是的,你可以。

    如果你想知道如何使用SceneKit positional audio,请阅读this post

    如果您在应用中使用 RealityKit positional audio,请阅读 this post


    让我们看看lazy var 的代码是什么样子的:

     lazy var geoAndAudioNode: SCNNode = {
        
        guard let scene: SCNScene = SCNScene(named: "pixar.usdz"),
              let node: SCNNode = scene.rootNode.childNode(withName: "model", 
                                                        recursively: true)
        else { return SCNNode() }
        
        let myPath = Bundle.main.path(forResource: "audio", ofType: "mp3")
        let myURL = URL(fileURLWithPath: myPath!)
        let mySource = SCNAudioSource(url: myURL)!
        
        let audioNode = SCNNode()
        let player = SCNAudioPlayer(source: mySource)
        node.addChildNode(audioNode)
        audioNode.addAudioPlayer(player)
        
        return node
    }()
    

    下面是您的代码在 renderer 方法中的样子:

    extension ViewController: ARSCNViewDelegate {
        
        func renderer(_ renderer: SCNSceneRenderer,
                     didAdd node: SCNNode,
                      for anchor: ARAnchor) {
            
            guard let imageAnchor = anchor as? ARImageAnchor,
                  let imageName = imageAnchor.referenceImage.name
            else { return }
                        
            let geometryNode = retrieveNode(name: imageName)
            node.addChildNode(geometryNode)
        }
        
        func retrieveNode(name: String) -> SCNNode {
            
            var node = SCNNode()
            
            switch name {
                case "geoAndAudioImage": node = geoAndAudioNode
                default: break
            }
            return node
        }
    }
    

    【讨论】:

    • 我能够通过类似的代码和一些教程偶然发现它。有很多东西要学,这些帖子也会很有帮助。
    • 我应该在这里评论该帖子以获得scenekit位置音频还是先点击帖子然后评论?
    • "let myURL = URL(fileURLWithPath: myPath!)" 即使我加载了在我创建的其他项目中播放的音频文件,它似乎也找不到音频。
    • let myPath = Bundle.main.path(forResource: "冰雹玛丽祈祷单声道", ofType: "mp3") let myURL = URL(fileURLWithPath: myPath!) let mySource = SCNAudioSource(url: myURL )!
    • 请通过 FilesSharing 资源将此文件发送给我。我会测试它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多