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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top