Zařízení a datové typy
[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é.]
Tato část popisuje práci se zvukovými zařízeními waveform-audio a obsahuje informace o tom, jak je otevřít, zavřít a dotazovat na jejich možnosti. Popisuje také, jak sledovat zařízení v systému pomocí popisovačů zařízení a identifikátorů zařízení.
Otevření Waveform-Audio výstupních zařízení
Pomocí funkce waveOutOpen otevřete výstupní zařízení waveform-audio pro přehrávání. Tato funkce otevře zařízení přidružené k zadanému identifikátoru zařízení a vrátí popisovač otevřeného zařízení zápisem popisovače zadaného umístění paměti.
Některé multimediální počítače mají několik výstupních zařízení waveform-audio. Pokud nechcete v systému otevřít konkrétní výstupní zařízení waveform-audio, měli byste při otevření zařízení použít příznak WAVE_MAPPER pro identifikátor zařízení. Funkce waveOutOpen zvolí zařízení v systému, které nejlépe dokáže přehrát zadaný formát dat.
Dotazování zvukových zařízení
Systém Windows poskytuje následující funkce, které určují, kolik zařízení určitého typu je v systému k dispozici.
Funkce | Popis |
---|---|
auxGetNumDevs | Načte počet pomocných výstupních zařízení v systému. |
waveInGetNumDevs | Načte počet vstupních zařízení waveform-audio v systému. |
waveOutGetNumDevs | Načte počet výstupních zařízení waveform-audio v systému. |
Zvuková zařízení jsou identifikována identifikátorem zařízení. Identifikátor zařízení se určuje implicitně z počtu zařízení v systému. Identifikátory zařízení jsou od nuly do jedné menší než počet zařízení, která jsou k dispozici. Pokud jsou například v systému dvě výstupní zařízení waveform-audio, platné identifikátory zařízení jsou 0 a 1.
Jakmile určíte, kolik zařízení určitého typu je v systému, můžete pomocí jedné z následujících funkcí dotazovat možnosti jednotlivých zařízení.
Funkce | Popis |
---|---|
auxGetDevCaps | Načte možnosti zadaného pomocného výstupního zařízení. |
waveInGetDevCaps | Načte možnosti zadaného vstupního zařízení waveform-audio. |
waveOutGetDevCaps | Načte možnosti zadaného výstupního zařízení waveform-audio. |
Každá z těchto funkcí vyplní strukturu informacemi o možnostech zadaného zařízení. Následující tabulka uvádí struktury, které odpovídají jednotlivým těmto funkcím.
Funkce | Struktura |
---|---|
auxGetDevCaps | AUXCAPS |
waveInGetDevCaps | WAVEINCAPS |
waveOutGetDevCaps | WAVEOUTCAPS |
Standardní formáty jsou uvedeny ve dwFormats člen struktury WAVEOUTCAPS. Zvuková zařízení waveform-audio můžou podporovat nestandardní formáty. Pokud chcete zjistit, jestli zařízení podporuje určitý formát (standardní nebo nestandardní), můžete volat funkci waveOutOpen příznakem WAVE_FORMAT_QUERY. Tento příznak neotevře zařízení. Formát zadáte v WAVEFORMATEX struktury, na kterou odkazuje parametr pwfx předaný waveOutOpen.
Výstupní zařízení waveform-audio se liší v možnostech, které podporují. dwSupport člen struktury WAVEOUTCAPS označuje, jestli zařízení podporuje takové funkce, jako jsou změny hlasitosti a výšky.
Popisovače zařízení a identifikátory zařízení
Každá funkce, která otevře zvukové zařízení, určuje identifikátor zařízení, ukazatel na umístění paměti a některé parametry, které jsou pro každý typ zařízení jedinečné. Umístění paměti je vyplněno popisovačem zařízení. Tento popisovač zařízení slouží k identifikaci otevřeného zvukového zařízení při volání jiných zvukových funkcí.
Rozdíl mezi identifikátory a úchyty pro zvuková zařízení je malý, ale důležitý:
- Identifikátory zařízení se určují implicitně z počtu zařízení v systému. Toto číslo se získá pomocí funkce auxGetNumDevs, waveInGetNumDevsnebo waveOutGetNumDevs.
- Popisovače zařízení se vrátí při otevření ovladačů zařízení pomocí funkce waveInOpen nebo waveOutOpen.
Neexistují žádné funkce, které by otevíraly nebo zavíraly pomocné zvukové zařízení. Pomocné zvukové zařízení nemusí být otevřená a uzavřená, jako jsou zařízení waveform-audio, protože k nim není přidružený průběžný přenos dat. Všechny pomocné zvukové funkce používají identifikátory zařízení k identifikaci zařízení.
Waveform-Audio výstupních datových typů
Následující datové typy jsou definovány pro výstupní funkce waveform-audio.
Typ | Popis |
---|---|
HWAVEOUT | Popisovač otevřeného výstupního zařízení waveform-audio |
WAVEFORMATEX | Struktura, která určuje formáty dat podporované konkrétním vstupním zařízením waveform-audio. Tato struktura se také používá pro vstupní zařízení waveform-audio. |
WAVEHDR | Struktura používaná jako záhlaví pro blok vstupních dat waveform-audio. Tato struktura se také používá pro vstupní zařízení waveform-audio. |
WAVEOUTCAPS | Struktura používaná k dotazování schopností konkrétního výstupního zařízení waveform-audio |
Určení datových formátů Waveform-Audio
Když zavoláte funkci waveOutOpen, která otevře ovladač zařízení pro přehrávání nebo dotazuje, jestli ovladač podporuje určitý formát dat, použijte parametr pwfx k určení ukazatele na WAVEFORMATEX strukturu obsahující požadovaný formát dat waveform-audio. FUNKCE WAVEFORMATEX nahrazuje strukturyWAVEFORMAT a PCMWAVEFORM AT.
Pro zvuková data, která jsou oddělena do více než dvou kanálů nebo mají velikost vzorku, která není násobkem 8, byste měli použít WAVEFORMATEXTENSIBLE. Tato struktura jednoduše nakonfiguruje nadbytečné bajty, na které odkazuje cbSize člen WAVEFORMATEX poskytnout další informace o formátu. WAVEFORMATEXTENSIBLE lze přetypovat jako WAVEFORMATEX.
Existují také dva formáty schránky, které můžete použít k reprezentaci zvukových dat: CF_WAVE a CF_RIFF. Formát CF_WAVE slouží k reprezentaci dat v jednom ze standardních formátů, například 11 kHz nebo 22 kHz PCM. Formát CF_RIFF slouží k reprezentaci složitějších datových formátů, které nelze reprezentovat jako standardní soubory waveform-audio.
Zápis dat Waveform-Audio
Po úspěšném otevření ovladače výstupního zařízení waveform-audio můžete začít přehrávat zvuk. Windows poskytuje funkci waveOutWrite pro odesílání datových bloků do výstupních zařízení waveform-audio.
Pomocí struktury WAVEHDR určete datový blok waveform-audio, který odesíláte pomocí waveOutWrite. Tato struktura obsahuje ukazatel na uzamčený datový blok, délku datového bloku a některé příznaky. Tento datový blok musí být připravený, než ho použijete; informace o přípravě datového bloku naleznete v tématu zvukové datové bloky.
Po odeslání datového bloku do výstupního zařízení pomocí waveOutWritemusíte počkat, dokud ovladač zařízení nedokončí s datovým blokem, než ho uvolní. Pokud odesíláte více datových bloků, je nutné monitorovat dokončení datových bloků, abyste věděli, kdy se mají odesílat další bloky. Další informace o datových blocích naleznete v tématu Audio Data Blocks.
Formát dat Waveform-Audio PCM
lpData člen struktury WAVEHDR odkazuje na vzorky dat waveform-audio. Pro 8bitová data PCM jsou jednotlivé vzorky reprezentovány jedním bajtem nepodepsaných dat. U 16bitových dat PCM je každý vzorek reprezentován 16bitovou signed hodnotou. Následující tabulka shrnuje maximální, minimální a střední hodnoty pro data pcM waveform-audio.
Formát dat | Maximální hodnota | Minimální hodnota | Střední hodnota |
---|---|---|---|
8bitový počítač PCM | 255 (0xFF) | 0 | 128 (0x80) |
16bitový počítač PCM | 32 767 (0x7FFF) | –32 768 (0x8000) | 0 |
Balení dat PCM
Pořadí bajtů dat se liší mezi 8bitovými a 16bitovými formáty a mezi monofonními a stereo formáty. Následující seznam popisuje balení dat pro různé formáty dat PCM waveform-audio.
Formát waveform-audio PCM | Popis |
---|---|
8bitová mono | Každá ukázka je 1 bajt, který odpovídá jednomu zvukovému kanálu. Za ukázkou 1 následují vzorky 2, 3, 4 atd. |
8bitová stereo | Každý vzorek je 2 bajty. Za ukázkou 1 následují vzorky 2, 3, 4 atd. Pro každou ukázku je první bajt kanál 0 (levý kanál) a druhý bajt je kanál 1 (pravý kanál). |
16bitový mono | Každý vzorek je 2 bajty. Za ukázkou 1 následují vzorky 2, 3, 4 atd. Pro každý vzorek je první bajt nízkého pořadí bajtů kanálu 0 a druhý bajt je bajt s vysokým pořadím kanálu 0. |
16bitová stereo | Každý vzorek je 4 bajty. Za ukázkou 1 následují vzorky 2, 3, 4 atd. U každého vzorku je první bajt nízkého pořadí bajtů kanálu 0 (levý kanál); druhý bajt je bajt ve vysokém pořadí kanálu 0; třetí bajt je bajt nízkého pořadí kanálu 1 (pravý kanál); a čtvrtý bajt je bajt ve vysokém pořadí kanálu 1. |
Jiní | Každý vzorek je obsažen v bloku, který je násobkem 4 bajtů, ale vzorky mohou být nezarovnané. Uspořádání kanálů je určeno maskou. Další informace naleznete v tématu WAVEFORMATEXTENSIBLE. |
Zavření výstupních zařízení Waveform-Audio
Po dokončení přehrávání zvuku waveform-audio zavolejte waveOutClose zavřít výstupní zařízení. Pokud se při přehrávání zvukového souboru waveform-audio volá waveOutClose, operace zavření selže a funkce vrátí kód chyby označující, že zařízení nebylo zavřené. Pokud nechcete čekat na dokončení přehrávání před zavřením zařízení, před zavřením zařízení zavolejte funkci waveOutReset. Přehrávání se ukončí a umožní zavření zařízení. Před zavřením zařízení nezapomeňte použít funkci waveOutUnprepareHeader k vyčištění přípravy na všech datových blocích.