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

# SHAPE_XMA_CONTEXT

> SHAPE_XMA_CONTEXT

# SHAPE\_XMA\_CONTEXT

XBOX Media Audio (XMA) 內容。

<a id="syntaxSection" />

## 語法

```cpp theme={null}
typedef struct SHAPE_XMA_CONTEXT {  
    UINT32 sizeRead0 : 12;  
    UINT32 numLoops : 8;  
    UINT32 validBuffer : 2;  
    UINT32 sizeWrite : 5;  
    UINT32 offsetWrite : 5;  
    UINT32 sizeRead1 : 12;  
    UINT32 loopSubframeEnd : 2;  
    UINT32 reserved0 : 3;  
    UINT32 loopSubframeSkip : 3;  
    UINT32 numSubframesToDecode : 4;  
    UINT32 numSubframesToSkip : 3;  
    UINT32 sampleRate : 2;  
    UINT32 numChannels : 1;  
    UINT32 reserved1 : 1;  
    UINT32 validWrite : 1;  
    UINT32 offsetRead : 26;  
    UINT32 errorStatus : 5;  
    UINT32 errorSet : 1;  
    UINT32 loopStartOffset : 26;  
    UINT32 parserErrorStatus : 5;  
    UINT32 parserErrorSet : 1;  
    UINT32 loopEndOffset : 26;  
    UINT32 packetMetaData : 5;  
    UINT32 currentBuffer : 1;  
    UINT32 ptrRead0;  
    UINT32 ptrRead1;  
    UINT32 ptrWrite;  
    UINT32 ptrOverlapAdd;  
    UINT32 writeBufferOffsetRead : 5;  
    UINT32 reserved2 : 25;  
    UINT32 stopWhenDone : 1;  
    UINT32 interruptWhenDone : 1;  
    UINT32 reserved[6];  
} SHAPE_XMA_CONTEXT  
```

<a id="membersSection" />

### 成員

*sizeRead0*\
類型: UINT32

寫入: 左側輸入緩衝區的大小 (以 2 KB 區塊為單位)。

*numLoops*\
類型: UINT32

讀取/寫入: 迴圈數目。255 表示無限 (連續) 迴圈。

*validBuffer*\
類型: UINT32

讀取/寫入: 輸入緩衝區的有效性旗標。

| 值 | 描述 |
| - | - |
| 00 | 兩個緩衝區都無效。 |
| 01 | 只有緩衝區 0 (左側) 有效。 |
| 10 | 只有緩衝區 1 (右側) 有效。 |
| 11 | 兩個緩衝區都有效。 |

*sizeWrite*\
類型: UINT32

寫入: 輸出緩衝區的大小 (以 256 位元組區塊為單位)。

*offsetWrite*\
類型: UINT32

讀取: 硬體將寫入的輸出緩衝區位移 (以 256 位元組區塊為單位)。

*sizeRead1*\
類型: UINT32

寫入: 右側輸入緩衝區的大小 (以 2 KB 區塊為單位)。

*loopSubframeEnd*\
類型: UINT32

寫入: 迴圈終點的子框架編號 (包含在內)。

*reserved0*\
類型: UINT32

保留。

*loopSubframeSkip*\
類型: UINT32

寫入: 迴圈開頭要略過的子框架數目。有效值為 0、1、2、3 和 4。

*numSubframesToDecode*\
類型: UINT32

寫入: 每次處理要解碼的子框架數目。有效值為 1、2、4 和 8。

*numSubframesToSkip*\
類型: UINT32

寫入: 要略過的子框架數目。有效值為 0、1、2、3 和 4。

*sampleRate*\
類型: UINT32

寫入: 串流的取樣率。有效值位於 [SHAPE\_XMA\_SAMPLE\_RATE](/zh-TW/reference/audio/shapexmacontext/enums/shape_xma_sample_rate) 列舉中。

*numChannels*\
類型: UINT32

寫入: 串流中的聲道數目。0 表示單聲道 (一個聲道)；1 表示立體聲 (兩個聲道)。

*reserved1*\
類型: UINT32

保留。

*validWrite*\
類型: UINT32

讀取/寫入: 寫入緩衝區的有效性旗標。1 表示硬體可以寫入；0 表示硬體無法寫入。

*offsetRead*\
類型: UINT32

讀取/寫入: 從輸入緩衝區開頭算起的位移 (以位元為單位)。

*errorStatus*\
類型: UINT32

讀取: 一或多個錯誤值。

| 錯誤 | 值 |
| - | - |
| SHAPE\_XMA\_ERROR\_STATUS\_NO\_ERROR\_OCCURRED\_ERRORSET\_IS\_0 | 0 |
| SHAPE\_XMA\_ERROR\_STATUS\_WRITE\_BUFFER\_INVALID\_VALIDWR\_IS\_0 | 1 |
| SHAPE\_XMA\_ERROR\_STATUS\_INSUFFICIENT\_WRITE\_BUFFER\_SPACE\_VALIDWR\_IS\_1 | 2 |
| SHAPE\_XMA\_ERROR\_STATUS\_READ\_BUFFER\_INVALID\_VALIDBUFFER\_CURRBUF\_IS\_0 | 4 |
| SHAPE\_XMA\_ERROR\_STATUS\_FRAME\_CROSSES\_BOUNDARY\_INTO\_INVALID\_READ\_BUFFER\_VALIDBUFFER\_CURRBUF\_IS\_0 | 8 |
| SHAPE\_XMA\_ERROR\_STATUS\_FRAME\_CROSSES\_BOTH\_READ\_BUFFER\_BOUNDARIES | 16 |

