Apple Engine

Apple, iPhone, iOS, その周辺のことについて

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 クラスのイニシャライズの関数を見てゆく。