XAUDIO2_BUFFER struttura (xaudio2.h)
Rappresenta un buffer di dati audio, usato con IXAudio2SourceVoice::SubmitSourceBuffer.
Sintassi
typedef struct XAUDIO2_BUFFER {
UINT32 Flags;
UINT32 AudioBytes;
const BYTE *pAudioData;
UINT32 PlayBegin;
UINT32 PlayLength;
UINT32 LoopBegin;
UINT32 LoopLength;
UINT32 LoopCount;
void *pContext;
} XAUDIO2_BUFFER;
Members
Flags
Flag che forniscono informazioni aggiuntive sul buffer audio. Può essere 0 o il valore seguente.
Valore | Descrizione |
---|---|
XAUDIO2_END_OF_STREAM | Indica che non è possibile inserire buffer nella coda dopo questo buffer. L'unico effetto di questo flag consiste nell'eliminare gli avvisi di output di debug causati dalla fame della coda del buffer. |
AudioBytes
Dimensioni dei dati audio, in byte. Non deve essere maggiore di XAUDIO2_MAX_BUFFER_BYTES (definito in xaudio2.h) per i dati PCM e non superiore a XMA_READBUFFER_MAX_BYTES (definito in xma2defs.h) per i dati XMA.
pAudioData
Puntatore ai dati audio.
Xbox 360 |
---|
La memoria allocata per un buffer contenente i dati XMA deve avere un allineamento a blocchi pari a 2048. Questa operazione viene eseguita usando XPhysicalAlloc con l'argomento ulAlignment impostato su 2048. |
PlayBegin
Primo esempio nel buffer che deve essere riprodotto.
Per i buffer XMA questo valore deve essere un multiplo di 128 esempi.
PlayLength
Lunghezza dell'area da riprodurre, in esempi. Un valore pari a zero significa riprodurre l'intero buffer e, in questo caso, PlayBegin deve anche essere zero. Per i dati ADPCM questo valore deve essere un multiplo di wSamplesPerBlock nella struttura ADPCMWAVEFORMAT che contiene questa struttura XAUDIO2_BUFFER .
LoopBegin
Primo esempio dell'area da eseguire in ciclo. Il valore di LoopBegin deve essere minore di PlayBegin + PlayLength. LoopBegin può essere minore di PlayBegin. LoopBegin deve essere 0 se LoopCount è 0.
LoopLength
Lunghezza dell'area del ciclo, negli esempi. Il valore di LoopBeginLoopLength deve essere maggiore di PlayBegin+ e minore di PlayBegin + PlayLength. LoopLength deve essere zero se LoopCount è 0. Se LoopCount non è 0, un ciclo di lunghezza pari a zero indica che l'intero esempio deve essere eseguito in ciclo. Per i dati ADPCM questo valore deve essere un multiplo di wSamplesPerBlock nella struttura ADPCMWAVEFORMAT che contiene questa struttura XAUDIO2_BUFFER .
LoopCount
Numero di volte in cui eseguire il ciclo attraverso l'area del ciclo. Questo valore può essere compreso tra 0 e XAUDIO2_MAX_LOOP_COUNT. Se LoopCount non viene eseguito alcun ciclo e LoopBegin e LoopLength devono essere 0. Per eseguire il ciclo per sempre, impostare LoopCount su XAUDIO2_LOOP_INFINITE.
pContext
Valore di contesto da passare nuovamente nei callback al client. Può trattarsi di NULL.
Commenti
I dati audio XAudio2 sono interleaved, i dati di ogni canale sono adiacenti per un determinato numero di esempio. Ad esempio, se si è verificato un'onda di 4 canali in una voce di origine XAudio2, i dati audio sarebbero un esempio di canale 0, un esempio di canale 1, un esempio di canale 2, un esempio di canale 3 e quindi l'esempio successivo di canali 0, 1, 2, 3 e così via.
I membri audioByte e pAudioData di XAUDIO2_BUFFER corrispondono alle dimensioni in byte e contenuto del blocco RIFF "dati" del file riprodotto. Il contenuto del blocco potrebbe essere necessario scambiare byte durante il caricamento del file in Xbox 360.
La memoria allocata per contenere una XAUDIO2_BUFFER o una struttura XAUDIO2_BUFFER_WMA può essere liberata non appena viene passata la chiamata IXAudio2SourceVoice::SubmitSourceBuffer che viene passata a restituisce. I dati a cui punta la struttura (pAudioData e pDecodedPacketCumulativeBytes, rispettivamente) non possono essere liberati finché il buffer non viene completato (come segnalato dal callback IXAudio2VoiceCallback::OnBufferEnd ) o la voce viene arrestata o eliminata.
Requisiti della piattaforma
Windows 10 (XAudio2.9); Windows 8, Windows Phone 8 (XAudio 2.8); DirectX SDK (XAudio 2.7)Requisiti
Intestazione | xaudio2.h |
Vedi anche
Procedura: Creare un grafico di elaborazione audio di base