Sdílet prostřednictvím


Bloky zvukových dat

[Funkce přidružená k této stránce, Waveform Audio, je starší funkce. Byla nahrazena WASAPI a audio graphs. WASAPI a zvukové grafy byly optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal WASAPI a Audio Graphs místo Waveform Audio, pokud je to možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]

Funkce waveInAddBuffer a waveOutWrite vyžadují, aby aplikace přidělily datové bloky, které se mají předat ovladačům zařízení pro účely nahrávání nebo přehrávání. Obě tyto funkce používají strukturu WAVEHDR k popisu datového bloku.

Než použijete některou z těchto funkcí k předání datového bloku ovladači zařízení, musíte přidělit paměť pro datový blok a strukturu hlaviček, která popisuje datový blok. Hlavičky je možné připravit a nepřipraveny pomocí následujících funkcí.

Funkce Popis
waveInPrepareHeader Připraví blok dat s vlnovým vstupem a zvukem.
waveInUnprepareHeader Vyčistí přípravu na datový blok vstupu waveform-audio.
waveOutPrepareHeader Připraví výstupní datový blok waveform-audio.
waveOutUnprepareHeader Vyčistí přípravu na výstupní datový blok waveform-audio.

 

Před předáním zvukového bloku dat ovladači zařízení je nutné připravit datový blok předáním do waveInPrepareHeader nebo waveOutPrepareHeader. Jakmile se ovladač zařízení dokončí s datovým blokem a vrátí ho, musíte tuto přípravu vyčistit předáním datového bloku do waveInUnprepareHeader nebo waveOutUnprepareHeader předtím, než bude možné uvolnit přidělenou paměť.

Pokud není vstup a výstupní data waveform-audio dostatečně malá, aby byla obsažena v jednom datovém bloku, musí aplikace nepřetržitě dodat ovladač zařízení datovými bloky, dokud nebude přehrávání nebo záznam dokončeno.

I když se použije jeden datový blok, musí být aplikace schopná určit, kdy se ovladač zařízení dokončí s datovým blokem, aby aplikace mohla uvolnit paměť přidruženou k datovému bloku a struktuře hlaviček. Existuje několik způsobů, jak určit, kdy se ovladač zařízení dokončí s datovým blokem:

  • Zadáním funkce zpětného volání pro příjem zprávy odesílané ovladačem po dokončení s datovým blokem
  • Pomocí zpětného volání události
  • Zadáním okna nebo vlákna pro příjem zprávy odeslané ovladačem po dokončení datového bloku
  • Dotazováním WHDR_DONE bitu v dwFlags člen struktury WAVEHDR odesílané s každým datovým blokem

Pokud aplikace v případě potřeby nezíská datový blok ovladače zařízení, může při přehrávání dojít ke zvukové mezerě nebo ztrátě příchozích zaznamenaných informací. To vyžaduje alespoň schéma dvojité vyrovnávací paměti – zůstat alespoň jeden datový blok před ovladačem zařízení.

Následující témata popisují způsoby, jak určit, kdy je ovladač zařízení dokončen s datovým blokem:

Použití funkce zpětného volání ke zpracování zpráv ovladače