Puoi riutilizzare i buffer con l'input audio di Windows Wave?
-
26-09-2019 - |
Domanda
Sto usando le API di Windows Multimedia per registrare ed elaborare l'audio Wave (waveInOpen
e amici). Vorrei usare un piccolo numero di buffer in modo rotondo.
So che dovresti usare waveInPrepareHeader
Prima di aggiungere un buffer al dispositivo e che dovresti chiamare waveInUnprepareHeader
Dopo che il dispositivo Wave ha "restituito il buffer all'applicazione" e prima di traffarlo.
La mia domanda è: devo non preparare e rielaborare per riutilizzare un buffer? O posso semplicemente aggiungere un buffer precedentemente usato al dispositivo?
Inoltre, importa su quale discussione lo faccio? Sto usando la funzione di callback, che sembra essere chiamata su un thread lavoratore che appartiene al sistema audio. Posso chiamare waveInUnprepareHeader
, waveInPrepareHeader
, e waveInAddBuffer
Su quel thread, durante il callback?
Soluzione
Sì, la mia esperienza è stata che devi chiamare prepararsi e non preparare ogni volta. Dalla memoria, restituisce un errore se si tenta di riutilizzare lo stesso.
E in genere chiami preparate e non si prepara su qualunque thread stai gestendo i callback.
Altri suggerimenti
Quando crei i buffer, chiama waveInPrepareHeader
. Quindi puoi semplicemente impostare il preparato Flag prima di chiamare waveInAddBuffer
su un buffer che è stato restituito dal dispositivo.
pHdr->dwFlags = WHDR_PREPARED;
Puoi farlo sul thread di callback (o nel gestore dei messaggi).