Dec13th

XACT

Top / XACT

プログラムから呼び出し

  • 変数
    • 変数の値をX軸として、VolumeやPitch、周波数やリバーブのパラメータを制御できる
    • Xact.exe側の準備
    • 1. New Variablesで変数を作成
    • 2. Variable SettingsでName、Init Val、Min、Maxをセット
    • 3. New RPC PresetsでRPC Presetsを作成
    • 4. RPC Presetsダイアログで編集するVariableを選択後、ObjectをSound、PrameterをVolumeやPitchなどに変更
    • 5. 下のグラフを操作
    • プログラム側
    • 1. cueを用意
      • 再生中に操作する場合、cueへの参照を保存しておく必要が有る
    • 2. GetVariableIndex()で変数のインデックスを取得
    • 3. SetVarialble()で変数に値をセット
      • Min、Maxの範囲で
  • IXACT3Cue::GetVariableIndex()で変数のインデックスを取得後、IXACT3Cue::SetVariable()で変数をセット
  • グローバル、キューインスタンス合わせて同じ名前を使うことはできない
  • キューの状態
    • XACT_CUESTATE_CREATED
    • XACT_CUESTATE_PREPARING
    • XACT_CUESTATE_PREPARED
    • XACT_CUESTATE_PLAYING
    • XACT_CUESTATE_STOPPING
    • XACT_CUESTATE_STOPPED
    • XACT_CUESTATE_PAUSED
  • カテゴリ単位でボリュームの調整→IXACT3Engine::SetVolume()
    • カテゴリはIXACT3Engine::GetCategory()に文字列を渡して取得
    • ボリュームはFLOATに名前をつけているだけ。そのまま値を入れられる
  • キューインタフェースの取得→IXACTSoundBank::Prepare()
    • 第3引数で再生位置(ms)を指定できるっぽい
    • 戻ってくるキューのインスタンスは毎回変わる?
      • キューを取得し直すとGetVariableで取ってくる変数の値が初期値に戻ってる
  • 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をセットすれば同じことができる?
    • フェードイン・フェードアウトはイベントとして制御されるらしい
  • 再生中に音の定位を変更する方法
    • Play()時に使ったcueのインスタンスを保存しておいて、XACT3DApply()でDSPパラメータを変更

メモ

  • X3DAUDIO_VECTORの中身はD3DVECTOR。
  • 最大同時再生数はいくつなのか
  • DSP
    • Digital Signal Processing
  • カテゴリはSoundBankに登録された音ごとに指定
  • 再生中に音のパラメータを変更するのは、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へのパスが通されているので、スタートメニューの検索から呼び出せる


未着手

  • 曲のループポイントの制御
    • wavに埋め込むことができる
    • wavosaurを使用


リンク