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

# 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](/reference/audio/xapu/structs/xapucommandid)

처리를 위해 하드웨어에 전송될 기본 명령 매개 변수를 지정합니다. 동일한 XApuCommandId가 [XApuResult::id](/reference/audio/xapu/structs/xapuresult)에 설정됩니다.

*pitchRampRate*\
형식: float

각 출력에 대해 현재 피치에서 더해지거나 뺄 값입니다.
이 값은 부호가 없으며 샘플 속도 변환기 엔진이 대상 피치 값에 따라 현재 피치에서 더할지 뺄지를 자동으로 결정합니다.
기본적으로 이 값은 *XAPU\_DEFAULT\_PITCH\_RAMP\_RATE*로 설정되어야 합니다.

*targetPitch*\
형식: float

현재 변환 작업의 대상 피치입니다. [XApuProcessType::DecodeOpus](/reference/audio/xapu/enums/xapuprocesstype)의 경우 이 값은 무시됩니다.

*firstFrameIndex*\
형식: uint32\_t

출력 버퍼에 복사될 첫 번째 프레임의 인덱스를 지정합니다. firstFrameIndex와 frameCount는 함께 출력 버퍼에 복사되는 것을 지정합니다. 이 구현에서는 firstFrameIndex를 사용할 때 잔여 데이터를 포함하지 않습니다. 잔여 프레임이 100개이고 firstFrameIndex가 50, frameCount가 200으로 설정된 경우, 디코딩된 데이터의 50번째 프레임부터 시작하여 200프레임이 전체 잔여 프레임에 추가됩니다. 즉, HSRC로 입력되는 버퍼는 잔여의 원본 100프레임 뒤에 현재 디코딩된 패킷의 50번째 프레임에서 시작하는 200프레임이 이어집니다.

PCM 스트림의 오디오 프레임은 동일한 시간(클록 틱)에 재생되거나 캡처된 샘플 집합입니다(집합에는 스트림의 각 채널당 하나의 샘플이 포함됨). 따라서 오디오 프레임의 크기는 샘플 크기에 스트림의 채널 수를 곱한 값입니다.

예를 들어 32비트 float 샘플을 갖는 스테레오(2채널) 스트림의 프레임 크기는 8바이트입니다. 이 값은 20밀리초 패킷 지속 시간을 갖는 Opus 스트림의 경우 0에서 960 사이여야 합니다. 10밀리초 패킷 지속 시간을 갖는 Opus 스트림의 경우 0에서 480 사이여야 합니다. 기본적으로 이 값은 0으로 설정됩니다. Preroll 입력의 경우, 이 값은 0보다 커야 합니다. Preroll 입력은 처리되지만 출력 데이터를 생성하지는 않습니다.

*frameCount*\
형식: uint32\_t

이 매개 변수는 [XApuProcessType::ConvertPCM](/reference/audio/xapu/enums/xapuprocesstype) 처리에서 입력 데이터가 압축되지 않은 경우에 필요하며, 다음과 같은 제약이 있습니다.

* 모노 및 스테레오 입력 디인터리브 PCM 데이터의 경우 최소값은 4, 최대값은 960이며, 값은 4의 배수여야 합니다.
* 스테레오 입력 인터리브 PCM 데이터의 경우 최소값은 8, 최대값은 960이며, 값은 8의 배수여야 합니다.
* [XApuProcessType::DecodeOpus](/reference/audio/xapu/enums/xapuprocesstype)의 경우 이 값을 사용하여 출력 프레임 수를 자를 수 있습니다.
* [XApuProcessType::DecodeConvertOpus](/reference/audio/xapu/enums/xapuprocesstype)의 경우 이 값을 사용하여 변환기로 전달될 디코딩된 프레임 수를 자를 수 있습니다.

이 매개 변수가 스트림의 마지막 패킷이나 루프 지점을 자르는 데 사용되는 경우, 20밀리초 패킷 지속 시간을 갖는 Opus 스트림에서는 0에서 960 사이의 어떤 값이든 사용할 수 있고, 10밀리초 패킷 지속 시간을 갖는 Opus 스트림에서는 0에서 480 사이의 어떤 값이든 사용할 수 있습니다.

