Как я могу приостановить воспроизведение SCNAudioPlayer в ARKit?

Я пытаюсь реализовать кнопку воспроизведения/паузы для позиционного звука, прикрепленного к узлу в сцене ARKit. Я хочу, чтобы пользователь мог приостановить звук, а затем возобновить его с точки паузы позже. Так removeAudioPlayer()это нехорошо, так как это сбрасывает звук обратно к началу, когда он снова подключен.

Единственный метод паузы, связанный с SCNAudioPlayers, который я могу найти, скрыт глубоко внутри:

      myAudioPlayer.audioNode?.engine?.pause()

Но это, кажется, не имеет никакого эффекта. странно

      myAudioPlayer.audioNode?.engine?.stop()

Останавливает воспроизведение звука, но после этого вы не можете запустить его снова!

Мой код для создания audioPlayer выглядит следующим образом:

      audioSource = SCNAudioSource(fileNamed: "audio.caf")!
audioSource.loops = false
audioSource.isPositional = true
audioSource.shouldStream = false
audioSource.load()
// then a bit later...
audioPlayer = SCNAudioPlayer(source: audioSource)
myARNode.addAudioPlayer(audioPlayer)

Обратите внимание, что метод «play» не требуется. Звук просто начинает воспроизводиться, как только вы подключаете его к узлу. И отсутствие прямых методов play() и pause() в качестве свойств верхнего уровня SCNAudioPlayer заставляет задуматься, возможно ли это вообще. Однако это кажется немного безумным, поскольку это довольно рудиментарный аспект работы со звуком.

Кто-нибудь знает, можно ли это сделать?

Заранее спасибо.

1 ответ

Чтобы остановить звуковой движок, используйте 2-секундную задержку. Пауза здесь не работает (я использую Xcode 12.2).

      DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
    player.audioNode?.engine?.stop()
}
Другие вопросы по тегам