110 likes | 204 Views
プロジェクト演習 Ⅳ ・ Ⅵ インタラクティブゲーム制作. 第 6 回 サウンド. 今日の内容. サウンド お待ちかね! BGM 、 SE 、 3D サラウンドまで. サウンドを扱う API. DirectSound(3D) Windows 環境ではスタンダード なんだけど、 Vista 以降切り捨ての方向に … SDL_mixer 機種非依存で、マルチメディア全般をサポート ライセンスの関係がめ んど くさい … OpenAL マルチプラットフォームでライセンスフリー DirectSound との互換性も考慮されており、 今後のスタンダードとして有力株.
E N D
プロジェクト演習Ⅳ・Ⅵインタラクティブゲーム制作プロジェクト演習Ⅳ・Ⅵインタラクティブゲーム制作 第6回 サウンド
今日の内容 • サウンド • お待ちかね! • BGM、SE、3Dサラウンドまで
サウンドを扱うAPI • DirectSound(3D) • Windows環境ではスタンダード • なんだけど、Vista以降切り捨ての方向に… • SDL_mixer • 機種非依存で、マルチメディア全般をサポート • ライセンスの関係がめんどくさい… • OpenAL • マルチプラットフォームでライセンスフリー • DirectSoundとの互換性も考慮されており、今後のスタンダードとして有力株
OpenALを使ったプログラミング • FKのライブラリパッケージ内にOpenALもセットにしてあります • プロジェクトを作る時に「OpenALを使用する」と「OggVorbisを使用する」にチェック • 既に作ってあるプロジェクトの設定変更はプロジェクトのプロパティ→リンカ→入力→追加の依存ファイル、に対して以下を追加 • libvorbisfile.lib libvorbis.lib libogg.lib • EFX-Util.lib alut.lib OpenAL32.lib
DLLへの依存が発生します • 「OpenAL32.dll」「alut.dll」「libogg.dll」「libvorbis.dll」「libvorbisfile.dll」が必要 • 「FK_VC08/bin」フォルダ内にある • 実行パスの通ったフォルダに配置する • Visual Studio上から実行する場合 • プロジェクトファイルと同じフォルダ • EXEを直接実行する場合 • EXEファイルと同じフォルダ
補足:パスについて • ファイルを読み込むプログラムの場合、Visual Studioから実行する場合と、EXEを直接実行する場合とで、相対パスの基準位置がズレます • 両方にデータを置くのは面倒なので… • EXEを実行する時はプロジェクトのフォルダにコピーしてくる • プロジェクトの設定を変更して、VS上から実行する場合の基準位置を揃える
今回のクラス構成 • BGM用 • fk_AudioStream • Ogg形式専用 • SE用(どちらも関数は共通) • fk_AudioOggBuffer • Ogg形式用 • fk_AudioWavBuffer • Wav形式用
BGMと効果音の再生形式の違い • BGMはファイルサイズが大きい • 少しずつ読み込みながら再生する • ストリーミング再生処理と呼ぶ • 生Waveは大きすぎるのでOggを使うこと • SEはファイルサイズが小さい • 一気にメモリ上に読み込んで再生する • WaveでもOggでも使用可
APIは至極単純 • open • ファイルを読み込む • play • 鳴らす • 鳴らし続けたい間呼び続ける必要がある • pause • 止める • seek • 指定位置へ頭出し • tell • 現在再生位置を取得 • end • 再生を打ち切り、読み込んだ内容を破棄 • setGain • 音量調整(0.0~1.0) • getGain • 音量取得
ちょっと不安定な機能ども • setLoopMode • ループ再生の設定 • setLoopArea • ループ範囲の指定 • 現状ループ開始地点のみ有効 • tellで取得できる再生時間に若干のズレが生じる • それに伴ってループ再生の開始地点も厳密な位置指定は無理 • そのうち直します
3Dサラウンド • Buffer再生クラスの方は3次元座標を与えることでサラウンド表現が可能 • setPosition()で定点指定 • setModel()で与えたモデルの位置に追従 • setReferenceDist()で音の届く距離を設定 • fk_Audio::setListenerModel()でリスナー(多くの場合はカメラモデル)を設定