스트림 중간에서 패킷의 출력을 잘라야 하는 경우, 위의 [XApuProcessType::ConvertPCM](/reference/audio/xapu/enums/xapuprocesstype) 제약에 따라 값을 설정해야 합니다.

자르기가 필요하지 않은 경우, 이 매개 변수는 0xFFFFFFFF로 설정해야 합니다.

[XApuProcessType::DecodeOpus](/reference/audio/xapu/enums/xapuprocesstype) 및 [XApuProcessType::DecodeConvertOpus](/reference/audio/xapu/enums/xapuprocesstype) 케이스의 경우 [XApuDecodeConvertCommand::frameCount](/reference/audio/xapu/structs/xapudecodeconvertcommand) 및 [XApuDecodeConvertCommand::firstFrameIndex](/reference/audio/xapu/structs/xapudecodeconvertcommand) 매개 변수는 프레임 단위의 정확한 탐색에 사용해야 합니다.

PCM 스트림의 오디오 프레임은 동일한 시간(클록 틱)에 재생되거나 캡처된 샘플 집합입니다(집합에는 스트림의 각 채널당 하나의 샘플이 포함됨). 따라서 오디오 프레임의 크기는 샘플 크기에 스트림의 채널 수를 곱한 값입니다. 예를 들어 32비트 float 샘플을 갖는 스테레오(2채널) 스트림의 프레임 크기는 8바이트입니다.

*inputDataLength*\
형식: uint32\_t

입력 데이터 길이(바이트)입니다. 길이는 16의 배수여야 합니다. [XApuProcessType::ConvertPCM](/reference/audio/xapu/enums/xapuprocesstype) 케이스의 경우 이 값은 [XApuDecodeConvertCommand::frameCount](/reference/audio/xapu/structs/xapudecodeconvertcommand) x [XApuDecodeConvertActivateCommand::channelCount](/reference/audio/xapu/structs/xapudecodeconvertcommand) x sizeof(float)와 같아야 합니다.

*inputData*\
형식: void\*

처리를 위한 입력 데이터를 가리키는 포인터입니다. 이 값은 [XApuConnect](/reference/audio/xapu/functions/xapuconnect)에서 반환된 [XApuConnectOutputParameters::data](/reference/audio/xapu/structs/xapuconnectoutputparameters)보다 크거나 같아야 하며, [XApuConnectOutputParameters::data](/reference/audio/xapu/structs/xapuconnectoutputparameters) + [XApuConnectInputParameters::dataLength](/reference/audio/xapu/structs/xapuconnectinputparameters)보다 작아야 합니다. *이 버퍼는 16바이트 정렬이어야 합니다.*

[XApuProcessType::DecodeOpus](/reference/audio/xapu/enums/xapuprocesstype) 및 [XApuProcessType::DecodeConvertOpus](/reference/audio/xapu/enums/xapuprocesstype)의 경우 입력 데이터는 단일 Opus 패킷(SILK, CELT 또는 Hybrid)이어야 합니다.

[XApuProcessType::ConvertPCM](/reference/audio/xapu/enums/xapuprocesstype)의 경우 입력 데이터는 PCM float(32비트)여야 합니다. [XApuConnectOptions::DeinterleavedInput](/reference/audio/xapu/enums/xapuconnectoptions) 플래그가 설정된 경우, 입력 PCM 데이터는 디인터리브되어야 합니다.

[XApuProcessType::ConvertPCM](/reference/audio/xapu/enums/xapuprocesstype) 디인터리브 입력의 경우, 첫 번째 채널 데이터는 [XApuDecodeConvertCommand::inputData](/reference/audio/xapu/structs/xapudecodeconvertcommand)에서 시작하고
두 번째 채널 데이터는 [XApuDecodeConvertCommand::inputData](/reference/audio/xapu/structs/xapudecodeconvertcommand) + ([XApuDecodeConvertCommand::inputDataLength](/reference/audio/xapu/structs/xapudecodeconvertcommand) / 2)에서 시작합니다.

*maxOutputDataLength*\
형식: uint32\_t

바이트 단위의 최대 출력 데이터 길이입니다. 길이는 16의 배수여야 합니다. [XApuConnectInputParameters::baseDataLength](/reference/audio/xapu/structs/xapuconnectinputparameters)를 초과해서는 안 됩니다.

*outputData*\
형식: void\*

