ARKit 2.0 - Как остановить воспроизведение звука в SCNView? - PullRequest
0 голосов
/ 27 августа 2018

Я разрабатываю приложение AR, которое необходимо для воспроизведения звука.

Я сделал это как:

guard let audioSource = SCNAudioSource(fileNamed: "sample.mp3") else { return }
audioSource.loops = false
audioSource.load()
node.runAction(SCNAction.playAudio(audioSource, waitForCompletion: false))

Он отлично работает, за исключением того, что я не могу остановить его от игры.

Я также пробовал:

node.enumerateChildNodes { (childNode, _) in
   childNode.removeAllAudioPlayers()
   childNode.removeFromParentNode()
}

Но он все еще играет.

Кто-нибудь знает, как это остановить?

Обновление: Я уже попробовал:

guard let audioSource = SCNAudioSource(fileNamed: "sample.mp3") else {return}
audioSource.load()
player = SCNAudioPlayer(source: audioSource)
node.addAudioPlayer(player)

и удалите его так, как сказал @ Энди:

node.enumerateChildNodes { (childNode, _) in
   childNode.removeAudioPlayer(player)
   childNode.removeFromParentNode()
}

но он все еще не работает.

P.S. Я использую iOS 12 beta 9, xCode 10 beta 4 и macOS Mojave 10.14

Решение: проблема была не в ARAudio, причина была в том, что SCNAudioPlayer был добавлен непосредственно к узлу, и я пытался удалить его из дочернего узла.

1 Ответ

0 голосов
/ 27 августа 2018

Чтобы остановить воспроизведение аудио, используйте метод экземпляра removeAudioPlayer(_:). Смотрите здесь .

func removeAudioPlayer(_ player: SCNAudioPlayer)

Этот метод удаляет указанный аудиоплеер из узла, останавливая воспроизведение.

Вы также можете удалить все аудиоплееры:

func removeAllAudioPlayers()

Чтобы добавить аудиоплеер, используйте следующий метод экземпляра:

func addAudioPlayer(_ player: SCNAudioPlayer)

Этот метод добавляет указанный автоматический проигрыватель к узлу и начинает воспроизведение.

Надеюсь, это поможет!

...