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

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

Interfejs SDL2:

SDL_AudioSpec

SPIS TREŚCI

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

SDL_AudioSpec

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.

Pola 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).

Przykładowy kod

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);

Uwagi

Struktura ta jest używana przez SDL_OpenAudioDevice() i SDL_LoadWAV(). Funkcja SDL_OpenAudioDevice() używa wszystkich pól, natomiast funkcja SDL_LoadWAV() korzysta tylko z pól freq, format, channels i samples.

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
SDL_AudioFormat.line-24"> SDL_AudioFormat.line-25"> SDL_AudioFormat.bottom">

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.

Powiązane funkcje


Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2024 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.