*errorSet*\
類型: UINT32

讀取: 錯誤旗標。如果未發生錯誤則為 0；如果發生錯誤則為 1。請使用 [GetShapeXmaErrorStatus](/zh-TW/reference/audio/shapexmacontext/functions/getshapexmaerrorstatus) 擷取錯誤值。

*loopStartOffset*\
類型: UINT32

寫入: 從讀取緩衝區指標算起、硬體開始解碼處的位移 (以位元為單位)。

*parserErrorStatus*\
類型: UINT32

讀取: 剖析器錯誤值。

| 錯誤 | 值 |
| - | - |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_UNKNOWN\_STATE | 1 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_OUT\_OF\_RANGE | 2 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_FRAME\_SIZE\_EXCEEDED | 3 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_BITSTREAM\_CORRUPTION | 4 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_BARKVLC\_ERROR | 5 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_BARKRLC\_ERROR | 6 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_VLC4D\_ERROR | 7 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_VLC2D\_ERROR | 8 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_VLC1D\_ERROR | 9 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_RLC0\_ERROR | 10 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_RLC1\_ERROR | 11 |
| SHAPE\_XMA\_PARSER\_ERROR\_STATUS\_LARGEVAL24\_ERROR | 15 |

*parserErrorSet*\
類型: UINT32

讀取: 剖析器錯誤旗標。如果未發生錯誤則為 0；如果發生錯誤則為 1。請使用 [GetShapeXmaParserErrorStatus](/zh-TW/reference/audio/shapexmacontext/functions/getshapexmaparsererrorstatus) 擷取錯誤值。

*loopEndOffset*\
類型: UINT32

寫入: 從讀取緩衝區指標算起、硬體結束解碼處的位移 (以位元為單位)。

*packetMetaData*\
類型: UINT32

保留供內部使用。

*currentBuffer*\
類型: UINT32

讀取/寫入: 目前的輸入緩衝區。0 表示左側緩衝區，1 表示右側緩衝區。

*ptrRead0*\
類型: UINT32

寫入: 左側輸入緩衝區的指標。對齊 2 KB 邊界；會忽略較低的 11 個位元。

*ptrRead1*\
類型: UINT32

寫入: 右側輸入緩衝區的指標。對齊 2 KB 邊界；會忽略較低的 11 個位元。

*ptrWrite*\
類型: UINT32

寫入: 輸出緩衝區的指標。對齊 64 位元組邊界。

*ptrOverlapAdd*\
類型: UINT32

寫入: 工作緩衝區的指標。對齊 128 位元組邊界。

*writeBufferOffsetRead*\
類型: UINT32

寫入: 輸出緩衝區中讀取指標的位移 (以 256 位元組區塊為單位)。

*reserved2*\
類型: UINT32

保留。

*stopWhenDone*\
類型: UINT32

保留供內部使用。

*interruptWhenDone*\
類型: UINT32

保留供內部使用。

*reserved*\
類型: UINT32\[6]

保留。

<a id="remarksSection" />

## 備註

此結構包含 XMA 解碼器區塊的內容。

輸入緩衝區的大小上限為 8 MB。若要判斷輸入緩衝區的使用狀態，請檢查 *offsetRead*、*currentBuffer* 和 *validBuffer* 成員。

標示為 **讀取** 的成員由音訊控制處理器 (ACP) 程式庫寫入，您的應用程式只應讀取這些成員。標示為 **寫入** 的成員由您的應用程式設定，ACP 程式庫不會變更。標示為 **讀取/寫入** 的成員由您的應用程式設定，但 ACP 程式庫可以變更。

如需詳細資訊，請參閱 [SHAPE 概觀](/zh-TW/build/console-features/audio/overviews/shape-overview)中的 [XMA](/zh-TW/build/console-features/audio/overviews/shape-overview#ID4EYD) 一節。

<a id="requirementsSection" />

## 需求

**標頭:** shapexmacontext.h

**支援的平台:** XBOX One 系列主機和 XBOX Series 主機

<a id="seealsoSection" />

## 概念文件

* [ACP 概觀](/zh-TW/build/console-features/audio/overviews/acp-overview)

## 另請參閱

[ShapeXmaContext](/zh-TW/reference/audio/shapexmacontext/shapexmacontext_members)


## Related topics

- [SHAPE_XMA_CONTEXT](/reference/audio/shapexmacontext/structs/shape_xma_context.md)
- [ShapeXmaContext](/reference/audio/shapexmacontext/shapexmacontext_members.md)
