Sdílet prostřednictvím


Vyjednávání formátů

Jakmile aplikace zahájí zpracování zvuku, tvůrce grafu nakonfiguruje objekty sAPO do zvukového grafu a inicializuje také objekty sAPO. Zvuková služba pak vyjedná s LFX sAPO, aby vytvořila formát zvukových dat na vstupu a výstupu sAPO. Tento proces vyjednávání se označuje jako vyjednávání formátu.

Všechny sAPOs, které poskytují zvukové systémové efekty pro Windows Vista, musí mít určitá rozhraní a metody. Metody používané sAPO a audio enginem k vyjednání formátu dat jsou následující: metoda IsInputFormatSupported rozhraní IAudioProcessingObject a metody LockForProcess a UnlockForProcess rozhraní IAudioProcessingObjectConfiguration.

Pokud chcete zahájit vyjednávání formátu, zvuková služba nejprve nastaví výstup LFX sAPO na výchozí formát float32. Zvuková služba pak zavolá metodu IAudioProcessingObject::IsInputFormatSupported u LFX sAPO, navrhne výchozí formát a monitoruje odpověď HRESULT této metody. Pokud LFX sAPO podporuje navrhovaný formát, vrátí S_OK společně s odkazem na podporovaný formát. Pokud objekt LFX sAPO nemůže navrhovaný formát podporovat, vrátí S_FALSE společně s odkazem na formát, který je nejblíže navrhovanému formátu. Pokud LFX sAPO nemůže podporovat navrhovaný formát a nemá blízkou shodu, vrátí APOERR_FORMAT_NOT_SUPPORTED. GFX sAPO pracuje s výstupním formátem LFX sAPO. Proto není objekt GFX sAPO zapojen do procesu vyjednávání formátu.

Po výběru formátu dat ke zpracování zvukových dat volá tvůrce grafů zpracování zvuku metodu IAudioProcessingObjectConfiguration::LockForProcess metody sAPOs, což způsobí dokončení výběru formátu.

Pokud sAPO systému Windows Vista vrátí chybu pro zabalení vlastní sAPO v reakci na volání metody LockForProcess, musí vlastní sAPO zpracovat chybu stejným způsobem, jako zpracovává chybu z CoCreateInstance, když pokus o vytvoření instance sAPO selže. Podrobnosti o přepsání metody LockForProcess zadané systémem najdete v souboru Spkrfill.cpp.

Vzhledem ke způsobu, jakým zvuková služba funguje, musí být objekty LFX a GFX sAPO schopné nezávisle na sobě reagovat na dotazy ze zvukové služby týkající se formátů dat.

Důležité Při implementaci vlastního sAPO, který obaluje Windows Vista LFX sAPO, nezadávejte příznak APO_FLAG_FRAMESPERSECOND_MUST_MATCH ve vlastnostech registrace vlastního sAPO. Pokud zadáte tento příznak, Windows Vista LFX sAPO nebude moci provádět doplnění zvuku reproduktoru, virtualizaci sluchátek nebo virtuální prostorový zvuk. Navíc váš vlastní sAPO nebude moci míchat žádné zvukové proudy. Váš vlastní sAPO například nebude moct smíchat zvukový stream 5.1 na dvoukanálový stereofonní zvukový stream.