プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2 第9回 プログラミングサプリ サウンド編 今日の内容 • 鳴らしたい! – サウンドプログラミングの基礎 – 鳴れ!とにかく鳴れ! – 音量には注意してね 今週のプロジェクト • 授業資料ページからダウンロードします – 落としたZipファイルを解凍して、 出てきたフォルダを好きなところに配置 – oalinst.zipは解凍して出てきたexeを実行 • サウンドシステムのインストーラ • 鳴らしたいマシンで事前にインストールが必要 • 今週のFKUT更新情報 – サウンド関連の機能を追加 – 今まで作ってきたものにサウンドを足したい場合 はFKUTフォルダを上書きコピーで置き換えよう • _exeフォルダ内の*.dllファイルもコピーしておく 今日のサンプル • BGMを鳴らします • SEを鳴らします • 3Dサラウンドにも挑戦してみたりなんかし ちゃったりなんかしちゃったりなんかして 音のデータの扱い方 • 音は波形のデータです – 波の形をものすごい細かく記録したデータ • 様々なファイル形式があります – 生の音声データ • 高音質で再生処理が軽いが長時間のデータが肥大化 – Waveファイル(.wav) – 圧縮した音声(音楽)データ • できるだけ音質を保ちつつコンパクト • でも再生が重い – MP3ファイル(.mp3) – Oggファイル(.ogg) とにかくサイズが大きくなりがち • BGMは圧縮データ – ここではOggファイルを扱うことにする • 効果音はWaveデータ – Windows標準のサウンドレコーダでも 作れる • フリー素材を探してみよう – 「ザ・マッチメイカァズ」などが有名 • 変換ツールをゲットしておこう ぽいーん、は手元にないですが キー操作にあわせて 鳴らしてみよう 効果音用のすごい変数 • fk_AudioWavBuffer – Waveファイルを効果音として再生できる • 手順 – openでWaveファイルを読み込む – playで再生 • だけど毎ループ呼び続けないと止まってしまう • ちょっと工夫が必要 こんな感じ… fk_AudioWavBuffer bool se1; se1_play = false; se1.open(“hogehoge.wav”); se1_play = se1.play(); // ループ内では if(se1_play == true) { se1_play = se1.play(); } YesかNoかを覚える変数 • bool型という変数 – Javaだと”boolean”という名前なので注意 – true(Yesの状態)とfalse(Noの状態)をとる – いわゆる「フラグ」に使われることが多い • play()命令は再生に成功したらtrueが、 失敗あるいは最後まで到達したらfalseが 帰ってくる – なので結果をbool型の変数で捕まえておくと 効率的に条件分岐ができる キー操作に合わせるには // ループ中にて if(キーが押された瞬間か?) { 再生したい音のフラグ = true; } // フラグの操作と、状態による分岐を 分けて考えるのがCoolなプログラム if(再生したい音のフラグはtrue?) { (前略)音のフラグ = すごい音変数.play(); } やることはだいたい一緒です BGMの再生 BGM再生用のすごい変数 • fk_AudioStream – OggファイルをBGMとして再生 • 手順 – openで読み込み – playで再生 • Oggファイルってどう作るのさ? – XRECORDというフリーソフトがかなり最強 • http://xrecode.com/ – MP3からの変換もできる BGMと効果音の再生形式の違い • BGMはファイルサイズが大きい – 少しずつ読み込みながら再生する – ストリーミング再生処理と呼ぶ – Waveは大きすぎるのでOggのみにしてある • SEはファイルサイズが小さい – 一気にメモリ上に読み込んで再生する – WaveでもOggでも使用可 • 短めのOggを効果音として扱いたい場合は fk_AudioOggBuffer型の変数を使う 命令は共通、かつ単純 • open – ファイルを読み込む – 読み込みの正否をboolで 返す • play – 鳴らす – 鳴らし続けたい間 呼び続ける必要がある – 再生中ならtrue、末端ま で再生したらfalseが返 る • pause – 止める、playで再開可 • seek – 指定位置へ頭出し – 単位は秒(double) • tell – 現在再生位置を取得 – ちょっと不正確 • setGain – 音量調整(0.0~1.0) • setLoopMode – trueを渡すと末端まで 再生したら自動的に 最初に巻き戻って 再生を続ける イヤホンじゃないと分かりづらいかもしれないけど サラウンドに挑戦してみよう サラウンドとは? • ドルビー5.1chとかのアレ • 空間の中に実際にいるように音が 聞こえてくるアレ • 特殊な機材やスピーカを揃えなくても、 ある程度それっぽく再生できるように なってきた 3Dサラウンド • 効果音再生用のすごい変数は3次元座標を 与えることでサラウンド表現が可能 – setPosition()で定点指定 – setModel()で与えたモデルの位置に追従 – setReferenceDist()で音の届く距離を設定 – setListenerModel()でリスナーを設定 (多くの場合はプレイヤーかカメラモデル) ファイル読み込みのパス指定 • 読み込むファイル名は 「exeファイルから見た相対パス」 で指定する • exeファイルは_exeフォルダに作成されるの で、読み込みたいデータはその中に配置する – _exeフォルダ内にフォルダを作った場合は ”フォルダ名\\ファイル名.拡張子”とする – 区切りの\を2つ重ねる点に注意 • _exeフォルダ内の*.dllファイルも忘れずに
© Copyright 2024 ExpyDoc