Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

X3DAudio_SpatialAudio

XAudio2とX3DAudioを使用して、3Dオーディオを実現したクラスです。

各機能を使いやすくした、すぐに使えるオーディオクラスとして利用できます。

機能

  • XAudio2を用いた、単純なサウンド再生
  • X3DAudioを用いた、3Dサウンドの再生
  • 音源データのロード管理、情報の管理
  • 3Dサウンド設定の簡略化

メモ

開発環境ではDirectX11を使用してテスト・開発を行いました。
DirectX12環境でも動作するかと思われますが、動作テストは行なっていません。

数学系ライブラリはD3DXMathを用いていますが、必要に応じて入れ替えてもらっても構いません。
その場合は、適宜ソースコード内の使用箇所も入れ替えてください。

今回はシングルトン設計を使用しています。開発環境に適さない場合は、適当に改造してください。

サンプルコード

// 初期化処理
SoundManager::Instance().Init();

// 楽曲名、保存先のパス、タグ、音源ごとの個別ボリュームを指定
SoundManager::Instance().AddSoundData("Walk", "asset\\music\\walk.wav", SoundData::Tag::Title, 1.0f);

// タグが指定された音源をロード
SoundManager::Instance().Load(SoundData::Tag::Game);

// リスナー(プレイヤー)の位置、前方ベクトル、上方向ベクトルをセット
SoundManager::Instance().SetListenerPosition(D3DXVECTOR3(0.0f, 0.0f, 0.0f), D3DXVECTOR3(0.0f, 1.0f, 0.0f), D3DXVECTOR3(0.0f, 0.0f, 1.0f));

// 楽曲名、ループ再生、音源の位置、音が聞こえる範囲を指定して、SEを再生
int num = SoundManager::Instance().PlaySE3D("Walk", true, D3DXVECTOR3(0.0f, 0.0f, 0.0f), 10000.0f);

// 終了処理
SoundManager::Instance().Uninit();

使い方

  1. 使用したいwavファイルの音源を保存します。
  2. SoundData.hにあるTagで、音源を読み込みたいタイミングのタグを追加します。
  3. SoundManagerクラスの初期化処理を行います。
  4. AddSoundDataメソッドで音源をSoundManagerに追加します。
  5. Loadメソッドで音源のロード処理を行います。
  6. SetListenerPositionメソッドでリスナー位置を指定します(3Dサウンドを使用しない場合は必要ありません)。
  7. PlaySE3Dメソッドで音源(エミッター)の位置を指定し、再生します。
  8. SoundManagerクラスの終了処理を行います。

使い方メモ

3Dサウンド

3Dサウンドではリスナーとエミッターの2種類の位置情報が存在し、
それぞれ音源を聞く位置と音源を発する位置の役割となります。

エミッター情報は音源の再生中でも更新することが可能で、
例えば「移動中の歩行音」などは発信源の位置情報をその都度更新する必要があります。
EmitterResetメソッドで音源ごとの位置情報を再指定できるので、音源を移動させたい場合はそちらの関数を使ってください。

音声ソース

音源はXAudio2の機能である音声ソース(IXAudio2SourceVoice)で管理されており、
SoundManagerクラスでは音源を同時再生できるよう、音声ソースを複数所有しています。
どの音声ソースが使用されているかは、Play~~から始まる再生メソッドの戻り値で取得できます。

先に挙げたEmitterResetメソッドなど、再生中の音源を途中で変更する際は
使用している音声ソースの番号が必要になるので、戻り値を記録しておくことをおすすめします。

シングルトンパターン

このクラスでは

リファレンス

管理系メソッド

メソッド 役割
Init XAudio2とX3DAudioの初期化。
Uninit XAudio2とX3DAudioの終了処理。
AddSoundData 音源データをSoundManagerに追加。
DeleteMusicData 読み込んだ音源データを削除。
Load シーンタグが指定された音源データを読み込み。

再生系メソッド

メソッド 役割
PlayBGM BGMを再生。
PlaySE SEを再生。
PlaySE3D 3DサウンドのSEを再生。
StopAllBGM 全てのBGMを停止。
StopAllSE 全てのSEを停止。
StopBGM リソース番号を指定してBGMを停止。
StopSE リソース番号を指定してSEを停止。
SetListenerPosition リスナーのポジションを設定。
EmitterReset 3Dサウンドの位置情報を修正。
GetEmitter 汎用エミッターの情報を取得。(細かい設定に使ってください)
SetMasterVolume 全体ボリュームを設定。
CalculateAngleBetweenVectors 2点間の角度計算。(PlaySE3DのmaxVolumeAngleRange引数にどうぞ)

音源データ

パラメータ 役割
m_name ローディングの際に指定するニックネーム。
m_tag 読み込むシーンを決定するタグ。
m_Volume 音源ごとの個別ボリューム。

About

XAudio2とX3DAudioを使用して、3Dオーディオを実現したクラスです。使いやすいようにカスタマイズもしています。

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages