XNAにおけるサウンドの設計 (XNAのサポートしているオーディオエンジンとデータファイルについて)
XNAにおけるサウンドの設計は、Javaにてサウンドの実装を設計した時同様な流れで設計をしていきます。
ということで、まず検討することはXNAがサポートしている音声のデータファイルから始めていきたいと思います。
XNAはDirectXではお馴染(?)のXACTというオーディオエンジンを用いて実現します。
このエンジンがサポートする音声データファイルフォーマットはJava同様の「WAVE」「AIFF」のフォーマットと、「XMA」というフォーマットをサポートしています。
XMAフォーマットは、オーディオプレイヤーでは有名なフォーマットである、WMA(Windows Media Audio)のフォーマットを「ゲーム向けにカスタマイズしたもの」とのことで(私もこのフォーマットを知らなかったので、ネット検索で知りました)、高圧縮で且つリアルタイムにデコードするのに向いているとのことです。(Xbox 360にはこのフォーマットをハードウェアデコードする機能が乗っているとのことです)
しかし、このファイルフォーマットの変換方法は…私は知りません。(^^ゞ
また、このフォーマットはDirectX SDK 2008のドキュメントによると、色々と制限がある模様です。
XACTは上述のように「波形データ系」の音声フォーマットのみをサポートしており、JavaのようにMIDI等の「コマンドデータ系」の音声ファイルをサポートていません。
これは「ゲームにおいて実行する環境毎にゲームの音質が変るというのは望ましくない」というような理由があるのかは不明ですが、「波形データ系」の音声のみで設計をすることになります。
波形データ系のみで設計する場合、「Javaにおけるサウンドの設計」にて検討したとおり、BGM等の再生時間の長い楽曲の場合はとてもデータ量が多いため、プログラムが処理を行う際に(メモリの載せて)再生するデータを調整しなければならないのですが、そこは素晴らしい事にXACTがメモリに全て載せて再生するか、ストリームとして分割してメモリに載せて再生するかを指定できます。
しかも波形データなのでエフェクトがかけやすい事もあり、エコーや、データ毎のボリューム変更、ミキシング等一般的なオーディオ機器のDSPのような機能を持っています。
ただし、再生速度の変更が容易に設定できないという話を過去に聴いたことがあり、よくある「時間制限のあるゲームで、時間がなくなってくるとBGMの再生速度が上る…」といった処理の実現が大変という事を聴いたことがあります。この場合は、速度の速い曲をクロスフェードで切り替える方法を取ると良いとか…
(結局のところ、私はこの機能を使用したことがない&実装したことがないので、真偽は不明です(^^ゞ)
このようなことから、Javaの時同様に表を作成すると、
のような感じでしょうか。
次回は具体的にXNAに付属している「Microsoft Cross-Platform Audio Creation Tool (XACT)」というツールを用いて、XACT用のプロジェクトの作成、XNAのプロジェクトへの登録を行ってみたいと思います。
ということで、まず検討することはXNAがサポートしている音声のデータファイルから始めていきたいと思います。
XNAはDirectXではお馴染(?)のXACTというオーディオエンジンを用いて実現します。
このエンジンがサポートする音声データファイルフォーマットはJava同様の「WAVE」「AIFF」のフォーマットと、「XMA」というフォーマットをサポートしています。
XMAフォーマットは、オーディオプレイヤーでは有名なフォーマットである、WMA(Windows Media Audio)のフォーマットを「ゲーム向けにカスタマイズしたもの」とのことで(私もこのフォーマットを知らなかったので、ネット検索で知りました)、高圧縮で且つリアルタイムにデコードするのに向いているとのことです。(Xbox 360にはこのフォーマットをハードウェアデコードする機能が乗っているとのことです)
しかし、このファイルフォーマットの変換方法は…私は知りません。(^^ゞ
また、このフォーマットはDirectX SDK 2008のドキュメントによると、色々と制限がある模様です。
XACTは上述のように「波形データ系」の音声フォーマットのみをサポートしており、JavaのようにMIDI等の「コマンドデータ系」の音声ファイルをサポートていません。
これは「ゲームにおいて実行する環境毎にゲームの音質が変るというのは望ましくない」というような理由があるのかは不明ですが、「波形データ系」の音声のみで設計をすることになります。
波形データ系のみで設計する場合、「Javaにおけるサウンドの設計」にて検討したとおり、BGM等の再生時間の長い楽曲の場合はとてもデータ量が多いため、プログラムが処理を行う際に(メモリの載せて)再生するデータを調整しなければならないのですが、そこは素晴らしい事にXACTがメモリに全て載せて再生するか、ストリームとして分割してメモリに載せて再生するかを指定できます。
しかも波形データなのでエフェクトがかけやすい事もあり、エコーや、データ毎のボリューム変更、ミキシング等一般的なオーディオ機器のDSPのような機能を持っています。
ただし、再生速度の変更が容易に設定できないという話を過去に聴いたことがあり、よくある「時間制限のあるゲームで、時間がなくなってくるとBGMの再生速度が上る…」といった処理の実現が大変という事を聴いたことがあります。この場合は、速度の速い曲をクロスフェードで切り替える方法を取ると良いとか…
(結局のところ、私はこの機能を使用したことがない&実装したことがないので、真偽は不明です(^^ゞ)
このようなことから、Javaの時同様に表を作成すると、
波形データ系 | |
ファイル拡張子 | .wav/.TIFF/.XMA |
音の種別 | 自然音 |
再生による音質の変化 | 基本的に変化無し |
データサイズ | とてつもなく大きい |
ボリューム等の プログラマブル 処理負荷 | とても小さい(XACT任せ) |
SEとして | ○ 向いている |
BGMとして | ○ 向いている (ただしデータサイズの 問題があるので△) |
のような感じでしょうか。
次回は具体的にXNAに付属している「Microsoft Cross-Platform Audio Creation Tool (XACT)」というツールを用いて、XACT用のプロジェクトの作成、XNAのプロジェクトへの登録を行ってみたいと思います。
コメント
コメントの投稿
« 昔のゲームの想い出 [0055] 「キング&バルーン」 [ナムコ] [1980] [アーケード] l Home l Sample Action Gameの紹介 [ステージ20(その1)] »