Nov17th

XACT のバックアップ(No.11)

Top / XACT


プログラムから呼び出し

  • キューインタフェースの取得→IXACTSoundBank::Prepare()
    • 第3引数で再生位置(ms)を指定できるっぽい
  • Sound Bankからキュー名一覧を読み込む
    • キューに積み込んだ曲名はユーザが知っている前提だが、デバッグ用ウィンドウに出力するなどのために一応
  • キューの名前をインデックスに変換した後に再生する
    • 音の停止はインデックスで行うので、同じ音でN番目に鳴らしたものを止めるようなことはできない
  • WaveBankはサイズの大きいファイルなので、シーンごとにロードするなどの工夫が必要
  • WaveBank読み込み時に、メモリに展開かストリーミングかを分ける必要がある
    • Xact.exeで設定する項目がある
    • 読み込みに使う関数が異なる
  • WaveBank、SoundBankを複数個持てるような設計にする必要有り

Xact.exeでのオーサリング

  • ビルド後のファイルにwavの波形情報が含まれるため、プログラムから呼ぶ場合はwavファイルが参照できなくても大丈夫
  • プロジェクトメニューのCompression Presetsで圧縮設定
    WaveBankのCompression Presetからwavごとに圧縮設定
  • Cueのファイルを選択後、左下のウィンドウのLimit Instancesをチェック入れておくと同時再生を制限できる
  • Sound BankにはWave Bankからドラッグ&ドロップで登録
    ウィンドウ左下のCueにも登録する
  • wavファイルの登録はドラッグ&ドロップで行う
  • Xact.exeから音の再生をする場合、AudConsole.exeを立ち上げておく必要がある
    サーバの様な機能を持っている模様
  • SoundBanks
    曲の再生順やループの設定等をする場所
    WaveBanksからwavを取り出した後、編集する
    Sound Bankウィンドウの左下の名前がプログラムから呼び出す時に使う名前になる
  • WaveBanks
    元となるWavファイルを登録する場所
    ファイルパスの管理を行う

3D音源

  • 初期化
    • xact3d3.hをインクルード
    • X3daudio.libをリンク
  • SoundBankのPlayからだとCueへセットした音源位置の計算が適用されないので、IXACT3Cue::Play()を使う
    • SoundBank::Play()の第4引数にCueをセットすれば同じことができる?
    • フェードイン・フェードアウトはイベントとして制御されるらしい
  • 再生中に音の定位を変更する方法
    • XACT3DApply(&dspSetting, cue)は再生前にしか機能しない

メモ

  • 再生中に音のパラメータを変更するのは、XACT.exe側で設定したものしか出来ない。
    • 救急車のサイレンを1周期ごとに再生パラメータを変えて繰り返し鳴らすのはできる
    • BGMの音量を距離に応じて変化させるのは、XACT.exe側で事前設定が必要
  • 内部的にはXAudio2が使われている
  • 全体を1つのプロジェクトで管理するのが良いのか、1シーンに1プロジェクトファイルを対応させるのが良いのか
    • BGM_SceneN、SE_SceneNとしてシーン数だけセットを持たせる?
  • Xact.exeでファイルを作った後、XACTAPIでファイルを読み込んで再生
  • xgs
    プロジェクトファイル
    プログラムは最初にこれを読み込む
  • xwb
    Wave Bankの情報を格納したファイル
    ここにwavファイルの中身も入る模様
  • xsb
    Sound Bankの情報を格納したファイル
  • xap
    XACTのプロジェクトファイル。これは読み込まない
    wavファイルをこれと同じディレクトリに入れる
  • DirectXSDKインストール時にXACTとAudConsoleへのパスが通されているので、スタートメニューの検索から呼び出せる


未着手

  • 曲のループポイントの制御
    • マーカーイベントで制御


リンク