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

# XDSP インパルス応答低減の概要

> XDSP インパルス応答低減の概要

このトピックでは、XDSP を使用して XBOX Series X デバイスでコンボリューションを実行する際のインパルス応答低減の使用方法について説明します。このメカニズムは、XDSP が提供するハードウェア アクセラレーションを引き続き活用しながら、開発者がオーディオ品質のわずかな損失と大きなパフォーマンスの向上との間で適切なトレードオフを行うための柔軟な方法として開発されました。

## サンプル ツールとソース コード

時間領域のインパルス応答を周波数領域に変換する作業を支援するために提供される IR 変換ツールが、低減メカニズムのサポートを含むように更新されました。品質を指定するコマンド ライン パラメーターを渡すことで、このテーブルを生成するようにツールを設定できます (0.0 から 99.9 の間で、0.0 はインパルス応答のエネルギーの 99.9% が維持されることを意味し、99.9 はパワーの 99.99% が維持されることを意味します)。これを有効にすると、XDSP は処理速度を向上させるため、インパルス応答の非常に低いパワーのサンプル (ゼロからほぼゼロの値) を処理しません。

低減テーブルを設定して書き込むコードは、main.cpp ファイル内の ImpulseResponseReduction という 1 つのクラスにあり、低減テーブルを書き込む関数は ImpulseResponseReduction::SetReductionBlock です。低減テーブルの形式が以下に指定されているとおりであれば、インパルス応答ブロックごとに処理するサンプル数を指定できるため、ニーズに合わせてカスタマイズできます。

## 低減テーブル形式

インパルス応答低減メカニズムは、周波数領域のインパルス応答バッファーの末尾に追加された低減ブロックに基づいて機能します。低減ブロックのサイズは 1 つのインパルス応答ブロックのサイズで、**0xFFFFACE1** に等しい 4 バイトのシグネチャで始まり、その後に最大 15 個の 4 バイト構造体のエントリが続きます。ブロックの残りは 0 で埋める必要があります。

4 バイトの構造体には、2 つの 16 ビット符号なし値 (カットオフ周波数とブロック インデックス) が含まれています。

以下は例です。

```
E1 AC FF FF 80 01 08 00 80 00 56 00 10 00 66 00 10 00 9F 00 10 00 9F 00 10 00 9F 00 10 00 9F 00 10 00 9F 00 10 00 9F 00 10 00 9F 00 10 00 9F 00 10 00 9F 00 10 00 9F 00 10 00 9F 00 10 00 9F 00
```

この例はリトル エンディアンでエンコードされており、以下の表に変換されます。

| カットオフ周波数 | ブロック インデックス |
| -------- | ----------- |
| 384      | 8           |
| 128      | 86          |
| 16       | 102         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |
| 16       | 159         |

XDSP がこのような低減ブロックを処理すると、次のことが発生します。

* ハードウェアは、ブロック 8 まで完全なインパルス応答ブロックを処理します (つまり、ブロックは 0 インデックスであるため、最初の 8 ブロック)。
* ブロック 8 からブロック 86 まで、ハードウェアは各ブロックの最初の 384 サンプルのみを処理し、出力にほとんど影響を与えないと判断された残りのサンプルは破棄します。
* ブロック 86 からブロック 102 まで、ハードウェアは各ブロックの最初の 128 サンプルのみを処理し、残りのサンプルは破棄します。
* ブロック 102 からブロック 159 まで、ハードウェアは各ブロックの最初の 16 サンプルのみを処理し、残りのサンプルは破棄します。この例のインパルス応答はブロックが 158 個しかないため、これはテーブル内の最後の有効なエントリを表します。
* ハードウェアは、現在のエントリよりも大きなブロック インデックスを持つ場合のみ、次のエントリを有効と見なします。したがって、テーブルの残りは最後の有効なエントリで埋められ、無効で無視されることが示されます。

このスキームにより、ハードウェアはより少ない処理を実行し、それによって要求された操作をより速い速度で完了することができ、同時に開発者に対して自身のインパルス応答を最適化するための独自のアルゴリズムを作成する柔軟性を提供します。

## 注意事項

有効なインパルス低減テーブルを生成するカスタム アルゴリズムを実装する際に注意すべきいくつかの項目があります。

* ブロック インデックスは少なくとも 8 の値を持つ必要があります。言い換えれば、インパルス応答の最初の 8 ブロックは決して低減してはなりません。
* カットオフ周波数は 16 の倍数でなければならず、少なくとも 16 である必要があります。
* カットオフ周波数はブロック サイズを超えてはなりません。これは無効なエントリになります。
* インパルス応答低減ブロックのサイズは 1 つの完全なインパルス応答ブロックのサイズである必要があります。テーブルの後のスペースは 0 で埋められることが期待されます。
* ステレオ インパルス応答を低減メカニズムで使用する場合、各チャネルの末尾に低減ブロックが期待されます。
* [XDspActivationParameters](/reference/audio/xdspaudio/structs/xdspactivationparameters) の *impulseResponseLengthInFloats* パラメーターを指定する際、インパルス応答低減ブロックの追加スペースを考慮することを忘れないでください。

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

* [XDspAudio (API 内容)](/reference/audio/xdspaudio/xdspaudio_members)
  * 構造体
    * [XDspActivationParameters](/reference/audio/xdspaudio/structs/xdspactivationparameters)

## 関連項目

[XDSP の概要](/build/console-features/audio/overviews/xdsp-overview)


## Related topics

- [XDSP の概要](/ja-jp/build/console-features/audio/overviews/xdsp-overview.md)
- [XDspActivationParameters](/ja-jp/reference/audio/xdspaudio/structs/xdspactivationparameters.md)
- [XDSP エンベロープ処理の概要](/ja-jp/build/console-features/audio/overviews/xdsp-overview-enveloping.md)
- [XDspSubmitCommandWithEnvelope](/ja-jp/reference/audio/xdspaudio/functions/xdspsubmitcommandwithenvelope.md)
- [XDspProcessType](/ja-jp/reference/audio/xdspaudio/enums/xdspprocesstype.md)
