ゲームのオーディオ
ミュージックやサウンドを開発して DirectX ゲームに組み込む方法と、オーディオ信号を処理してダイナミック サウンドやポジショナル サウンドを作成する方法について説明します。
オーディオのプログラミングには、DirectX の XAudio2 ライブラリまたは Windows ランタイムの Audio graphs API を使用することをお勧めします。 ここでは XAudio2 を使用します。 XAudio2 は、ゲーム開発における信号処理とオーディオ ミキシングの基礎を提供する下位レベルのオーディオ ライブラリです。多様なフォーマットがサポートされています。
Microsoft メディア ファンデーションを使用してシンプルなサウンドやミュージックの再生を実装することもできます。 Microsoft メディア ファンデーションは、オーディオとビデオの両方に対応したメディア ファイルやストリームの再生用として設計されていますが、ゲームに利用することもできます。特に、ゲーム中の映画的なシーンや非対話型のコンポーネントに利用できます。
概念の概要
このセクションで使用するオーディオ プログラミングの概念について以下に説明します。
- 信号は、サウンド プログラミングに使用する基本単位です。グラフィックスにおけるピクセルに相当します。 これらの信号を処理するデジタル シグナル プロセッサ (DSP) は、ゲーム オーディオのピクセル シェーダーのようなものです。 信号の変換、組み合わせ、またはフィルターを行います。 DSP にプログラミングすることにより、ゲームのサウンド効果やミュージックをはるかに簡単な方法で加工することができます。
- ボイスは、2 つ以上の信号をサブミックスしたコンポジットです。 XAudio2 のボイス オブジェクトには、ソース、サブミックス、マスタリングという 3 種類のボイスがあります。 ソース ボイスは、クライアントから提供されたオーディオ データに適用されます。 ソース ボイスとサブミックス ボイスは、1 つ以上のサブミックス ボイスまたはマスタリング ボイスに向けて出力を送信します。 サブミックス ボイスとマスタリング ボイスは、それぞれに送られるすべてのボイスからオーディオをミキシングし、その結果に対して作用します。 マスタリング ボイスは、オーディオ デバイスにオーディオ データを書き込みます。
- ミキシングは、シーンの背景で再生されるサウンド効果やバックグラウンド オーディオなど、個別のボイスを組み合わせて単一のストリームを形成するプロセスです。 サブミキシングは、エンジン音などのコンポーネント サウンドを組み合わせて、1 つのボイスを作成するプロセスです。
- オーディオ形式。 ミュージックとサウンドの効果は、ゲームで使用する多様なデジタル形式で保存できます。 WAV のような非圧縮型や MP3 や OGG などの圧縮型の形式があります。 サンプルの圧縮率が高くなるほど、忠実度が低下します (通常、圧縮率はビット レートで表し、ビット レートが低いほど、圧縮の損失が大きくなります)。 忠実度は、圧縮方式やビット レートによって変動するため、実験しながら実際のゲームに応じた最適のレベルを探る必要があります。
- サンプル レートと品質。 サウンドは、さまざまなレートでサンプリングできます。低いレートでサンプリングしたサウンドは忠実度が相当低くなります。 CD 品質のサンプル レートは 44.1 Khz (44100 Hz) です。 サウンドに Hi-Fi の音質が必要ない場合は、低いサンプル レートを選択できます。 プロフェッショナル向けのオーディオ アプリケーションであればサンプル レートを高く設定する必要がありますが、ゲーム中でプロ レベルの音質が求められない限り、おそらくその必要ありません。
- サウンド エミッター (ソース)。 XAudio2 でいうサウンド エミッターとは、バックグラウンド ノズルのブリップ音であれ、ゲーム中のジュークボックスで再生する激しいロック トラックであれ、音を発する場所のことを指します。 エミッターは、ワールド座標で指定します。
- サウンド リスナー。 サウンド リスナーはプレーヤーであったり、高度なゲームの場合は、リスナーから受け取ったサウンドを処理する AI エンティティであったりします。 そのサウンドを、プレーヤーに対して再生するオーディオ ストリームにサブミックスしたり、特定のゲーム中アクション (たとえばリスナーとしてマークを付けた AI ガードを起動する) に適用したりできます。
設計上の考慮事項
オーディオは、ゲームの設計と開発の面できわめて重要な役割を果たします。 凡庸なゲームであっても、記憶に残るサウンドトラックや優れたボイスワーク、サウンド ミキシング、全体に秀逸なオーディオ制作が取り入れられているという単純な理由から、こうしたゲームに伝説的な評価を与えるゲーム プレーヤーも少なくありません。 ミュージックとサウンドはゲームの個性を決定するだけでなく、ゲーム全体の輪郭を定義したり、他の類似したゲームからの差別化を図ったりするための主因にもなります。 ゲームのオーディオ プロファイルの設計と開発に向けて投入した努力は、必ずそれなりの価値があるものです。
3D ポジショナル オーディオは、3D グラフィックスがもたらす没入感に新たな次元を加えるものです。 実世界のシミュレーションや映画のようなシーンの再現を目指した、複雑なゲームを開発している場合は、3D ポジショナル オーディオを利用して、プレーヤーをゲームの世界に引き込むことをお勧めします。
DirectX オーディオ開発のロードマップ
XAudio2 の概念に関するリソース
XAudio2 は、DirectX 用のオーディオ ミキシング ライブラリで、主に、高パフォーマンスのオーディオ エンジンをゲーム用に開発することを目的としています。 効果音やバックグラウンド ミュージックを自分の最新のゲームに追加したいゲーム開発者にとって、XAudio2 はオーディオ グラフとミキシング エンジンを短い待機時間で提供し、ダイナミック バッファー、同期サンプルアキュレート再生、暗黙的なソース レート変換をサポートします。
トピック | 説明 |
---|---|
XAudio2 でサポートされるオーディオ プログラミング機能を一覧します。 |
|
XAudio2 の概念、XAudio2 のバージョン、RIFF オーディオ形式について説明します。 |
|
オーディオ開発者が知っておくべき一般的なオーディオ概念に関する概要を説明します。 |
|
XAudio2 のボイスの概要について説明します。XAudio2 のボイスは、オーディオ データをサブミックス、操作、マスタリングするときに使われます。 |
|
XAudio2 のコールバックについて説明します。XAudio2 のコールバックは、オーディオ再生の中断を防止するために使われます。 |
|
XAudio2 のオーディオ処理グラフについて説明します。オーディオ処理グラフでは、クライアントから一連のオーディオ ストリームを入力として受け取り処理して、最終結果をオーディオ デバイスに配信します。 |
|
XAudio2 のオーディオ エフェクトについて説明します。オーディオ エフェクトは、受信したオーディオ データを転送する前に何らかの処理 (リバーブ エフェクトなど) を実行します。 |
|
XAudio2 を使ったオーディオ ストリーミングについて説明します。 |
|
X3DAudio について説明します。X3DAudio は XAudio2 と連携して、3D 空間内の1点からサウンドが聞こえてくるような効果を生み出す API です。 |
|
XAudio2 API の詳しいリファレンスです。 |
XAudio2 の操作方法に関するリソース
トピック | 説明 |
---|---|
XAudio2 エンジンのインスタンスを作成してからマスタリング ボイスを作成して、XAudio2 をオーディオ再生用に初期化する方法について説明します。 |
|
XAudio2 でオーディオ データを再生するために必要な構造体を設定する方法について説明します。 |
|
XAudio2 で以前読み込まれたオーディオ データを再生する方法について説明します。 |
|
ボイス グループを設定して、その出力を同じサブミックス ボイスに送信する方法について説明します。 |
|
XAudio2 のソース ボイスのコールバックを使う方法について説明します。 |
|
XAudio2 のエンジン コールバックを使う方法について説明します。 |
|
単一のマスタリング ボイスと単一のソース ボイスから構築されたオーディオ処理グラフを作る方法について説明します。 |
|
「方法: 基本的なオーディオ処理グラフの作成」の手順に従って作られたグラフに対して、サブミックス ボイスを追加または削除する方法について説明します。 |
|
エフェクト チェーンをボイスに適用して、そのボイスのオーディオ データに対してカスタム処理を加える方法について説明します。 |
|
XAudio2 オーディオ処理オブジェクト (XAPO) を作るために IXAPO を実装する方法について説明します。 |
|
IXAPOParameters インターフェイスを実装して XAPO にランタイム パラメーター サポートを追加する方法について説明します。 |
|
XAudio2 のエフェクト チェーンで XAPO を使って実装されるエフェクトを使う方法について説明します。 |
|
XAudio2 のエフェクト チェーンで XAPOFX に含まれるエフェクトの 1 つを使う方法について説明します。 |
|
オーディオ バッファーの読み取り用に別のスレッドを作って XAudio2 でオーディオ データをストリームし、コールバックを使ってそのスレッドを制御する方法について説明します。 |
|
X3DAudio を使ってXAudio2 のボイスの音量やピッチの値、XAudio2 内蔵のリバーブ エフェクトのパラメーターを指定する方法について説明します。 |
|
XAudio2 の操作セットを使ってメソッドをグループ化し、これらのメソッドを同時に有効にする方法について説明します。 |
|
XAudio2 のデバッグ ログ レベルを設定する方法について説明します。 |
メディア ファンデーションに関するリソース
メディア ファンデーション (MF) は、ストリーミング オーディオやビデオの再生用のメディア プラットフォームです。 メディア ファンデーション API を使って、さまざまなアルゴリズムでエンコードされ圧縮されたオーディオやビデオをストリーミングできます。 リアルタイムのゲームプレイ シナリオ向けには設計されていませんが、オーディオやビデオのコンポーネントのさらなるリニア キャプチャとプレゼンテーションのための、強力なツールと広範なコーデック サポートを提供します。
トピック | 説明 |
---|---|
このセクションでは、メディア ファンデーション API とメディア ファンデーション API をサポートするために使用可能なツールに関する一般的な情報について説明します。 |
|
メディア ファンデーション アプリケーションを作る前に知っておく必要がある概念をいくつか紹介します。 |
|
Microsoft メディア ファンデーションの一般的な設計と、Microsoft メディア ファンデーションで使われるメディア プリミティブと処理パイプラインについて説明します。 |
|
Microsoft メディア ファンデーションを使ってオーディオやビデオのキャプチャを実行する方法について説明します。 |
|
アプリでオーディオ/ビデオの再生を実装する方法について説明します。 |
|
Microsoft メディア ファンデーションでネイティブ サポートされるメディア形式を一覧します (サード パーティによっては、カスタム プラグインを作ることによって、追加の形式をサポートできます)。 |
|
Microsoft メディア ファンデーションを使ってオーディオやビデオのエンコード、メディア ファイルのオーサリングを実行する方法について説明します。 |
|
Windows Media オーディオおよびビデオのコーデックが備えている機能を使い、圧縮されたデータ ストリームを生成、消費する方法について説明します。 |
|
メディア ファンデーション API のリファレンス情報です。 |
|
メディア ファンデーションを使う方法について示すサンプル アプリの一覧です。 |
Windows ランタイム XAML メディア タイプ
DirectX と XAML の相互運用機能を使っている場合は、DirectX と C++ で Windows ランタイム XAML メディア API を UWP アプリに組み込み、ゲーム シナリオを簡素化することができます。
トピック | 説明 |
---|---|
オーディオ、ビデオ、またはその両方を格納するオブジェクトを表す XAML 要素です。 |
|
ユニバーサル Windows プラットフォーム (UWP) アプリに基本的なオーディオやビデオを組み込む方法について説明します。 |
|
UWP アプリでローカルに保存されているメディア ファイルを再生する方法について説明します。 |
|
UWP アプリにメディア ファイルを低遅延でストリーミングする方法について説明します。 |
|
リモート再生コントラクトを使って、UWP アプリから別のデバイスへメディアをストリーミングする方法について説明します。 |