我正在努力弄清楚如何实时更改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组件如何连接在一起?
任何有关如何实现此功能的帮助或示例都将非常感激!
先谢谢。
答案 0 :(得分:1)
guard let avNode = playerGuitar?.audioNode as? AVAudioMixing else {
return
}
avNode.volume = volume
在我的代码中起作用(尽管花了很多年才发现,但迅速熟悉并没有完全帮助)。 playerGuitar是一个SCNAudioPlayer变量。