Audio 带位置音频的ARKit SceneKit ARSCNView播放器不会停止播放

Audio 带位置音频的ARKit SceneKit ARSCNView播放器不会停止播放,audio,scenekit,arkit,arscnview,Audio,Scenekit,Arkit,Arscnview,使用ARSCNView运行ARKit 2.0。iOS12 应用程序使用多线程,这就是为什么这些函数在主线程上执行(只是为了确保)。我也尝试过在主线程上不显式执行函数,但没有效果 我正在使用.aiff声音文件,但也尝试了.wav。没有快乐 我甚至尝试从节点层次结构中删除audioNode_警报&声音仍然播放。我甚至从视图层次结构中删除了ARSCNView,声音仍在播放。自由流 据我所见,我正在做我应该做的事情,阻止音频播放。无论我尝试什么,音频都不会停止。谁能想到为什么 weak var audi

使用ARSCNView运行ARKit 2.0。iOS12 应用程序使用多线程,这就是为什么这些函数在主线程上执行(只是为了确保)。我也尝试过在主线程上不显式执行函数,但没有效果

我正在使用.aiff声音文件,但也尝试了.wav。没有快乐

我甚至尝试从节点层次结构中删除audioNode_警报&声音仍然播放。我甚至从视图层次结构中删除了ARSCNView,声音仍在播放。自由流

据我所见,我正在做我应该做的事情,阻止音频播放。无论我尝试什么,音频都不会停止。谁能想到为什么

weak var audioNode_alarm: SCNNode!
weak var audioPlayer_alarm: SCNAudioPlayer?

func setupAudioNode() {

    let audioNode_alarm = SCNNode()
    addChildNode(audioNode_alarm)
    self.audioNode_alarm = audioNode_alarm

}

func playAlarm() {

    DispatchQueue.main.async { [unowned self] in

        self.audioNode_alarm.removeAllAudioPlayers()

        if let audioSource_alarm = SCNAudioSource(fileNamed: "PATH_TO_MY_ALARM_SOUND.aiff") {

            audioSource_alarm.loops = true
            audioSource_alarm.load()
            audioSource_alarm.isPositional = true
            let audioPlayer_alarm = SCNAudioPlayer(source: audioSource_alarm)
            self.audioNode_alarm.addAudioPlayer(audioPlayer_alarm)
            self.audioPlayer_alarm = audioPlayer_alarm

        }

    }

}

func stopAlarm() {

    DispatchQueue.main.async { [unowned self] in

        self.audioNode_alarm?.removeAudioPlayer(self.audioPlayer_alarm!)
        self.audioNode_alarm?.removeAllAudioPlayers()

    }

}

我最后做的是停止声音,并通过

yourNode.audioPlayers.forEach { audioLocalPlayer in
  audioLocalPlayer.audioNode?.engine?.stop()
  yourNode.removeAudioPlayer(audioLocalPlayer)
}
据文件所述,它应该被用来“在播放过程中实时改变音量和混响等参数”


audioNode是AVAudioNode类型,因此如果我们跳到prop及其定义,我们将找到所有需要的控件

我终于要测试一下了。你正中要害。我需要的正是audioLocalPlayer.audioNode?.engine?.stop()。谢谢:)