Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek
Uaktualniono: 31.07.2022

©2025 mgr Jerzy Wałaszek
I LO w Tarnowie

Interfejs SDL2:

SDL_LockAudioDevice

SPIS TREŚCI

Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.

SDL_LockAudioDevice

Użyj tej funkcji, aby zablokować funkcję audio wywoływaną zwrotnie na określonym urządzeniu.

Składnia

void SDL_LockAudioDevice(SDL_AudioDeviceID dev)

Parametry funkcji

dev identyfikator urządzenia do zablokowania.

Przykładowy kod

void MyAudioCallback(void *userdata, Uint8* stream, int len)
{
    printf("The audio callback is running!\n");
    SDL_memset(stream, 0, len);  // tylko cisza.
    printf("The audio callback is done!\n");
}

//  nie blokuj przez 2 sekundy.
extern SDL_AudioDeviceID devid;
SDL_Delay(2000);  // funkcja callback działa przez 2 sekundy.
SDL_LockAudioDevice(devid);
printf("The audio callback can't be running right now!\n");
SDL_Delay(2000);  // funkcja callback nie działa przez 2 sekundy.
printf("Ok, unlocking!\n");
SDL_UnlockAudioDevice(devid);
SDL_Delay(2000);  // funkcja callback działa przez 2 sekundy.

Uwagi

Blokada, którą manipulują te funkcje zabezpiecza funkcję audio wywoływaną zwrotnie i określoną w SDL_OpenAudioDevice(). Pomiędzy wywołaniami SDL_LockAudioDevice()/SDL_UnlockAudioDevice() masz gwarancję, że funkcja wywoływana zwrotnie dla tego urządzenia nie pracuje, nawet, jeśli urządzenie nie jest w stanie pauzy. Gdy urządzenie jest zablokowane, inne urządzenie niezapauzowane mogą wciąż uruchamiać swoje funkcje callback.

Wywoływanie tej funkcji z wnętrza funkcji dźwiękowej callback nie jest konieczne. SDL tworzy tę blokadę przed wywołaniem twojej funkcji, a następnie usuwa ją, gdy funkcja wykona powrót.

Nie powinieneś utrzymywać blokady dłużej niż jest to absolutnie konieczne. Jeśli przetrzymasz ją zbyt długo w odtwarzaniu dźwięku pojawią się przerwy. W przypadku idealnym twoja aplikacja blokuje urządzenie, ustawia kilka zmiennych i odblokowuje ponownie. Nie wykonuj czasochłonnych zadań podczas blokady urządzenia.

Urządzenie dźwiękowe można bezpiecznie blokować wielokrotnie, o ile tyle samo razy zostanie ono odblokowane. Funkcja callback nie zostanie uruchomiona aż urządzenie będzie w ten sposób całkowicie odblokowane. Jeśli twojej aplikacji nie uda się właściwie odblokować urządzenia, to twoja funkcja callback nigdy nie uruchomi się, możesz wtedy słyszeć powtarzające się trzaski dźwiękowe, a SDL_CloseAudioDevice() spowoduje prawdopodobnie zawieszenie się aplikacji.

Wewnętrznie blokada audio jest mutexem; jeśli zablokujesz jednocześnie z dwóch wątków, to zablokujesz nie tylko funkcję dźwiękową callback, lecz również zablokujesz ten drugi wątek.

Powiązane funkcje


do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2025 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.