スライド 1

プロジェクト演習Ⅱ
インタラクティブゲーム制作
イントロダクション2
第9回
プログラミングサプリ
サウンド編
今後の授業方針について
• 基本的に課題は出しません
– 企画を練って制作する段階に入ったので、
そちらに集中して欲しい
• これまでの課題の遅延提出受け付け
– 年内いっぱいを期限した提出枠を作ります
– 上書きになるので、出し直したい場合は
以前に出したモノもまとめて提出すること
• 今後はゲームを味付けするための材料を
提示していくことにします
今後の予定
• 11/28(今日)
– サウンド
• 12/5
– 企画発表
• 12/12
– 2Dと3Dの素材関連
• 12/19
– がっつり制作
• 1/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型という変数
– 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ファイルも忘れずに
補足資料
今後扱えるようになる予定の素材
• 2次元画像素材
– 一般的な画像データ
• BMP
• JPG
• PNG(透過色付き)
– アニメーションも
(頑張れば)表現可能
– ゲーム画面内での
文字列表示
• フォントデータ指定可
• 3次元モデル素材
– いずれの形式でも
ポリゴン数や、
テクスチャ画像には
制約が生じる
– X
• Mayaからプラグインを
使用して出力可能
– MQO
• Xよりも制約が緩い
• Mayaから他の形式を
経て出力することも可能
• FK Performerで
モーション付けが可能
これ以外にも扱いたいデータ
やりたい事がある場合は…
応相談
あまりに無謀だったらブレーキを掛けます