スライド 1

プロジェクト演習Ⅱ
インタラクティブゲーム制作
イントロダクション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ファイルも忘れずに