Я пытаюсь понять, как изменить громкость SCNAudioPlayer
в реальном времени.
В настоящее время у меня SCNAudioSource
подключен к SCNAudioPlayer
. Затем этот аудиоплеер назначается SCNNode
, чтобы в моем звуке использовалась пространственная обработка звука SceneKits.
В нынешнем виде я могу изменять громкость каждого SCNNode
, используя SCNAudioSource.volume
, запускаемый логической переменной vol
. Отрывок из моего кода для этого показан ниже:
(audioSource, audioCount) = soundFileSelect(audioFileIndex: 0)
audioSource?.isPositional = true
if vol {
audioSource?.volume = 1.0
}
else {
audioSource?.volume = 0.0
}
let audioPlayer = SCNAudioPlayer(source: audioSource!)
geometryNode.addAudioPlayer(audioPlayer)
let play = SCNAction.playAudio(audioSource!, waitForCompletion: true)
let loopPlay = SCNAction.repeatForever(play)
geometryNode.runAction(loopPlay)
Однако это изменяет только настройку громкости по умолчанию для источника, и это происходит только при порождении узла. Я пытаюсь изменить его громкость в реальном времени после нажатия кнопки.
Я чувствую, что мне не хватает чего-то простого, и я искал в Интернете документацию и примеры, но мне действительно трудно. Из документации Apple по API я вполне уверен, что это возможно. Насколько я могу судить, вы должны использовать свойство audioNode
, связанное с SCNAudioPlayer
, которое является частью протокола AVAudioMixing
. Это свойство AVAudioMxing
volume должно быть тем, что мне нужно!
Однако, хоть убей, я не могу понять, как реализовать этот процесс в коде в моей текущей настройке. Я могу получить доступ к _13 _ / _ 14_, например:
audioPlayer.audioNode?.engine?.mainMixerNode.outputVolume=0
но это, похоже, не работает. Как компоненты AV и SCN связаны друг с другом?
Мы будем очень благодарны за любую помощь или примеры того, как это можно реализовать!