【Swift】SpriteKitの使い方。SKAudioNodeでサウンドを再生すると、リスナーとの相対距離や速度で音が変化する。【Swift】SpriteKitの使い方。SKAudioNodeでサウンドを再生すると、リスナーとの相対距離や速度で音が変化する。Sceneファイルの編集画面(シーンエディタ)の部品一覧にあるSKAudioNode(以下、オーディオノード)について説明する。オーディオノードとは、iOS9で新登場したサウンドを再生するノードである。サウンド再生の意味では過去に紹介した「AVAudioPlaer」や「PlaySoundFileNamedアクション」と一緒だが、オーディオノードは3D空間オーディオエフェクトという特徴的な仕様を持っている。オーディオノードを使ってみる実際にオーディオノードをシーンに配置してサウンドを再生してみよう。以降の手順を行う前のXcodeプロジェクトをGitHubに置いたので、試してみる方はご利用下さい。猿とスピーカーの2つのノードをシーンに配置し、ドラッグ&ドロップで運べるようにしておいた。この時点ではサウンドは再生されない。プロジェクトの作り直しなど色々試してみたが必ず落ちてしまうので、今回はオーディオノードの配置にはSKSファイルは使わないことにする。TestScene.swiftを以下のコードに変更する。オーディオノードを作成し、スピーカーノードの子として追加した(青色箇所)。//SKSファイルに配置したノードを取得する。//オーディオノードを作成し、スピーカーの子として追加する。//タッチした座標を取得する。//タッチしたノードを取得する。//タッチしたノードをターゲットノードに設定する。//移動後の座標を取得する。//移動後の座標に移動するアクションを作成する。//アクションを実行する。{//SKSファイルに配置したノードを取得する。SKSpriteNode//オーディオノードを作成し、スピーカーの子として追加する。{//タッチした座標を取得する。touches.first!.locationInNode(self)//タッチしたノードを取得する。{//タッチしたノードをターゲットノードに設定する。{//移動後の座標を取得する。touches.first!.locationInNode(self)//移動後の座標に移動するアクションを作成する。duration:0.1)//アクションを実行する。targetNode.runAction(action)}}以下は実際のプレイ動画。スピーカーを画面左下に近づけると音が大きくなるのが分かっただろうか。これは、シーン内にはlistener(以下、リスナー)と呼ばれるノードがいて、オーディオノードが発する音はリスナーが拾うためである。リスナーを設定していない場合は、アンカーポイントがリスナーになる。そのため、画面左下のアンカーポイントにスピーカーを近づけると音が大きくなったということだ。ちなみに、「リスナーの皆さん、こんばんは」のリスナーは視聴者という意味。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/08/spritekit_skaudionode_no_listener_movie.mp4リスナーを猿ノードにしてみよう。didMoveToViewメソッドにリスナーを設定するコードを追加する。//リスナーを猿ノードにする。{..省略..//リスナーを猿ノードにする。monkey}以下は実際のプレイ動画。スピーカーを運んで猿に近づけると音が大きくなる。逆に、猿を運んでスピーカーに近づけても音が大きくなる。両耳イヤホンがあれば耳に付けて聞いてみてほしい。猿に向かって右側にスピーカーを置くとイヤホンの右(R)の方が音が大きくなり、左側にスピーカーを置くとイヤホンの左(L)の方が音が大きくなる。スピーカーを素早く動かして猿とクロスさせた場合は、「フォフゥー!」と風邪を切るような音になる。クロスが右⇒左ならに音も右⇒左、クロスが左⇒右なら音も左⇒右に流れるのが面白い。https://hajihaji-lemon.com/apli/wp-content/uploads/2016/08/spritekit_skaudionode_listener_movie.mp4自動再生、ループさせないようにするデフォルトでは、オーディオノードを子に追加した時点でサウンドのループ再生が開始する。サウンドが自動でループ再生されないようにするには、autoplayLoopedプロパティをfalseにする。その後、start、stopアクションを実行することでサウンドが再生される。//SKSファイルに配置したノードを取得する。//オーディオノードの自動再生をオフにしてスピーカーの子に追加する。//リスナーを猿ノードにする。//タッチしたノードを取得する。//タッチしたノードをターゲットノードに設定する。//サウンドを再生する。//サウンドを停止する。//移動後の座標を取得する。//移動後の座標に移動するアクションを作成する。//アクションを実行する。{//SKSファイルに配置したノードを取得する。SKSpriteNode//オーディオノードの自動再生をオフにしてスピーカーの子に追加する。falsespeaker.addChild(audioNode)//リスナーを猿ノードにする。{//タッチしたノードを取得する。{//タッチしたノードをターゲットノードに設定する。speaker){//サウンドを再生する。{//サウンドを停止する。{//移動後の座標を取得する。touches.first!.locationInNode(self)//移動後の座標に移動するアクションを作成する。duration:0.1)//アクションを実行する。何か分かったら追記する。【Swift】SpriteKitの使い方。鳥ノードをパタパタさせながら移動方向に合わせて身体の角度を変える。...【Swift】Spritekitの使い方。衝突した位置にパーティクルを放出する。...【Swift】SpriteKitの使い方。物理エンジンを使ってノードに重力をかける。...【Swift】SpriteKitの使い方。シーンエディタでノードの拡大縮小アクションを設定する。...【Swift】SpriteKitの使い方。8方向隣接グループを使ってタイルをサクサク配置する。コメントをキャンセルメールアドレスが公開されることはありません。