WWDC 2017 の SceneKit サンプル Fox 2 を調べる その27
GameController クラスのセットアップ関数を見てゆく。
今回は音を設定しているオーディオ設定。
playSound(_ audioName: AudioSourceKind)
AudioSourceKind の enum で指定されているオーディオソースの添字を playSound 関数に渡す。
指定した添字から音を audioSources の配列から探し、 SCNAudioPlayer をシーンに addAudioPlayer で追加するし音を再生する。
func playSound(_ audioName: AudioSourceKind) { scene!.rootNode.addAudioPlayer(SCNAudioPlayer(source: audioSources[audioName.rawValue])) }
setupAudio()
BGM や SE の音を設定する。
- ここで設定している node に rootNode を渡す
- audioSource に ambience.mp3 を渡し、BGM として再生する
- volcanoNode に particles_volcanoSmoke_v2 の名前のノードを渡し、audioSource として volcano.mp3 を設定する。isPositional の設定をしていないため位置によって音が変化する。
- collect.mp3、collectBig.mp3、unlockTheDoor.m4a、hitEnemy.wav を audioSources として audioSources の配列に入れ、各種設定する。
func setupAudio() { let node = scene!.rootNode if let audioSource = SCNAudioSource(named: "audio/ambience.mp3") { audioSource.loops = true audioSource.volume = 0.8 audioSource.isPositional = false audioSource.shouldStream = true node.addAudioPlayer(SCNAudioPlayer(source: audioSource)) } if let volcanoNode = scene!.rootNode.childNode(withName: "particles_volcanoSmoke_v2", recursively: true) { if let audioSource = SCNAudioSource(named: "audio/volcano.mp3") { audioSource.loops = true audioSource.volume = 5.0 volcanoNode.addAudioPlayer(SCNAudioPlayer(source: audioSource)) } } audioSources[AudioSourceKind.collect.rawValue] = SCNAudioSource(named: "audio/collect.mp3")! audioSources[AudioSourceKind.collectBig.rawValue] = SCNAudioSource(named: "audio/collectBig.mp3")! audioSources[AudioSourceKind.unlockDoor.rawValue] = SCNAudioSource(named: "audio/unlockTheDoor.m4a")! audioSources[AudioSourceKind.hitEnemy.rawValue] = SCNAudioSource(named: "audio/hitEnemy.wav")! audioSources[AudioSourceKind.unlockDoor.rawValue].isPositional = false audioSources[AudioSourceKind.collect.rawValue].isPositional = false audioSources[AudioSourceKind.collectBig.rawValue].isPositional = false audioSources[AudioSourceKind.hitEnemy.rawValue].isPositional = false audioSources[AudioSourceKind.unlockDoor.rawValue].volume = 0.5 audioSources[AudioSourceKind.collect.rawValue].volume = 4.0 audioSources[AudioSourceKind.collectBig.rawValue].volume = 4.0 }
次回は GameController クラスのイニシャライズの関数を見てゆく。