Module audio
dep_sdl3
only.Expand description
Audio functionality for the SDL library.
All audio in SDL3 revolves around SDL_AudioStream
. Whether you want to play
or record audio, convert it, stream it, buffer it, or mix it, you’re going
to be passing it through an audio stream.
Audio streams are quite flexible; they can accept any amount of data at a time, in any supported format, and output it as needed in any other format, even if the data format changes on either side halfway through.
An app opens an audio device and binds any number of audio streams to it, feeding more data to the streams as available. When the device needs more data, it will pull it from all bound streams and mix them together for playback.
Audio streams can also use an app-provided callback to supply data on-demand, which maps pretty closely to the SDL2 audio model.
SDL also provides a simple .WAV loader in SDL_LoadWAV
(and SDL_LoadWAV_IO
if you aren’t reading from a file) as a basic means to load sound data into
your program.
§Logical audio devices
In SDL3, opening a physical device (like a SoundBlaster 16 Pro) gives you a logical device ID that you can bind audio streams to. In almost all cases, logical devices can be used anywhere in the API that a physical device is normally used. However, since each device opening generates a new logical device, different parts of the program (say, a VoIP library, or text-to-speech framework, or maybe some other sort of mixer on top of SDL) can have their own device opens that do not interfere with each other; each logical device will mix its separate audio down to a single buffer, fed to the physical device, behind the scenes. As many logical devices as you like can come and go; SDL will only have to open the physical device at the OS level once, and will manage all the logical devices on top of it internally.
One other benefit of logical devices: if you don’t open a specific physical device, instead opting for the default, SDL can automatically migrate those logical devices to different hardware as circumstances change: a user plugged in headphones? The system default changed? SDL can transparently migrate the logical devices to the correct physical device seamlessly and keep playing; the app doesn’t even have to know it happened if it doesn’t want to.
§Simplified audio
As a simplified model for when a single source of audio is all that’s
needed, an app can use SDL_OpenAudioDeviceStream
, which is a single
function to open an audio device, create an audio stream, bind that stream
to the newly-opened device, and (optionally) provide a callback for
obtaining audio data. When using this function, the primary interface is
the SDL_AudioStream
and the device handle is mostly hidden away; destroying
a stream created through this function will also close the device, stream
bindings cannot be changed, etc. One other quirk of this is that the device
is started in a paused state and must be explicitly resumed; this is
partially to offer a clean migration for SDL2 apps and partially because
the app might have to do more setup before playback begins; in the
non-simplified form, nothing will play until a stream is bound to a device,
so they start unpaused.
§Channel layouts
Audio data passing through SDL is uncompressed PCM data, interleaved. One can provide their own decompression through an MP3, etc, decoder, but SDL does not provide this directly. Each interleaved channel of data is meant to be in a specific order.
Abbreviations:
- FRONT = single mono speaker
- FL = front left speaker
- FR = front right speaker
- FC = front center speaker
- BL = back left speaker
- BR = back right speaker
- SR = surround right speaker
- SL = surround left speaker
- BC = back center speaker
- LFE = low-frequency speaker
These are listed in the order they are laid out in memory, so “FL, FR” means “the front left speaker is laid out in memory first, then the front right, then it repeats for the next audio frame”.
- 1 channel (mono) layout: FRONT
- 2 channels (stereo) layout: FL, FR
- 3 channels (2.1) layout: FL, FR, LFE
- 4 channels (quad) layout: FL, FR, BL, BR
- 5 channels (4.1) layout: FL, FR, LFE, BL, BR
- 6 channels (5.1) layout: FL, FR, FC, LFE, BL, BR (last two can also be SL, SR)
- 7 channels (6.1) layout: FL, FR, FC, LFE, BC, SL, SR
- 8 channels (7.1) layout: FL, FR, FC, LFE, BL, BR, SL, SR
This is the same order as DirectSound expects, but applied to all platforms; SDL will swizzle the channels as necessary if a platform expects something different.
SDL_AudioStream
can also be provided channel maps to change this ordering
to whatever is necessary, in other audio processing scenarios.
Structs§
- SDL_
Audio Format - Audio format.
- SDL_
Audio Spec - Format specifier for audio data.
- SDL_
Audio Stream - The opaque handle that represents an audio stream.
Constants§
- SDL_
AUDIO_ DEVICE_ DEFAULT_ PLAYBACK - A value used to request a default playback audio device.
- SDL_
AUDIO_ DEVICE_ DEFAULT_ RECORDING - A value used to request a default recording audio device.
- SDL_
AUDIO_ F32 - SDL_
AUDIO_ F32BE - As above, but big-endian byte order
- SDL_
AUDIO_ F32LE - 32-bit floating point samples
- SDL_
AUDIO_ MASK_ BIG_ ENDIAN - Mask of bits in an
SDL_AudioFormat
that contain the bigendian flag. - SDL_
AUDIO_ MASK_ BITSIZE - Mask of bits in an
SDL_AudioFormat
that contains the format bit size. - SDL_
AUDIO_ MASK_ FLOAT - Mask of bits in an
SDL_AudioFormat
that contain the floating point flag. - SDL_
AUDIO_ MASK_ SIGNED - Mask of bits in an
SDL_AudioFormat
that contain the signed data flag. - SDL_
AUDIO_ S8 - Signed 8-bit samples
- SDL_
AUDIO_ S16 - SDL_
AUDIO_ S32 - SDL_
AUDIO_ S16BE - As above, but big-endian byte order
- SDL_
AUDIO_ S16LE - Signed 16-bit samples
- SDL_
AUDIO_ S32BE - As above, but big-endian byte order
- SDL_
AUDIO_ S32LE - 32-bit integer samples
- SDL_
AUDIO_ U8 - Unsigned 8-bit samples
- SDL_
AUDIO_ UNKNOWN - Unspecified audio format
Functions§
- SDL_
AUDIO_ BITSIZE - Retrieve the size, in bits, from an
SDL_AudioFormat
. - SDL_
AUDIO_ BYTESIZE - Retrieve the size, in bytes, from an
SDL_AudioFormat
. - SDL_
AUDIO_ FRAMESIZE - Calculate the size of each audio frame (in bytes) from an
SDL_AudioSpec
. - SDL_
AUDIO_ ISBIGENDIAN - Determine if an
SDL_AudioFormat
represents bigendian data. - SDL_
AUDIO_ ISFLOAT - Determine if an
SDL_AudioFormat
represents floating point data. - SDL_
AUDIO_ ISINT - Determine if an
SDL_AudioFormat
represents integer data. - SDL_
AUDIO_ ISLITTLEENDIAN - Determine if an
SDL_AudioFormat
represents littleendian data. - SDL_
AUDIO_ ISSIGNED - Determine if an
SDL_AudioFormat
represents signed data. - SDL_
AUDIO_ ISUNSIGNED - Determine if an
SDL_AudioFormat
represents unsigned data. - SDL_
Audio ⚠Device Paused - Use this function to query if an audio device is paused.
- SDL_
Audio ⚠Stream Device Paused - Use this function to query if an audio device associated with a stream is paused.
- SDL_
Bind ⚠Audio Stream - Bind a single audio stream to an audio device.
- SDL_
Bind ⚠Audio Streams - Bind a list of audio streams to an audio device.
- SDL_
Clear ⚠Audio Stream - Clear any pending data in the stream.
- SDL_
Close ⚠Audio Device - Close a previously-opened audio device.
- SDL_
Convert ⚠Audio Samples - Convert some audio data of one format to another format.
- SDL_
Create ⚠Audio Stream - Create a new audio stream.
- SDL_
DEFINE_ AUDIO_ FORMAT - Define an
SDL_AudioFormat
value. - SDL_
Destroy ⚠Audio Stream - Free an audio stream.
- SDL_
Flush ⚠Audio Stream - Tell the stream that you’re done sending data, and anything being buffered should be converted/resampled and made available immediately.
- SDL_
GetAudio ⚠Device Channel Map - Get the current channel map of an audio device.
- SDL_
GetAudio ⚠Device Format - Get the current audio format of a specific audio device.
- SDL_
GetAudio ⚠Device Gain - Get the gain of an audio device.
- SDL_
GetAudio ⚠Device Name - Get the human-readable name of a specific audio device.
- SDL_
GetAudio ⚠Driver - Use this function to get the name of a built in audio driver.
- SDL_
GetAudio ⚠Format Name - Get the human readable name of an audio format.
- SDL_
GetAudio ⚠Playback Devices - Get a list of currently-connected audio playback devices.
- SDL_
GetAudio ⚠Recording Devices - Get a list of currently-connected audio recording devices.
- SDL_
GetAudio ⚠Stream Available - Get the number of converted/resampled bytes available.
- SDL_
GetAudio ⚠Stream Data - Get converted/resampled data from the stream.
- SDL_
GetAudio ⚠Stream Device - Query an audio stream for its currently-bound device.
- SDL_
GetAudio ⚠Stream Format - Query the current format of an audio stream.
- SDL_
GetAudio ⚠Stream Frequency Ratio - Get the frequency ratio of an audio stream.
- SDL_
GetAudio ⚠Stream Gain - Get the gain of an audio stream.
- SDL_
GetAudio ⚠Stream Input Channel Map - Get the current input channel map of an audio stream.
- SDL_
GetAudio ⚠Stream Output Channel Map - Get the current output channel map of an audio stream.
- SDL_
GetAudio ⚠Stream Properties - Get the properties associated with an audio stream.
- SDL_
GetAudio ⚠Stream Queued - Get the number of bytes currently queued.
- SDL_
GetCurrent ⚠Audio Driver - Get the name of the current audio driver.
- SDL_
GetNum ⚠Audio Drivers - Use this function to get the number of built-in audio drivers.
- SDL_
GetSilence ⚠Value ForFormat - Get the appropriate memset value for silencing an audio format.
- SDL_
IsAudio ⚠Device Physical - Determine if an audio device is physical (instead of logical).
- SDL_
IsAudio ⚠Device Playback - Determine if an audio device is a playback device (instead of recording).
- SDL_
LoadWAV ⚠ - Loads a WAV from a file path.
- SDL_
LoadWAV_ ⚠IO - Load the audio data of a WAVE file into memory.
- SDL_
Lock ⚠Audio Stream - Lock an audio stream for serialized access.
- SDL_
MixAudio ⚠ - Mix audio data in a specified format.
- SDL_
Open ⚠Audio Device - Open a specific audio device.
- SDL_
Open ⚠Audio Device Stream - Convenience function for straightforward audio init for the common case.
- SDL_
Pause ⚠Audio Device - Use this function to pause audio playback on a specified device.
- SDL_
Pause ⚠Audio Stream Device - Use this function to pause audio playback on the audio device associated with an audio stream.
- SDL_
PutAudio ⚠Stream Data - Add data to the stream.
- SDL_
Resume ⚠Audio Device - Use this function to unpause audio playback on a specified device.
- SDL_
Resume ⚠Audio Stream Device - Use this function to unpause audio playback on the audio device associated with an audio stream.
- SDL_
SetAudio ⚠Device Gain - Change the gain of an audio device.
- SDL_
SetAudio ⚠Postmix Callback - Set a callback that fires when data is about to be fed to an audio device.
- SDL_
SetAudio ⚠Stream Format - Change the input and output formats of an audio stream.
- SDL_
SetAudio ⚠Stream Frequency Ratio - Change the frequency ratio of an audio stream.
- SDL_
SetAudio ⚠Stream Gain - Change the gain of an audio stream.
- SDL_
SetAudio ⚠Stream GetCallback - Set a callback that runs when data is requested from an audio stream.
- SDL_
SetAudio ⚠Stream Input Channel Map - Set the current input channel map of an audio stream.
- SDL_
SetAudio ⚠Stream Output Channel Map - Set the current output channel map of an audio stream.
- SDL_
SetAudio ⚠Stream PutCallback - Set a callback that runs when data is added to an audio stream.
- SDL_
Unbind ⚠Audio Stream - Unbind a single audio stream from its audio device.
- SDL_
Unbind ⚠Audio Streams - Unbind a list of audio streams from their audio devices.
- SDL_
Unlock ⚠Audio Stream - Unlock an audio stream for serialized access.
Type Aliases§
- SDL_
Audio DeviceID - SDL Audio Device instance IDs.
- SDL_
Audio Postmix Callback - A callback that fires when data is about to be fed to an audio device.
- SDL_
Audio Stream Callback - A callback that fires when data passes through an
SDL_AudioStream
.