Game Development #18 Sound Effects

ふと海外のサイトを廻っていたらフリー素材でいい音を見つけたのでサウンドに取り組んでみました。

battleship_20140408_antiair

周囲で炸裂する弾幕に音があったら迫力でるしね。

XNAには音を鳴らす関数があるのですが、こんな感じです

soundEffect.play( Volume, Pitch, Pan)

正直SEの知識はほとんどありません。さて困った。きっと奥が深い分野なんでしょう。しかし予備知識なしで自分なりの考え方で仕組みをつくってみるのも面白いかなと思って取り組んでみました。

 

Volume

これは単純に遠い音ほど小さくするようにすればいいかなという感じで、音それぞれに最大到達距離を設定して、音の発生地点と観測地点との距離の割合で音量を調節することにしました。

 

Pitch

音の高低を操作できるようです。たとえば近づくと音が高くなり、通り過ぎると低くなるドップラー効果などを表現できそうです。ただ、いまのところは使う場面がなさそうなので、今回はパスしました。

 

Pan

左右のスピーカーで鳴らす割合ですね。これを設定すれば立体感のある空間を演出できそうです。これは発生地点から観測地点へのベクトルを求め、観測者の向いている方向ベクトルとの内積を求めれば値を得られるかなと思います。

大雑把ですが、これで基本的なサウンドを鳴らす仕組みができました。

 

掠める音

カメラの近くを弾丸が通り過ぎる音を鳴らしたいよね、ということで思いついた方法がこれ。

bullet_and_camera

現フレームの弾丸の位置からカメラの位置のベクトルと、次のフレームの弾丸の速度を加算した位置からのベクトルを計算して、それぞれのベクトルを弾丸の進行方向のベクトルと内積を取り、符号が逆転したときがちょうど真横を通過した瞬間とします。そこで「ヒュン!」という効果音を鳴らすようにしてみました。

battleship_20140408_sound
弾丸がヒュンヒュンと掠めることで緊張感が高まります。

 

やってみたいこと

音の速度をシミュレートしてみたいかも・・・。最近ミッドウェー海戦を体験した方の本を読んだのですが、海戦が始まると遠くの味方の艦船が砲撃の光りを放ち、その十数秒後に音が聞こえてくるという描写がありました。なるほど、音の速度が秒速340mほどなので、5km先で発生した音が伝わるのは15秒後ぐらいになるわけです。弾丸の速度が秒速800mぐらいだとすると弾丸の到達も6秒ぐらいかかりますね。弾丸が到達して艦船がダメージを受けて爆発した後に砲撃音が届くという感じでしょうか。さすがにゲームでそれをやるとわけがわからなくなりそうですが、遅延の表現はやってみたら面白そうかなと思っています。

battleship_20140408_distance

5km先というとこれくらい。洋上では割と近く見える?ちなみにプログラム内では重力や弾丸、艦船の速度等は現実とほぼ同じにしてあります。こういったものは本で読んだだけでは距離感がつかめないことが多々あるので、実際の数字で動かしてわかりやすく視覚化したいんですよね。たとえば、魚雷の速度は意外に遅くて、遠距離では艦船に当てるのは結構難しいんだなとかわかります。(映画やゲームだと高速で進んでますが・・・)

とまあ、画像では伝わらない話ですが今回はサウンドについてでした。

広告

Game Development #18 Sound Effects」への2件のフィードバック

  1. はじめまして!
    大手で作曲兼サウンドディレクタをし、今は小さいところで、Unityを使って戦争ゲームを作っております。

    ゲーム作りのヒントになるものを探していたら、
    貴ブログを発見し、あまりの素晴らしさに感嘆しておりました。

    私は過去に、XNAではないのですが、XACTを使っておりましたので、
    ご苦労と創意工夫がとても伝わります!

    ぜひまた拝見させていただきます、よろしくお願いいたします。

    • こちらこそはじめまして!

      サウンドに関してはほとんど知識がなく、知り合いもいないのでなかなか困っています。あまりネット上に情報もないんですよね。
      なので、いい加減な実装をしていますが、何かおかしいところに気がつかれたら助言のコメントをよろしくお願いします(^^

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中