출력 PCM float(32비트) 데이터를 저장할 포인터입니다. 이 값은 [XApuConnect](/reference/audio/xapu/functions/xapuconnect)에서 반환된 [XApuConnectOutputParameters::data](/reference/audio/xapu/structs/xapuconnectoutputparameters)보다 크거나 같아야 하며, [XApuConnectOutputParameters::data](/reference/audio/xapu/structs/xapuconnectoutputparameters) + [XApuConnectInputParameters::baseDataLength](/reference/audio/xapu/structs/xapuconnectinputparameters)보다 작아야 합니다. 이 버퍼는 16바이트 정렬이어야 합니다.

[XapuConnectOptions::DeinterleavedOutput](/reference/audio/xapu/enums/xapuconnectoptions) 플래그가 설정된 경우, 데이터는 디인터리브 형식으로 제공됩니다. 각 패킷에서 디인터리브 중간 지점은 다음과 같이 지정됩니다.

[XApuProcessType::DecodeOpus](/reference/audio/xapu/enums/xapuprocesstype):

* 왼쪽 채널 프레임은 0에서 (XapuResult::outputFrameCount-1)까지 배치되고, 오른쪽 채널 프레임은 (XapuResult::outputFrameCount)에서 버퍼의 끝까지 배치됩니다.

[XApuProcessType::DecodeConvertOpus](/reference/audio/xapu/enums/xapuprocesstype) 및 [XApuProcessType::ConvertPCM](/reference/audio/xapu/enums/xapuprocesstype):

* 왼쪽 채널 프레임은 0에서 ([XApuConnectInputParameters::maxFrameCountPerOutput](/reference/audio/xapu/structs/xapuconnectinputparameters) - 1)까지 배치됩니다.
* 오른쪽 채널 프레임은 [XApuConnectInputParameters::maxFrameCountPerOutput](/reference/audio/xapu/structs/xapuconnectinputparameters)에서 버퍼의 끝까지 배치됩니다.
* OutputFrameCount가 maxFrameCountPerOutput보다 적더라도 마찬가지입니다. 이 경우 [XApuConnectInputParameters::maxFrameCountPerOutput](/reference/audio/xapu/structs/xapuconnectinputparameters)를 사용하여 버퍼의 중간 지점을 결정하고, [XapuResult::outputFrameCount](/reference/audio/xapu/structs/xapuresult)를 사용하여 채널당 복사할 프레임 수를 계산합니다.

## 설명

`XApuDecodeConvertCommand`는 처리 매개 변수를 디코딩하고 변환하는 데 사용됩니다. `XApuCommandId` 멤버에 대한 자세한 내용은 [XApuCommandId](/reference/audio/xapu/structs/xapucommandid)를 참조하세요. `XApuPorcessType`에 대한 자세한 내용은 [XApuProcessType](/reference/audio/xapu/enums/xapuprocesstype)를 참조하세요.

피치 램프 속도의 범위는 2^-18(0.000003814697265625)에서 8.0까지입니다. 최소값보다 작은 값은 램핑이 아무런 작동도 하지 않게 하며, 피치는 현재 값에 유지됩니다. 램프 속도가 현재 값과 대상 값 차이의 절대값보다 클 때는 언제나 하나의 샘플 기간 내에 램프가 발생합니다.

## 요구 사항

**헤더:** xapu.h

**지원 플랫폼:** XBOX Series X|S

## 개념 설명서

* [XAPU 개요](/build/console-features/audio/overviews/xapu-overview)

## 관련 항목

[XApuEnqueueCommand](/reference/audio/xapu/functions/xapuenqueuecommand)\
[XApuResult](/reference/audio/xapu/structs/xapuresult)\
[XAPU](/reference/audio/xapu/xapu_members)


## Related topics

- [XApuConnect](/ko/reference/audio/xapu/functions/xapuconnect.md)
- [XApuCommandId](/ko/reference/audio/xapu/structs/xapucommandid.md)
- [XApuConnectInputParameters](/ko/reference/audio/xapu/structs/xapuconnectinputparameters.md)
- [XApuConnectOutputParameters](/ko/reference/audio/xapu/structs/xapuconnectoutputparameters.md)
- [XAPU 개요](/ko/build/console-features/audio/overviews/xapu-overview.md)
