Udostępnij przez


Zastosowanie ustawień konfiguracji głośników

Uwaga Te informacje dotyczą systemu Windows XP i starszych systemów operacyjnych. Począwszy od systemu Windows Vista, IDirectSound::GetSpeakerConfig i IDirectSound::SetSpeakerConfig zostały przestarzałe.

DirectSound śledzi bieżące ustawienie konfiguracji głośnika w rejestrze i stosuje to ustawienie do sprzętu audio za każdym razem, gdy zostanie utworzone nowe urządzenie DirectSound.

Program aplikacyjny może zmienić konfigurację głośników w całym systemie, wywołując metodę IDirectSound::SetSpeakerConfig, która aktualizuje ustawienie konfiguracji głośników w rejestrze. Metoda próbuje również natychmiast zastosować nowe ustawienie do sprzętu, chociaż urządzenia audio zwykle nie mogą zmienić ustawień głośnika, gdy obiekt DirectSound istnieje. Aby uzyskać listę konfiguracji głośników, które definiuje DirectSound dla tej metody, zobacz Tłumaczenie żądań Speaker-Configuration.

Użytkownik może zmienić konfigurację za pomocą okna dialogowego konfiguracji osoby mówiącej na stronie Właściwości multimediów (mmsys.cpl) w Panelu sterowania. Aby zlokalizować okno dialogowe konfiguracji głośnika DirectSound w systemie Windows XP, na przykład wykonaj następujące kroki:

  1. W Panelu sterowania kliknij dwukrotnie ikonę Dźwięki i urządzenia audio .

  2. Na karcie Audio wybierz urządzenie z listy Odtwarzanie dźwięku .

  3. Wybierz przycisk Zaawansowane.

  4. Wybierz kartę Prelegenci .

Na tym etapie powinna zostać wyświetlona etykieta Konfiguracja osoby mówiącej obok listy konfiguracji osoby mówiącej, którą można wybrać.

DirectSound używa żądania typu KSPROPERTY_AUDIO_CHANNEL_CONFIG set-property w celu wysłania informacji o konfiguracji głośników do węzła 3D lub węzła DAC (KSNODETYPE_3D_EFFECTS lub KSNODETYPE_DAC) na grafie filtru audio. W przypadku węzła 3D obiekt docelowy żądania właściwości jest w rzeczywistości pin (obiekt strumienia 3D), który zasila węzeł. W przypadku węzła DAC obiekt docelowy jest obiektem filtru zawierającym węzeł DAC. W obu przypadkach ustawienie konfiguracji głośnika jest globalne i wpływa na urządzenie audio jako całość. Wszystkie aplikacje audio, które następnie są uruchamiane, podlegają nowemu ustawieniu, dopóki directSound nie zmieni ponownie ustawienia.

Należy pamiętać, że tylko wersje DirectSound dostarczane z systemem Windows Me oraz z systemem Windows XP i nowszym wysyłają żądania dotyczące właściwości konfiguracji głośników do węzłów DAC — wcześniejsze wersje DirectSound nie obsługują tej funkcji. Jednak wszystkie wersje directSound wysyłają te żądania do węzłów 3D.

Jeśli program aplikacji utworzył więcej niż jeden węzeł 3D, funkcja DirectSound wysyła żądania konfiguracji głośników tylko do pierwszego utworzonego węzła 3D.

DirectSound wysyła żądania konfiguracji głośników do węzłów 3D i DAC za każdym razem, gdy aplikacja tworzy obiekt DirectSound lub wywołuje metodę IDirectSound::SetSpeakerConfig. Urządzenia audio zwykle nie mogą zmienić konfiguracji głośnika podczas zarządzania aktywnymi strumieniami, a directSound próbuje uniknąć tego ograniczenia, jeśli to możliwe. Na przykład podczas tworzenia obiektu DirectSound, DirectSound wysyła żądania konfiguracji głośników po utworzeniu instancji filtru, ale przed utworzeniem instancji jakichkolwiek pinów na filtru — czyli przed utworzeniem jakichkolwiek strumieni.

