我正在尝试找出如何实时更改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
体积属性!
但是,对于我一生,我无法弄清楚如何在当前设置中以代码实现此过程。我可以访问mainMixer.volume
/ outputvolume
,例如:
audioPlayer.audioNode?.engine?.mainMixerNode.outputVolume=0
但是这似乎不起作用。 AV和SCN组件如何链接在一起?
非常感谢您提供帮助或实施该示例的示例!
guard let avNode = playerGuitar?.audioNode as? AVAudioMixing else {
return
}
avNode.volume = volume
在我的代码中起作用(尽管花了很多年才发现,但迅速熟悉并没有多大帮助)。 playerGuitar是一个SCNAudioPlayer变量。