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

# GetShapeDmaFramesAvailable

> GetShapeDmaFramesAvailable

# GetShapeDmaFramesAvailable

取得可供讀取的框架數目。

## 語法

```cpp theme={null}
UINT32 GetShapeDmaFramesAvailable(  
         const SHAPE_DMA_CONTEXT* context  
)  
```

### 參數

*context*   \_In\_\
類型: [SHAPE\_DMA\_CONTEXT\*](/zh-TW/reference/audio/shapedmacontext/structs/shape_dma_context)

[SHAPE\_DMA\_CONTEXT](/zh-TW/reference/audio/shapedmacontext/structs/shape_dma_context) 結構的指標。

### 傳回值

類型: UINT32

可供讀取的框架數目。

## 備註

您可以確保音訊緩衝區夠大，並以固定間隔 (與緩衝區大小相關) 串流資料，以避免直接記憶體存取 (DMA) 命令遭到封鎖。例如，如果您一次串流四個硬體框架，請確保緩衝區中有這些框架的某個倍數 (至少以八個框架進行雙重緩衝)，讓硬體可以在遊戲的讀取指標之前寫入。或者，您可以在提交下一個 flowgraph 之前強制清空緩衝區 (取用、更新 DMA 讀取指標，然後提交 flowgraph)。如需詳細資訊，請參閱 [封鎖的命令](/zh-TW/build/console-features/audio/overviews/shape-overview#ID4EBGAC) (位於 [SHAPE 概觀](/zh-TW/build/console-features/audio/overviews/shape-overview))。

DMA 系統支援讀取和寫入功能，並可自動進行浮點數轉整數及整數轉浮點數的轉換。DMA 系統使用環形緩衝區，其中包含以 128 個樣本為一個區塊的非交錯樣本。

DMA 處理器可讓可調式硬體音訊處理引擎 (SHAPE) 將資料從混音緩衝區傳送到主系統記憶體，並從主系統擷取資料到混音緩衝區以進行進一步處理。DMA 以區塊為單位進行，一次傳輸一個音訊框架的資料。為了便於處理區塊交錯的資料，略過值會指定讀取或寫入樣本時，系統記憶體中要 (從基底位址) 略過的音訊框架區塊數目。因此，多聲道串流的每個聲道都需要一個 DMA 內容。

音訊資料樣本一律以 32 位元值 (整數或浮點數) 讀取和寫入，如 [SHAPE\_DMA\_CONTEXT](/zh-TW/reference/audio/shapedmacontext/structs/shape_dma_context) 結構的 `floatConvert` 旗標中所指定。請注意，DMA 的方向 (讀取或寫入) 是在 DMA 命令中指定，而不是在 DMA 內容中指定。這有助於減少資料頻寬量。DMA 引擎不進行訊號處理，但可以執行浮點數轉整數 (或整數轉浮點數) 的轉換。這可讓應用程式 CPU 以浮點格式處理資料樣本。

若要計算 DMA 緩衝區的大小，請使用下列公式：

```cpp theme={null}
fullBufferSizeInBytes = 128 * 4 * numChannels * numFrames  
```

讀取和寫入指標會依下列方式遞增：

```cpp theme={null}
readPointer = (readPointer + 1) % numFrames 

writePointer = (writePointer + 1) % numFrames  
```

音訊緩衝區內的位址計算方式如下：

```cpp theme={null}
readAddress = audioBuffer + (128 * 4 * ((readPointer * numChannels) + channel))   

writeAddress = audioBuffer + (128 * 4 * ((writePointer * numChannels) + channel))  
```

## 需求

**標頭：** shapedmacontext.h

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

## 另請參閱

[ShapeDmaContext](/zh-TW/reference/audio/shapedmacontext/shapedmacontext_members)


## Related topics

- [GetShapeDmaFramesAvailable](/es/reference/audio/shapedmacontext/functions/getshapedmaframesavailable.md)
- [ShapeDmaContext](/reference/audio/shapedmacontext/shapedmacontext_members.md)
