实时更改SCNAudioPlayer的音量-Swift

问题描述 投票:4回答:1

我正在尝试找出如何实时更改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组件如何链接在一起?

非常感谢您提供帮助或实施该示例的示例!

ios swift audio scenekit avaudioengine
1个回答
0
投票
guard let avNode = playerGuitar?.audioNode as? AVAudioMixing else {
      return
}
avNode.volume = volume

在我的代码中起作用(尽管花了很多年才发现,但迅速熟悉并没有多大帮助)。 playerGuitar是一个SCNAudioPlayer变量。

© www.soinside.com 2019 - 2024. All rights reserved.