> ## 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.

# XApuDecodeConvertCommand

> XApuDecodeConvertCommand

# XApuDecodeConvertCommand

デコードまたはデコード変換の処理パラメーターを定義します。

## 構文

```cpp theme={null}
typedef struct XApuDecodeConvertCommand {  
    XApuCommandId id;  
    float pitchRampRate;  
    float targetPitch;  
    uint32_t firstFrameIndex;  
    uint32_t frameCount;  
    uint32_t inputDataLength;  
    void* inputData;  
    uint32_t maxOutputDataLength;  
    void* outputData;  
} XApuDecodeConvertCommand  
```

### メンバー

*id*\
型: [XApuCommandId](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapucommandid.md)

処理のためにハードウェアに送信される基本コマンド パラメーターを指定します。同じ XApuCommandId が [XApuResult::id](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuresult.md) に設定されます。

*pitchRampRate*\
型: float

出力ごとに現在のピッチに加算または減算される値です。
この値は符号なしであり、サンプル レート コンバーター エンジンは、ターゲット ピッチの値に応じて、現在のピッチから加算するか減算するかを自動的に判断します。
既定では、この値は *XAPU\_DEFAULT\_PITCH\_RAMP\_RATE* に設定する必要があります。

*targetPitch*\
型: float

現在の変換操作のターゲット ピッチ。[XApuProcessType::DecodeOpus](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) の場合は、この値は無視されます。

*firstFrameIndex*\
型: uint32\_t

出力バッファーにコピーされる最初のフレームのインデックスを指定します。firstFrameIndex と frameCount の組み合わせによって出力バッファーにコピーされる内容が決まります。この実装では、firstFrameIndex を使用するときに残余データは含めません。100 フレームの残余があり、firstFrameIndex が 50 に設定され、frameCount が 200 に設定されている場合、200 フレームがデコードされたデータの 50 番目のフレームから始まる残余全体に追加されます。つまり、HSRC に送られるバッファーには、残余からの元の 100 フレームに続いて、現在のデコード済みパケットの 50 番目のフレームから始まる 200 フレームが含まれます。

PCM ストリームのオーディオ フレームは、同じタイミング (クロック ティック) で再生またはキャプチャされるサンプルのセット (ストリームの各チャネルにつき 1 つのサンプルを含む) です。したがって、オーディオ フレームのサイズは、サンプル サイズにストリーム内のチャネル数を乗じた値になります。

たとえば、32 ビット float サンプルのステレオ (2 チャネル) ストリームのフレーム サイズは 8 バイトです。この値は、20 ミリ秒パケット持続時間の Opus ストリームでは 0 から 960 の間である必要があります。10 ミリ秒パケット持続時間の Opus ストリームでは 0 から 480 の間である必要があります。既定では、この値は 0 に設定されます。プリロール入力の場合、この値は 0 より大きくする必要があります。プリロール入力は処理されますが、出力データは生成されません。

*frameCount*\
型: uint32\_t

このパラメーターは、入力データが [XApuProcessType::ConvertPCM](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) 処理で非圧縮の場合に必要で、次の制約があります。

* モノラルおよびステレオのデインターリーブ PCM 入力データの場合、最小値は 4、最大値は 960 で、値は 4 の倍数である必要があります。
* ステレオのインターリーブ PCM 入力データの場合、最小値は 8、最大値は 960 で、値は 8 の倍数である必要があります。
* [XApuProcessType::DecodeOpus](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) の場合、この値は出力フレーム数を切り詰めるために使用できます。
* [XApuProcessType::DecodeConvertOpus](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) の場合、この値はコンバーターに渡されるデコード済みフレーム数を切り詰めるために使用できます。

このパラメーターがストリームの最後のパケットまたはループ ポイントを切り詰めるために使用される場合、20 ミリ秒パケット持続時間の Opus ストリームでは 0 から 960 の任意の値、10 ミリ秒パケット持続時間の Opus ストリームでは 0 から 480 の任意の値を使用できます。

このパラメーターがストリームの途中のパケットの出力を切り詰めるために使用される場合、値は上記の [XApuProcessType::ConvertPCM](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) の制約に従って設定する必要があります。

切り詰めが必要ない場合、このパラメーターは 0xFFFFFFFF に設定する必要があります。

[XApuProcessType::DecodeOpus](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) および [XApuProcessType::DecodeConvertOpus](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) の場合、[XApuDecodeConvertCommand::frameCount](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapudecodeconvertcommand.md) と [XApuDecodeConvertCommand::firstFrameIndex](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapudecodeconvertcommand.md) パラメーターは、フレーム単位で正確なシークに使用する必要があります。

PCM ストリームのオーディオ フレームは、同じタイミング (クロック ティック) で再生またはキャプチャされるサンプルのセット (ストリームの各チャネルにつき 1 つのサンプルを含む) です。したがって、オーディオ フレームのサイズは、サンプル サイズにストリーム内のチャネル数を乗じた値になります。たとえば、32 ビット float サンプルのステレオ (2 チャネル) ストリームのフレーム サイズは 8 バイトです。

*inputDataLength*\
型: uint32\_t

入力データ長 (バイト単位)。長さは 16 の倍数である必要があります。[XApuProcessType::ConvertPCM](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) の場合、この値は [XApuDecodeConvertCommand::frameCount](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapudecodeconvertcommand.md) x [XApuDecodeConvertActivateCommand::channelCount](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapudecodeconvertcommand.md) x sizeof(float) と等しくなければなりません。

