Serwis Edukacyjny Nauczycieli w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy
Wałaszek |
©2025 mgr Jerzy Wałaszek
|
SDL_AudioSpec
SPIS TREŚCI |
Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.
Struktura zawiera wyjściowy format audio. Zawiera również funkcję wywoływaną zwrotnie, która zostanie wywołana, gdy urządzenie audio będzie potrzebowało więcej danych.
int | freq | częstotliwość DSP (próbki na sekundę); zobacz do Uwag. |
SDL_AudioFormat | format | format danych audio; zobacz do Uwag. |
Uint8 | channels | liczba osobnych kanałów dźwiękowych; zobacz do Uwag. |
Uint8 | silence | wartość ciszy dla bufora audio (wyliczana). |
Uint16 | samples | rozmiar bufora audio w samplach (potęga liczby 2); zobacz do Uwag. |
Uint32 | size | rozmiar bufora audio w bajtach (wyliczany). |
SDL_AudioCallback | callback | funkcja wywoływana zwrotnie do wywołania, gdy urządzenie audio potrzebuje więcej danych; zobacz do Uwag. |
void* | userdata | wskaźnik przekazywany do funkcji callback (inaczej ignorowany przez SDL). |
SDL_AudioSpec want, have; SDL_AudioDeviceID dev; SDL_memset(&want, 0, sizeof(want)); // lub SDL_zero(want) want.freq = 48000; want.format = AUDIO_F32; want.channels = 2; want.samples = 4096; want.callback = MyAudioCallback; // tę funkcję napisałeś w innym miejscu. dev = SDL_OpenAudioDevice(NULL, 0, &want, &have, SDL_AUDIO_ALLOW_FORMAT_CHANGE); |
freq określa liczbę ramek sampli wysyłanych do urządzenia dźwiękowego w ciągu jednej sekundy. Typowe wartości to 11025, 22050, 44100 i 48000. Większe wartości tworzą czystszy dźwięk, tak jak wyższe rozdzielczości tworzą czystszą grafikę.
format określa rozmiar i typ każdego sampla i może być jednym z następujących formatów:
SDL_AudioFormat.top"> SDL_AudioFormat.line-1"> SDL_AudioFormat.line-2">wsparcie dla próbek 8-bitowych | |
AUDIO_S8 | próbki 8-bitowe ze znakiem |
AUDIO_U8 | próbki 8-bitowe bez znaku |
wsparcie dla próbek 16-bitowych | |
AUDIO_S16LSB | próbki 16-bitowe ze znakiem w porządku little-endian |
AUDIO_S16MSB | próbki 16-bitowe ze znakiem w porządku big-endian |
AUDIO_S16SYS | próbki 16-bitowe ze znakiem w porządku natywnym systemu |
AUDIO_S16 | AUDIO_S16LSB |
AUDIO_U16LSB | próbki 16-bitowe bez znaku w porządku little-endian |
AUDIO_U16MSB | próbki 16-bitowe bez znaku w porządku big-endian |
AUDIO_U16SYS | próbki 16-bitowe bez znaku w porządku natywnym systemu |
AUDIO_U16 | AUDIO_U16LSB |
wsparcie dla próbek 32-bitowych (nowość dla SDL 2.0) | |
AUDIO_S32LSB | próbki 32-bitowe całkowite w porządku little-endian |
AUDIO_S32MSB | próbki 32-bitowe całkowite w porządku big-endian |
AUDIO_S32SYS | próbki 32-bitowe całkowite w porządku natywnym systemu |
AUDIO_S32 | AUDIO_S32LSB |
wsparcie dla próbek zmiennoprzecinkowych (nowość dla SDL 2.0) | |
AUDIO_F32LSB | próbki 32-bitowe zmiennoprzecinkowe w porządku little-endian |
AUDIO_F32MSB | próbki 32-bitowe zmiennoprzecinkowe w porządku big-endian |
AUDIO_F32SYS | próbki 32-bitowe zmiennoprzecinkowe w porządku natywnym systemu |
AUDIO_F32 | AUDIO_F32LSB |
Zobacz na opis SDL_AudioFormat.
channels określa liczbę kanałów wyjściowych. W SDL 2.0 wspierane wartości to 1 (mono), 2 (stereo), 4 (quadro) i 6 (5.1).
samples określa jednostkę danych audio. Gdy używane z SDL_OpenAudioDevice(), to odnosi się do rozmiaru bufora audio w ramkach sampli. Ramka sampli jest porcją danych audio, których rozmiar określony jest w polu format pomnożonym przez liczbę kanałów. Gdy SDL_AudioSpec jest używane z SDL_LoadWAV() samples jest ustawiane na 4096. Wartość tego pola musi być potęgą liczby 2.
Wartości silence i size są obliczane przez SDL_OpenAudioDevice().
Dane kanałów są przeplatane. Sample stereo są przechowywane w kolejności lewy/prawy. Sample quadro są przechowywane w kolejności przedni-lewy/przedni-prawy/tylny-lewy/tylny-prawy. Sample 5.1 są w kolejności przedni-lewy/przedni-prawy/środkowy/basowy/tylny-lewy/tylny-prawy.
Prototyp funkcji wywoływanej zwrotnie callback jest następujący:
void SDL_AudioCallback(void* userdata, Uint8* stream, int len) |
Parametry mają następujące znaczenia:
userdata | parametr specyficzny dla aplikacji przechowywany w polu userdata struktury SDL_AudioSpec. |
stream | wskaźnik bufora danych audio wypełnianego przez SDL_AudioCallback(). |
len | długość tego bufora w bajtach. |
Gdy nastąpi powrót z funkcji wywoływanej zwrotnie zawartość bufora nie będzie już ważna. Sample stereo są przechowywane w kolejności LPLPLP...
Funkcja wywoływana zwrotnie musi całkowicie zainicjować ten bufor, w SDL 2.0 nie jest on inicjowany przed skorzystaniem z funkcji wywoływanej zwrotnie. Jeśli nie ma nic do zagrania, funkcja wywoływana zwrotnie powinna wypełnić bufor ciszą (z pola silence struktury).
W SDL >= 2.0.4 możesz wybrać unikanie funkcji wywoływanych zwrotnie i zamiast nich używanie SDL_QueueAudio(). Po prostu otwórz swoje urządzenie audio z wartością NULL w polu callback.
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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.