プロジェクト演習Ⅳ・Ⅵ インタラクティブゲーム制作 第6回 サウンド 今日の内容 • サウンド – お待ちかね! – BGM、SE、3Dサラウンドまで サウンドを扱うAPI • DirectSound(3D) – Windows環境ではスタンダード – なんだけど、Vista以降切り捨ての方向に… • SDL_mixer – 機種非依存で、マルチメディア全般をサポート – ライセンスの関係がめんどくさい… • OpenAL – マルチプラットフォームでライセンスフリー – DirectSoundとの互換性も考慮されており、 今後のスタンダードとして有力株 OpenALを使ったプログラミング • FKのライブラリパッケージ内にOpenAL もセットにしてあります • プロジェクトを作る時に「OpenALを使用 する」と「Ogg Vorbisを使用する」に チェック – 既に作ってあるプロジェクトの設定変更は プロジェクトのプロパティ→リンカ→入力→ 追加の依存ファイル、に対して以下を追加 • 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を直接実行する場合とで、 相対パスの基準位置がズレます • 両方にデータを置くのは面倒なので… 1. EXEを実行する時はプロジェクトの フォルダにコピーしてくる 2. プロジェクトの設定を変更して、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()でリスナー (多くの場合はカメラモデル)を設定
© Copyright 2024 ExpyDoc