Sdílet prostřednictvím


konfigurace mluvčího DSSPEAKER_DIRECTOUT

Poznámka Tyto informace platí pro systém Windows XP a starší operační systémy. Počínaje systémem Windows Vista, IDirectSound::GetSpeakerConfig a IDirectSound::SetSpeakerConfig jsou zastaralé.

Aplikační program může změnit konfiguraci mluvčího DirectSound na režim direct-out voláním IDirectSound::SetSpeakerConfig metoda s parametrem konfigurace mluvčího nastaveným na DSSPEAKER_DIRECTOUT (viz dokumentace k sadě Microsoft Windows SDK). Určuje konfiguraci bez reproduktorů, ve které jsou kanály streamu přehrávání z aplikace výstupem přímo do zvukového adaptéru, aniž by se interpretovaly jako pozice mluvčího. Vstupní datový proud však může být stále upraven převodem vzorkovací frekvence, ztlumení, filtrováním a dalšími typy zpracování, které nevyžadují žádné předpoklady o přiřazení mluvčích ke kanálům.

Jakmile se projeví, nastavení konfigurace mluvčího DSSPEAKER_DIRECTOUT je globální a ovlivňuje zvukové zařízení jako celek. Všechny zvukové aplikace, které se následně spustí, podléhají novému nastavení, dokud DirectSound toto nastavení znovu nezmění.

V režimu přímého výstupu zvukové zařízení vykreslí první kanál na prvním výstupním konektoru zařízení, druhý kanál do druhého výstupu v zařízení atd. To umožňuje aplikaci pro vytváření zvuku vysílat data ve vícekanálovém režimu přímo do zařízení, jako je externí mixér nebo zvukové úložné zařízení (pevný disk, ADAT atd.). Například kanály ve 48kanálovém streamu můžou být přiřazené, jak je znázorněno v následující tabulce.

Obsah čísla kanálu 0

Hlasový

1

Bicí

2

Kytara

3

Basa

...

47

Klavír

U tohoto druhu nezpracovaných zvukových dat jsou pozice mluvčího nesmyslné a přiřazení pozic mluvčího ke vstupním nebo výstupním datovým proudům může způsobit nežádoucí vedlejší účinky. Například komponenta, jako je KMixer, může nevhodně zasahovat použitím efektů specifických pro mluvčího, jako je 3D virtualizace nebo kódování Dolby Surround Pro Logic na stream. Všimněte si, že počet nezpracovaných datových kanálů není omezen počtem bitů v masce kanálu.

Dokonce i zařízení, které není určeno speciálně pro úpravy zvuku, by obvykle mělo přijmout požadavek na nastavení vlastnosti KSPROPERTY_AUDIO_CHANNEL_CONFIG změnit konfiguraci reproduktoru na KSAUDIO_SPEAKER_DIRECTOUT. Obecně platí, že zařízení by se mělo vyhnout selhání požadavku, pokud nemůže nějak ověřit, že jeho výstupy jsou připojené k reproduktorům a nelze je použít externě pro žádný jiný účel (například jako vstupy externího mixéru).

Aplikace, která používá režim direct-out, je obvykle napsaná pro konkrétní hardwarové zařízení. To umožňuje aplikaci předem zjistit, které přímé formáty dat zařízení podporuje, včetně počtu kanálů a způsobu interpretace dat v těchto kanálech. Tyto znalosti jsou nezbytné, protože když aplikace volá IDirectSound::GetSpeakerConfig na zařízení, které je nakonfigurováno v režimu přímého ven, zařízení pouze potvrdí, že je v tomto režimu; neposkytuje žádné další informace týkající se počtu kanálů ve formátech datových proudů, které podporuje v režimu direct-out. (Tyto informace však mohou být získány odesláním požadavku na získání vlastnosti KSPROPERTY_AUDIO_MIX_LEVEL_CAPS na uzel supermixeru na kolíku mixéru zařízení; viz DirectSound Node-Ordering Požadavky.)

Při zadávání formátu vlny pro přímý proud by aplikace měla nastavit dwChannelMask člen WAVEFORMATEXTENSIBLE struktury na hodnotu KSAUDIO_SPEAKER_DIRECTOUT, což je nula. Maska kanálu nula označuje, že nejsou definovány žádné pozice mluvčího. Jako vždy je počet kanálů ve streamu zadaný v Format.nChannels členu.

