> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XDSP の概要

> XBOX Series X|S コンソール上で、ハードウェア アクセラレーションによるコンボリューション リバーブ、FFT および IFFT、インパルス応答エンベロープを実現する XDSP API を利用します。

このトピックでは、[XDSP API](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/xdspaudio_members.md) の概要を提供します。XDSP を使用すると、タイトルは XBOX Series X|S ファミリー コンソール上でハードウェア アクセラレーションによるコンボリューション リバーブ機能を活用できます。現在の実装では、リアルタイムで 80 秒のインパルス応答を処理できます。たとえば、それぞれ 2 秒のインパルス応答を持つ 40 のストリームをリアルタイムで同時に処理できます。

### October 2022 リリースの新機能

* 2 つの新しい API [XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md) と [XDspSubmitCommandWithEnvelope](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspsubmitcommandwithenvelope.md) が追加されました。**XDspConnectWithMaximumStreamLimit** は、アクティブ化できるストリームの最大数が 256 未満の場合、内部的にメモリ使用量が少なくなります。一方、[XDspConnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnect.md) は 256 ストリームを考慮するため、より多くのメモリを使用します。
  **XDspSubmitCommandWithEnvelope** は、インパルス応答フィルターのエンベロープ処理を有効にします。[XDSP API を使用したエンベロープ処理の概要](https://docs.xbox.com/ja-jp/build/console-features/audio/overviews/xdsp-overview-enveloping.md)を参照してください。

### リリース機能

* コンボリューションでは、サポートされるブロック サイズは 512 および 1024 フレームです。1024 フレームのブロック サイズを使用するとパフォーマンスがより良くなります。
* FFT/IFFT では、サポートされるブロック サイズは 512、1024、および 2048 フレームです。
* コンボリューションは、モノラルおよびステレオのインパルス応答で、モノラル、ステレオ、およびステレオ非インターリーブ モードでサポートされています。
* [XDspConnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnect.md) または [XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md) の呼び出しは、ハードウェアとの接続を確立し、XDspClientHandle を返します。任意の時点でアクティブにできる接続は 8 つのみです。
* [XDspConnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnect.md) の呼び出しでサポートされる最大の *aggregateImpulseResponseInSeconds* は 128 です。これはまた、すべての XDspConnect 呼び出し全体での最大値でもあります。単一の XDspConnect 呼び出しが aggregateImpulseResponseInSeconds に 128 を指定して行われた場合、aggregateImpulseResponseInSeconds の値が 0 より大きい XDspConnect 呼び出しを追加で行うことはできません。コンボリューション処理のストリーム アクティブ化を許可するには、aggregateImpulseResponseInSeconds がゼロより大きい必要があります。
* [XDspConnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnect.md) によって返される任意の [XDspClientHandle](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/handles/xdspclienthandle.md) に対して、[XDspActivate](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspactivate.md) を使用して最大 256 ストリームをアクティブ化できます。[XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md) によって返される任意の [XDspClientHandle](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/handles/xdspclienthandle.md) に対して、[XDspActivate](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspactivate.md) を使用して最大 *maximumStreamCount* ストリームをアクティブ化できます。*maximumStreamCount* は **XDspConnectWithMaximumStreamLimit** の呼び出しで使用されるストリーム数です。これらのストリームは、任意の [XDspProcessType](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/enums/xdspprocesstype.md) にすることができます。
* ステレオ入力が使用される場合、サポートされる最大の集約インパルス応答は 64 秒に低下します。
* API に渡されるすべてのバッファーは 16 バイトにアラインされている必要があります。バッファーが 16 バイトにアラインされていない場合、ハードウェアはフォールトに遭遇してリセットする可能性があります。ハードウェアがクラッシュ/ハングに遭遇したとき、[XDspStatus.result](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/structs/xdspstatus.md) は XDSP\_E\_DEVICE\_FATAL\_ERROR を示します。
* **インパルス応答は周波数領域にある必要があります。時間領域のインパルス応答を周波数領域に変換するツールが提供されています。** [https://aka.ms/gdkdl](https://aka.ms/gdkdl) からダウンロードしてください。
* インパルス応答変換ツールは、パフォーマンスの向上と引き換えに品質の低下を許容できる低減サポートを含めるようになりました。詳細については、[XDSP インパルス応答低減の概要](https://docs.xbox.com/ja-jp/build/console-features/audio/overviews/xdsp-overview-ir-reduction.md)を参照してください。
* [XDspConnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnect.md) の呼び出しのレイテンシーが改善されました。

### 既知の問題

* [XDspActivationOptions](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/enums/xdspactivationoptions.md) の FFT/IFFT 処理用の "EnablePolarFormat" オプションは、既定のデカルト形式と比較して相当な時間がかかります。デカルト形式のほうがパフォーマンスが優れています。

### ベスト プラクティス

* ハードウェアがフォールトに遭遇した場合でも、ハードウェアに送信された各コマンドに対して応答があります。ストリームを非アクティブ化するために [XDspDeactivate](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspdeactivate.md) を呼び出す前に、呼び出し元はハードウェアがすべてのコマンドを処理するのを待つ必要があります。[XDspStatus.lastProcessedCommandSequence](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/structs/xdspstatus.md) は、このストリームに対してハードウェアが処理した最後のコマンドのシーケンス番号を示します。他の XDSP ストリームは影響を受けず、ハードウェアはそれらのコマンドを引き続き処理します。
* [XDspConnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnect.md) の呼び出しに渡される *"baseBuffer"* は、すべてのストリームが [XDspDeactivate](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspdeactivate.md) を使用して非アクティブ化され、[XDspDisconnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspdisconnect.md) が成功するまで、解放してはなりません。
* 各ストリームには内部キュー制限があり、この制限に達すると [XDspSubmitCommand](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspsubmitcommand.md) は XDSP\_E\_QUEUE\_FULL を返します。このエラーが発生した場合は、さらにコマンドを送信する前に、このストリームに対してハードウェアがコマンドを処理するのに十分な時間を与えてください。[XDspStatus.lastProcessedCommandSequence](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/structs/xdspstatus.md) を使用して、このストリームに対してハードウェアが処理した最後のコマンドを確認できます。
* コンボリューションでは、512 ブロック サイズと比較して 1024 ブロック サイズの方がパフォーマンスが優れています。
* コンボリューション アルゴリズムは、連続するコマンドの処理に関して均質ではありません。つまり、すべてのブロックが完了するのに同じ時間がかからず、一部のブロックは他のブロックよりも長い時間がかかる可能性があります。

### タイトルの一時停止と再開

タイトルは、たとえばユーザーが Constrained モードにしたときなど、一時停止と再開ができる必要があります。suspend ハンドラーが呼び出されたら、単純にハードウェアへの XDSP コマンドの送信を停止してください。既に送信されたコマンドは正常に処理され、XDspStatus はそれに応じて更新されます。

### サンプル

* [https://aka.ms/gdkdl](https://aka.ms/gdkdl) および ATG サンプルからダウンロードできます。
  サンプル ウォークスルーは、[シングル ストリーム コンボリューション リバーブ](https://docs.xbox.com/ja-jp/build/console-features/audio/overviews/xdsp-overview-single-stream-convolution.md)および[シングル ストリーム FFT IFFT](https://docs.xbox.com/ja-jp/build/console-features/audio/overviews/xdsp-overview-single-stream-fft-ifft.md) で利用可能です
* 時間領域のインパルス応答を周波数領域に変換するためにハードウェア アクセラレーターを使用する XDSP サンプルが、GDK ダウンロード ポータル [https://aka.ms/gdkdl](https://aka.ms/gdkdl) の他のサンプルと共に含まれています。このサンプルは、GDK のインストールに含まれる Impulse Response Transform ツールとまったく同じ出力を生成します。このサンプルは、XDSP API で使用するためにハードウェア アクセラレーションを使用してインパルス応答をその場で変換する方法を示します。

### 連絡先

この機能についてご質問やご懸念がある場合は、[AnaAud@microsoft.com](mailto:AnaAud@microsoft.com) までメールでお問い合わせいただくか、オンライン フォーラムをご利用ください。

## リファレンス API ドキュメント

* [Xdspaudio (API 内容)](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/xdspaudio_members.md)
  * 関数
    * [XDspConnectWithMaximumStreamLimit](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnectwithmaximumstreamlimit.md)
    * [XDspSubmitCommandWithEnvelope](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspsubmitcommandwithenvelope.md)
    * [XDspConnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnect.md)
    * [XDspActivate](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspactivate.md)
    * [XDspDeactivate](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspdeactivate.md)
    * [XDspDisconnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspdisconnect.md)
    * [XDspSubmitCommand](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspsubmitcommand.md)
  * 構造体
    * [xdspstatus](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/structs/xdspstatus.md)


## Related topics

- [XDSP エンベロープ処理の概要](https://docs.xbox.com/ja-jp/build/console-features/audio/overviews/xdsp-overview-enveloping.md)
- [XDSP オーディオ](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/xdspaudio_members.md)
- [XDSP インパルス応答低減の概要](https://docs.xbox.com/ja-jp/build/console-features/audio/overviews/xdsp-overview-ir-reduction.md)
- [XDSP API を使用したシングル ストリーム コンボリューションの概要](https://docs.xbox.com/ja-jp/build/console-features/audio/overviews/xdsp-overview-single-stream-convolution.md)
- [XDspConnect](https://docs.xbox.com/ja-jp/reference/audio/xdspaudio/functions/xdspconnect.md)
