Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Glitch possono verificarsi in XAudio2, questo argomento illustra come vengono segnalati e alcuni approcci per correggerli.
Questa panoramica illustra gli argomenti seguenti:
- Cause di problemi o malfunzionamenti dell'output audio
- come XAudio2 segnala i problemi
- Approcci per risolvere i problemi
- argomenti correlati
Cause di problemi o errori di output audio
Glitch possono verificarsi nell'output di XAudio2 per diversi motivi.
- Una voce di origine XAudio2 è affamata. Il client non invia il nuovo audio abbastanza rapidamente. Si ottiene il silenzio perché non ha dati da giocare.
- XAudio2 nel suo complesso è sovraccaricato. Ci vuole più tempo per produrre X ms di audio rispetto a X ms. Si verificano interruzioni perché XAudio2 non può produrre dati alla velocità richiesta dal dispositivo audio. Potresti eseguire troppe voci o effetti alla volta, eseguendo troppe operazioni nei callback di XAudio2 o effettuando chiamate API XAudio2 troppo frequentemente.
- Il thread di elaborazione audio si sta bloccando perché l'implementazione da parte del client di alcuni callback di XAudio2 sta eseguendo operazioni che possono bloccare il thread. Ad esempio, potrebbe accedere al disco, sincronizzare con altri thread o chiamare altre funzioni che potrebbero bloccarsi. Usare un thread in background con priorità inferiore che il callback può segnalare per eseguire tali attività.
- Il sistema nel suo complesso è sovraccarico. Altri thread in esecuzione con la stessa priorità o superiore rispetto a XAudio2 stanno eseguendo troppe operazioni. Sono in competizione con il thread audio per il tempo della CPU.
Come XAudio2 segnala i problemi
XAudio2 può comunicare glitch nella build di debug in diversi modi.
Se una voce viene trascurata, XAudio2 visualizza un messaggio in questa forma.
XAudio2: WARNING: Voice at 0xNNNNNNNN starved: no more source buffers are available, but no end-of-stream marker was received
Se il thread audio viene eseguito per troppo tempo, XAudio2 visualizza un messaggio in questo formato.
XAudio2: WARNING: Spent Xms in audio thread; XAudio2 possibly overloaded
In genere, questo messaggio si verifica con il messaggio successivo.
Se il driver audio non può ricevere i nuovi dati audio in tempo, XAudio2 visualizza un messaggio in questa forma.
XAudio2: WARNING: Glitch at output sample X
La chiamata IXAudio2::GetPerformanceData fornisce dati sulle prestazioni di XAudio2, incluso il numero totale di glitch dall'avvio del motore XAudio2.
Approcci alla risoluzione dei problemi
I possibili modi per ridurre problemi audio includono quanto segue.
Nel caso di carenza di voce: aumentare la quantità di dati audio accodati su una voce. Puoi usare IXAudio2SourceVoice::GetState per individuare il numero di buffer accodati in qualsiasi momento. Se vengono visualizzati ancora errori di fame vocale, ma non si sente alcun problema, assicurarsi di impostare XAUDIO2_BUFFER.Flag per XAUDIO2_END_OF_STREAM sul buffer finale di un suono. Questo indica a XAudio2 di non aspettarsi necessariamente che altri buffer siano disponibili non appena questo è stato completato.
Negli altri casi:
- Ridurre il numero di voci e effetti attivi nel grafico, in particolare effetti costosi come il riverbero.
- Disabilita le voci e gli effetti che non usi.
- Utilizzare i flag XAUDIO2_VOICE_NOSRC e XAUDIO2_VOICE_NOPITCH in IXAudio2::CreateSourceVoice, quando possibile. La conversione della frequenza di campionamento è costosa.
- Ridurre la frequenza di campionamento delle singole voci. Ad esempio, una traccia vocale submix che ospita un effetto di riverbero può avere una frequenza di campionamento inferiore rispetto alla voce di origine che vi invia. Suoni come esplosioni e colpi di pistola che non necessitano di alta fedeltà possono essere registrati anche a frequenze di campionamento più basse.
- Assicurarsi che le implementazioni di callback eseseguono il minor lavoro possibile e non bloccano mai.
- Effettuare meno chiamate a XAudio2. I parametri audio in genere non devono essere aggiornati per ogni fotogramma video. Ogni 30 ms o così via è sufficiente. È consigliabile eliminare le chiamate ridondanti, ad esempio l'impostazione del volume più volte in rapida successione.
- Ridurre l'utilizzo complessivo della CPU del gioco.
Argomenti correlati