Dodavatelé hardwaru mají možnost podporovat hardwarovou akceleraci DirectSound, když jsou jejich zařízení nakonfigurovaná v režimu přímého směrování. Aplikace DirectSound může přehrát přímý proud prostřednictvím jednoho z míchacích špendlíků zařízení, pokud je k dispozici. Jakmile jsou všechny dostupné instance hardwarového špendlíku vyčerpány, všechny nové datové proudy místo toho projdou přes KMixer.

Při kombinování datových proudů pro zařízení, které je nakonfigurováno v režimu direct-out, použije KMixer mapování 1:1 mezi kanály vstupních datových proudů z aplikací a kanály mixového streamu, který vypíše do zařízení. To znamená, že pokud aplikace generuje několik přímých datových proudů, které mají stejný počet kanálů, například každý kanál N výstupního mixu je jednoduše součet kanálů N ze všech datových proudů, které zadávají KMixer.

Při kombinování několika přímých proudů, které se liší v počtu kanálů, které obsahují, je mixovací algoritmus KMixeru o něco složitější. V tomto případě je každý kanál N mixu součet kanálů N ze všech vstupních proudů, které mají kanál N. Pokud například KMixer mixuje čtyřúhelníkové a stereo vstupní proudy pro vytvoření čtyřúhelníku, kanály nula a jeden z výstupních mixů jsou součty kanálů nula a jedna, v uvedeném pořadí, vstupní stereo a čtyřúhelníkové proudy. Stereo vstupní stream ale nic přispívá ke kanálům 2 a tři z mixu, které jsou převzaty pouze z posledních dvou kanálů čtyřúhelníku vstupního proudu.

Aplikace, která se pokusí provést některou z následujících akcí, riskuje nepředvídatelné chování:

  • Přehrajte stream, který není ve formátu direct-out prostřednictvím zařízení, které je nakonfigurované v režimu direct-out.

  • Přehrajte přímý datový proud prostřednictvím zařízení, které není nakonfigurované v režimu direct-out.

Když se setkáte s jedním z těchto případů, KMixer se vyhne jednoduše selhání pokusu o otevření datového proudu. Místo toho se pokusí zpracovat zjevnou nekompatibilitu pomocí algoritmu mapování 1:1, který je popsán výše. Uživatel může nebo nemusí být s výsledkem spokojen. Jiné zvukové komponenty nelze očekávat, aby tyto případy zvládly stejným způsobem jako KMixer. Například ovladač pro zařízení, které je nakonfigurované v režimu přímého výstupu, by nemělo selhat pokus o otevření hardwarové vyrovnávací paměti pro výstupní datový proud, který není ve formátu direct-out, a naopak.

Aplikace pro vytváření zvuku může potřebovat nechat uživatele naslouchat datům, která má smíšený do prvních několika kanálů výstupního streamu, ale ignorovat nezpracovaná data, která jsou stále obsažena ve zbývajících kanálech datového proudu. Chování KMixeru to usnadňuje. Pokud například stream přehrávání 24 kanálů obsahuje stereo mix v kanálech 0 a 1 a nezpracovaná data v kanálech 2 až 23, aplikace provede následující:

  • Nakonfiguruje cílové zvukové zařízení (nemusí to nutně být zařízení, které aplikace používá k úpravě datového proudu) ve stereo režimu voláním SetSpeakerConfig s DSSPEAKER_STEREO.

  • Změní dwChannelMask ve struktuře streamu přehrávání WAVEFORMATEXTENSIBLE na KSAUDIO_SPEAKER_STEREO, ale ponechá Format.nChannels nastaven na 24, což je celkový počet kanálů v datovém proudu.

KMixer mixuje pouze stereo kanály streamu přehrávání, které jsou popsány v masce kanálu, a zahodí zbývající 22 kanálů, které obsahují nezpracovaná data. Mějte na paměti, že jakákoli změna nastavení konfigurace mluvčího DirectSound se pravděpodobně projeví, dokud nebude zničen aktuální objekt DirectSound a vytvoří se jiný (viz Použití nastavení Speaker-Configuration).