To ograniczenie jest trudniejsze do uniknięcia w przypadku wywołania polecenia SetSpeakerConfig. Gdy aplikacja wywołuje SetSpeakerConfig, sterownik adaptera zwykle odrzuca żądanie konfiguracji głośników DirectSound. Dzieje się tak, ponieważ obiekt DirectSound już istnieje, co oznacza, że urządzenie ma już aktywne strumienie do zarządzania.

W takiej sytuacji sterownik adaptera ma dwie opcje obsługi żądania konfiguracji głośników, które nie powiodło się:

  • Sterownik może zapamiętać żądaną konfigurację i zastosować ją, gdy tylko wszystkie jego strumienie zostaną zniszczone.

  • Sterownik może zignorować żądanie i polegać na tym, że DirectSound wyśle kolejne żądanie konfiguracji głośników przy następnym utworzeniu obiektu DirectSound.

Pierwsza opcja zapewnia lepsze środowisko użytkownika, ponieważ jeśli użytkownik wybierze nowe ustawienie za pośrednictwem okna dialogowego konfiguracji osoby mówiącej, zmiana zostanie natychmiast w życie we wszystkich aplikacjach — nie tylko w aplikacjach DirectSound. (Oczywiście jeśli w momencie wybrania nowego ustawienia są uruchomione jakiekolwiek aplikacje audio, zmiana zostanie odroczona do momentu zakończenia działania wszystkich aplikacji audio). Z drugą opcją zmiana nie zostanie jednak w życie, dopóki aplikacja DirectSound nie zostanie uruchomiona. Jeśli na przykład aplikacja korzystająca z interfejsu API waveOut multimediów systemu Windows jest pierwszą aplikacją do uruchomienia po zmianie ustawienia Panelu sterowania, użytkownik może się zastanawiać, dlaczego nowe ustawienie nie ma widocznego efektu.

W odpowiedzi na żądanie konfiguracji głośników wysłane do węzła 3D lub DAC, typowy sterownik adaptera aktualizuje konfigurację głośników w sprzęcie audio tylko wtedy, gdy żadne piny nie są obecnie instancjonowane przez dowolną aplikację audio. Oznacza to, że jeśli na przykład aplikacja waveOut ma co najmniej jedno przypięcie otwarte w czasie, gdy druga aplikacja wywołuje funkcję DirectSoundCreate, sterownik może wymagać odroczenia wszelkich oczekujących zmian w konfiguracji głośnika urządzenia audio do późniejszego czasu.

Jeśli sterownik nie może spełnić żądania zmiany konfiguracji głośników urządzenia, powinien po prostu odrzucić to żądanie. Niepowodzenie żądania konfiguracji głośników podczas tworzenia obiektu DirectSound lub wywołania SetSpeakerConfig nie powoduje niepowodzenia tworzenia obiektu DirectSound ani wywołania SetSpeakerConfig.

W czasie rozruchu sterownik adaptera audio inicjuje konfigurację głośnika sprzętu do domyślnego ustawienia, które jest zwykle stereo. Gdy tylko każda aplikacja utworzy obiekt DirectSound, directsound stosuje ustawienie przechowywane w rejestrze do sprzętu. Program aplikacji musi utworzyć urządzenie DirectSound, aby można było wywołać polecenie SetSpeakerConfig , aby zmienić ustawienie konfiguracji głośnika w rejestrze, ale to ustawienie rejestru zwykle wchodzi w życie na sprzęcie dopiero po wydaniu urządzenia DirectSound i utworzeniu drugiego urządzenia DirectSound.

Natychmiast po zainstalowaniu urządzenia audio lub wystąpieniu błędu konfiguracji głośnika konfiguracja głośnika DirectSound jest domyślnie ustawiona na stereo.