XAudio2 を使用して .wav ファイルを読み込んで再生します。
以下のセクションでは、XBOX One Development Kit で XAudio2 を使用してサウンドを読み込んで再生する方法について説明します。
動作する XAudio2 サンプルについては、Microsoft Game Development Kit (GDK) サンプルから SimplePlaySound サンプルをダウンロードしてください。
重要な XAudio2 データ型
XAudio2 は、XBOX One でサウンド エフェクトを再生するのに役立ついくつかのデータ型を提供します。.wav ファイルを再生するには、少なくとも次のデータ型が必要です。
-
IXAudio2: これは、すべてのオーディオ エンジン状態、オーディオ処理スレッド、音声グラフなどを管理するXAudio2オブジェクトのインターフェイスです。 -
IXAudio2SourceVoice:XAudio2処理パイプラインにオーディオ データを送信するには、ソース音声を使用します。音声データが聞こえるようにするには、マスタリング音声に送信する必要があります。 -
IXAudio2MasteringVoice: このデータ型を使用して、オーディオ出力デバイスを表します。データ バッファーはマスタリング音声に直接送信することはできません。ただし、他の種類の音声に送信されたデータは、聞こえるようにするにはマスタリング音声に向けて指向する必要があります。
-
PlaySoundVoiceContext: 処理後にオーディオ バッファーを解放するには、このデータ型を使用します。 -
IXAudio2VoiceCallback: このデータ型には、特定のIXAudio2SourceVoiceで特定のイベントが発生したときにクライアントに通知するメソッドが含まれます。
XAudio2 の初期化
CoInitializeEx() は、現在のスレッドで使用するために Component Object Model (COM) を初期化します。最初のパラメーターを NULL に設定します。2 番目のパラメーターを COINIT_MULTITHREADED に設定します。
XAudio2Create() は、新しい XAudio2 オブジェクトを作成し、その IXAudio2 インターフェイスへのポインターを返します。XAUDIO2_PROCESSOR が有効な値に設定されていることを確認してください。ハードウェア プラットフォームに基づいて OS が理想的なプロセッサを選択できるように、XAUDIO2_USE_DEFAULT_PROCESSOR 値をお勧めします。
IXAudio2::CreateMasteringVoice() は、マスタリング音声を作成および構成し、ユーザー提供のポインターでそれを指します。
C++
.wav ファイルの読み込み
オーディオ ファイルにアクセスするには、WaveFile クラスのインスタンスを使用します。
- .wav ファイルを開いて、ファイルのヘッダーに格納されているいくつかの情報を取得するには、
WaveFile::Open(LPCWSTR strFileName)を呼び出します。 - .wav ファイルの形式を判定するには、
WaveFile::GetFormat()を呼び出します。 - .wav ファイルのバイト数とサンプル数を判定するには、
WaveFile::GetDuration()を呼び出します。 - サンプル データをメモリに読み込むには、
WaveFile::ReadSample()を呼び出します。
C++
.wav ファイルへのファイル パスの設定
オーディオ ファイルを読み込んで使用するには、次のコードを使用して、ローカル デバイス上のプロジェクトのインストール場所を見つけます。インストール場所を文字列に保存します。オーディオ ファイルの場所をインストール場所文字列の末尾に追加します。C++
.wav ファイルの再生
IXAudio2::CreateSourceVoice() クラスを作成し、それを使用して XAudio2 処理パイプラインにオーディオ データを送信します。音声データが聞こえるようにするには、直接または中間のサブミックス音声を介してマスタリング音声に送信する必要があります。オーディオ ファイルの詳細を保存するには、XAUDIO2_BUFFER を作成します。
XAudio2 バッファーとソース音声を作成および初期化した後、IXAudio2SourceVoice::SubmitSourceBuffer() を呼び出して、オーディオ バッファーを音声入力キューに追加します。XAUDIO2_BUFFER::pAudioData によって指されているオーディオ データは、XAudio2 がバッファーの内容の再生を完了するまで有効なままにしておく必要があります。
音声入力キューが埋められた後、IXAudio2SourceVoice::Start() を呼び出して、キュー内の次のサウンドを再生します。
C++
.wav ファイルの終了
.wav ファイルが完全に再生されたかどうかを判定するには、ソース音声の現在の状態が必要です。XAUDIO2_VOICE_STATE 構造体を作成し、IXAudio2SourceVoice::GetState() を呼び出します。オーディオが完全に再生された場合は、IXAudio2SourceVoice::DestroyVoice() を呼び出します。