*inputData*\
型: void\*

処理のための入力データへのポインター。この値は、[XApuConnect](https://docs.xbox.com/ja-jp/reference/audio/xapu/functions/xapuconnect.md) によって返された [XApuConnectOutputParameters::data](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectoutputparameters.md) 以上、かつ [XApuConnectOutputParameters::data](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectoutputparameters.md) + [XApuConnectInputParameters::dataLength](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectinputparameters.md) 未満である必要があります。*このバッファーは 16 バイト境界にアラインされている必要があります。*

[XApuProcessType::DecodeOpus](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) および [XApuProcessType::DecodeConvertOpus](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) の場合、入力データは 1 つの Opus パケット (SILK、CELT、または Hybrid) である必要があります。

[XApuProcessType::ConvertPCM](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) の場合、入力データは PCM float (32 ビット) である必要があります。[XApuConnectOptions::DeinterleavedInput](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuconnectoptions.md) フラグが設定されている場合、入力 PCM データはデインターリーブされている必要があります。

[XApuProcessType::ConvertPCM](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) のデインターリーブ入力では、最初のチャネル データは [XApuDecodeConvertCommand::inputData](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapudecodeconvertcommand.md) から始まり、
2 番目のチャネル データは [XApuDecodeConvertCommand::inputData](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapudecodeconvertcommand.md) + ([XApuDecodeConvertCommand::inputDataLength](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapudecodeconvertcommand.md) / 2) から始まります。

*maxOutputDataLength*\
型: uint32\_t

最大出力データの長さ (バイト単位)。長さは 16 の倍数である必要があります。[XApuConnectInputParameters::baseDataLength](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectinputparameters.md) を超えてはなりません。

*outputData*\
型: void\*

出力 PCM float (32 ビット) データを保持するためのポインター。この値は、[XApuConnect](https://docs.xbox.com/ja-jp/reference/audio/xapu/functions/xapuconnect.md) によって返された [XApuConnectOutputParameters::data](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectoutputparameters.md) 以上、かつ [XApuConnectOutputParameters::data](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectoutputparameters.md) + [XApuConnectInputParameters::baseDataLength](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectinputparameters.md) 未満である必要があります。このバッファーは 16 バイト境界にアラインされている必要があります。

[XapuConnectOptions::DeinterleavedOutput](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuconnectoptions.md) フラグが設定されている場合、データはデインターリーブされた状態で提供されます。各パケット内では、デインターリーブの中間点は次のように指定されます。

[XApuProcessType::DecodeOpus](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md):

* 左チャネルのフレームは 0 から (XapuResult::outputFrameCount-1) までに配置されます。右チャネルのフレームは (XapuResult::outputFrameCount) からバッファーの末尾までに配置されます。

[XApuProcessType::DecodeConvertOpus](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) および [XApuProcessType::ConvertPCM](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md):

* 左チャネルのフレームは 0 から ([XApuConnectInputParameters::maxFrameCountPerOutput](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectinputparameters.md) - 1) までに配置されます。
* 右チャネルのフレームは [XApuConnectInputParameters::maxFrameCountPerOutput](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectinputparameters.md) からバッファーの末尾までに配置されます。
* OutputFrameCount が maxFrameCountPerOutput 未満の場合でも、これは当てはまります。この場合、バッファーの中間点を決定するために [XApuConnectInputParameters::maxFrameCountPerOutput](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectinputparameters.md) を使用し、チャネルごとにコピーするフレーム数を計算するために [XapuResult::outputFrameCount](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuresult.md) を使用してください。

## 解説

`XApuDecodeConvertCommand` は、デコード変換の処理パラメーターに使用されます。`XApuCommandId` メンバーの詳細については、[XApuCommandId](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapucommandid.md) を参照してください。`XApuPorcessType` の詳細については、[XApuProcessType](https://docs.xbox.com/ja-jp/reference/audio/xapu/enums/xapuprocesstype.md) を参照してください。

ピッチ ランプ レートの範囲は 2^-18 (0.000003814697265625) から 8.0 までです。最小値未満の値では、ランプは何も行いません — ピッチは現在の値のままになります。ランプ レートが現在の値とターゲット値の差の絶対値よりも大きい場合、ランプは 1 サンプル周期内に発生します。

## 要件

**ヘッダー:** xapu.h

**サポートされているプラットフォーム:** XBOX Series X|S

## 概念ドキュメント

* [XAPU の概要](https://docs.xbox.com/ja-jp/build/console-features/audio/overviews/xapu-overview.md)

## 関連項目

[XApuEnqueueCommand](https://docs.xbox.com/ja-jp/reference/audio/xapu/functions/xapuenqueuecommand.md)\
[XApuResult](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuresult.md)\
[XAPU](https://docs.xbox.com/ja-jp/reference/audio/xapu/xapu_members.md)


## Related topics

- [XApuConnect](https://docs.xbox.com/ja-jp/reference/audio/xapu/functions/xapuconnect.md)
- [XApuConnectInputParameters](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectinputparameters.md)
- [XApuConnectOutputParameters](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapuconnectoutputparameters.md)
- [XApuCommandId](https://docs.xbox.com/ja-jp/reference/audio/xapu/structs/xapucommandid.md)
- [XAPU の概要](https://docs.xbox.com/ja-jp/build/console-features/audio/overviews/xapu-overview.md)
