4#include "SDL3pp_audio.h"
5#include "SDL3pp_version.h"
7#ifdef SDL3PP_ENABLE_MIXER
9#include <SDL3_mixer/SDL_mixer.h>
589 bool closeio =
false);
667 bool free_when_done);
1250 using MixerBase::MixerBase;
1266 :
Mixer(other.release())
1454 : m_lock(std::move(other.m_lock))
1485 std::swap(m_lock, other.m_lock);
1490 constexpr operator bool()
const {
return bool(m_lock); }
1708 using AudioBase::AudioBase;
1724 :
Audio(other.release())
1907 bool closeio =
false);
2347 bool closeio =
false);
3373 using TrackBase::TrackBase;
3389 :
Track(other.release())
3606 using GroupBase::GroupBase;
3622 :
Group(other.release())
3678#define SDL_MIXER_MAJOR_VERSION
3687#define SDL_MIXER_MINOR_VERSION
3696#define SDL_MIXER_MICRO_VERSION
3705#define SDL_MIXER_VERSION \
3707 SDL_MIXER_MAJOR_VERSION, SDL_MIXER_MINOR_VERSION, SDL_MIXER_MICRO_VERSION)
3714#define SDL_MIXER_VERSION_ATLEAST(X, Y, Z) \
3715 ((SDL_MIXER_MAJOR_VERSION >= X) && \
3716 (SDL_MIXER_MAJOR_VERSION > X || SDL_MIXER_MINOR_VERSION >= Y) && \
3717 (SDL_MIXER_MAJOR_VERSION > X || SDL_MIXER_MINOR_VERSION > Y || \
3718 SDL_MIXER_MICRO_VERSION >= Z))
3740inline int Version() {
return MIX_Version(); }
3760inline void Init() {
CheckError(MIX_Init()); }
3796inline void Quit() { MIX_Quit(); }
3853 return MIX_GetAudioDecoder(index);
3904 return Mixer(devid, spec);
3992 return CheckError(MIX_GetMixerProperties(mixer));
4128 std::move(lock).reset();
4133 if (!m_lock)
return;
4197 bool closeio =
false)
4199 return Audio(mixer, io, predecode, closeio);
4206 return Audio(
get(), io, predecode, closeio);
4213 :
Audio(MIX_LoadAudio_IO(mixer, io, predecode, closeio))
4218 :
Audio(MIX_LoadAudio(mixer, path, predecode))
4237 MIX_LoadRawAudio(mixer, data.data(), data.size_bytes(), &spec)))
4271 return Audio(mixer, path, predecode);
4276 return Audio(
get(), path, predecode);
4337 bool free_when_done)
4400 return Audio(props);
4411 MIX_PROP_AUDIO_LOAD_IOSTREAM_POINTER;
4414 MIX_PROP_AUDIO_LOAD_CLOSEIO_BOOLEAN;
4417 MIX_PROP_AUDIO_LOAD_PREDECODE_BOOLEAN;
4420 MIX_PROP_AUDIO_LOAD_PREFERRED_MIXER_POINTER;
4424 MIX_PROP_AUDIO_LOAD_SKIP_METADATA_TAGS_BOOLEAN;
4427#if SDL_MIXER_VERSION_ATLEAST(3, 2, 4)
4430 MIX_PROP_AUDIO_LOAD_IGNORE_LOOPS_BOOLEAN;
4435 MIX_PROP_AUDIO_DECODER_STRING;
4476 bool closeio =
false)
4478 return Audio(mixer, io, spec, closeio);
4485 return Audio(
get(), io, spec, closeio);
4526 return Audio(mixer, std::move(data), spec);
4531 return Audio(
get(), std::move(data), spec);
4577 bool free_when_done)
4585 bool free_when_done)
4631 return Audio(
CheckError(MIX_CreateSineWaveAudio(mixer, hz, amplitude, ms)));
4686 return CheckError(MIX_GetAudioProperties(audio));
4702 MIX_PROP_METADATA_TITLE_STRING;
4705 MIX_PROP_METADATA_ARTIST_STRING;
4708 MIX_PROP_METADATA_ALBUM_STRING;
4711 MIX_PROP_METADATA_COPYRIGHT_STRING;
4714 MIX_PROP_METADATA_TRACK_NUMBER;
4717 MIX_PROP_METADATA_TOTAL_TRACKS_NUMBER;
4720 MIX_PROP_METADATA_YEAR_NUMBER;
4723 MIX_PROP_METADATA_DURATION_FRAMES_NUMBER;
4726 MIX_PROP_METADATA_DURATION_INFINITE_BOOLEAN;
4764 return MIX_GetAudioDuration(audio);
4900 return CheckError(MIX_GetTrackProperties(track));
5011 CheckError(MIX_SetTrackAudioStream(track, stream));
5068 bool closeio =
false)
5070 CheckError(MIX_SetTrackIOStream(track, io, closeio));
5129 bool closeio =
false)
5131 CheckError(MIX_SetTrackRawIOStream(track, io, &spec, closeio));
5200 MIX_UntagTrack(track, tag);
5221 auto result =
CheckError(MIX_GetTrackTags(track, &count));
5244 auto result =
CheckError(MIX_GetTaggedTracks(mixer, tag, &count));
5290 CheckError(MIX_SetTrackPlaybackPosition(track, frames));
5323 return MIX_GetTrackPlaybackPosition(track);
5355 return MIX_GetTrackFadeFrames(track);
5423 CheckError(MIX_SetTrackLoops(track, num_loops));
5453 return MIX_GetTrackAudio(track);
5481 return MIX_GetTrackAudioStream(track);
5516 return MIX_GetTrackRemaining(track);
5548 return MIX_TrackMSToFrames(track, ms.count());
5583 return Milliseconds(MIX_TrackFramesToMS(track, frames));
5612 return MIX_AudioMSToFrames(audio, ms.count());
5644 return Milliseconds(MIX_AudioFramesToMS(audio, frames));
5670 return MIX_MSToFrames(sample_rate, ms.count());
5696 return Milliseconds(MIX_FramesToMS(sample_rate, frames));
5835 MIX_PROP_PLAY_MAX_FRAME_NUMBER;
5838 MIX_PROP_PLAY_MAX_MILLISECONDS_NUMBER;
5841 MIX_PROP_PLAY_START_FRAME_NUMBER;
5844 MIX_PROP_PLAY_START_MILLISECOND_NUMBER;
5846#if SDL_MIXER_VERSION_ATLEAST(3, 2, 2)
5849 MIX_PROP_PLAY_START_ORDER_NUMBER;
5854 MIX_PROP_PLAY_LOOP_START_FRAME_NUMBER;
5857 MIX_PROP_PLAY_LOOP_START_MILLISECOND_NUMBER;
5861 MIX_PROP_PLAY_FADE_IN_FRAMES_NUMBER;
5864 MIX_PROP_PLAY_FADE_IN_MILLISECONDS_NUMBER;
5868 MIX_PROP_PLAY_FADE_IN_START_GAIN_FLOAT;
5871 MIX_PROP_PLAY_APPEND_SILENCE_FRAMES_NUMBER;
5875 MIX_PROP_PLAY_APPEND_SILENCE_MILLISECONDS_NUMBER;
5879 MIX_PROP_PLAY_HALT_WHEN_EXHAUSTED_BOOLEAN;
5919 CheckError(MIX_PlayTag(mixer, tag, options));
5959 return MIX_PlayAudio(mixer, audio);
6001 return MIX_StopTrack(track, fade_out_frames);
6043 CheckError(MIX_StopAllTracks(mixer, fade_out_ms));
6084 CheckError(MIX_StopTag(mixer, tag, fade_out_ms));
6460 CheckError(MIX_SetTagGain(mixer, tag, gain));
6497 CheckError(MIX_SetMixerFrequencyRatio(mixer, ratio));
6523 return MIX_GetMixerFrequencyRatio(mixer);
6556 CheckError(MIX_SetTrackFrequencyRatio(track, ratio));
6591 return MIX_GetTrackFrequencyRatio(track);
6637 MIX_SetTrackOutputChannelMap(track, chmap.data(),
narrowS32(chmap.size())));
6677 CheckError(MIX_SetTrackStereo(track, &gains));
6729 CheckError(MIX_SetTrack3DPosition(track, &position));
6756 CheckError(MIX_GetTrack3DPosition(track, &position));
6840 return CheckError(MIX_GetGroupProperties(group));
6934 CheckError(MIX_SetTrackStoppedCallback(track, cb, userdata));
7013 CheckError(MIX_SetTrackRawCallback(track, cb, userdata));
7094 CheckError(MIX_SetTrackCookedCallback(track, cb, userdata));
7171 CheckError(MIX_SetGroupPostMixCallback(group, cb, userdata));
7234 CheckError(MIX_SetPostMixCallback(mixer, cb, userdata));
7436 using AudioDecoderBase::AudioDecoderBase;
7528 bool closeio =
false,
7589 :
AudioDecoder(MIX_CreateAudioDecoder_IO(io, closeio, props))
7630 bool closeio =
false,
7649 MIX_DestroyAudioDecoder(audiodecoder);
7679 return CheckError(MIX_GetAudioDecoderProperties(audiodecoder));
7705 CheckError(MIX_GetAudioDecoderFormat(audiodecoder, spec));
Lock a mixer by obtaining its internal mutex.
Definition SDL3pp_mixer.h:1400
MixerRef resource() const
Get the reference to locked resource.
Definition SDL3pp_mixer.h:1515
MixerLock(MixerLock &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:1453
void release()
Releases the lock without unlocking.
Definition SDL3pp_mixer.h:1518
~MixerLock()
Unlock a mixer previously locked by a call to LockMixer().
Definition SDL3pp_mixer.h:1478
MixerLock(const MixerLock &other)=delete
Copy constructor.
MixerLock & operator=(MixerLock &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:1483
Optional-like shim for references.
Definition SDL3pp_optionalRef.h:20
Base class for SDL memory allocated array wrap.
Definition SDL3pp_ownPtr.h:44
constexpr RawPointer release() noexcept
Definition SDL3pp_resource.h:57
friend constexpr void swap(ResourceBaseT &lhs, ResourceBaseT &rhs) noexcept
Definition SDL3pp_resource.h:65
constexpr RawPointer get() const noexcept
Definition SDL3pp_resource.h:54
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
Source byte stream.
Definition SDL3pp_strings.h:246
constexpr size_t size_bytes() const
Retrieves contained size in bytes.
Definition SDL3pp_strings.h:310
constexpr const char * data() const
Retrieves contained data.
Definition SDL3pp_strings.h:313
Helpers to use C++ strings parameters.
Definition SDL3pp_strings.h:58
Target byte stream.
Definition SDL3pp_strings.h:332
constexpr char * data() const
Retrieves contained data.
Definition SDL3pp_strings.h:418
constexpr size_t size_bytes() const
Retrieves contained size in bytes.
Definition SDL3pp_strings.h:415
#define SDL_assert_paranoid(condition)
An assertion test that is performed only when built with paranoid settings.
Definition SDL3pp_assert.h:383
SDL_AudioSpec AudioSpec
Format specifier for audio data.
Definition SDL3pp_audio.h:201
ResourceRefT< AudioStreamBase > AudioStreamRef
Reference for AudioStream.
Definition SDL3pp_audio.h:152
ResourceRefT< AudioDeviceBase > AudioDeviceRef
Reference for AudioDevice.
Definition SDL3pp_audio.h:136
constexpr void CheckError(bool result)
Check and throw if returned value from SDL is an error.
Definition SDL3pp_error.h:199
ResourceRefT< IOStreamBase > IOStreamRef
Reference for IOStream.
Definition SDL3pp_iostream.h:37
void Quit()
Clean up all initialized subsystems.
Definition SDL3pp_init.h:329
ResourceRefT< PropertiesBase > PropertiesRef
Reference for Properties.
Definition SDL3pp_properties.h:55
void(SDLCALL *)(void *userdata, TrackRaw track) TrackStoppedCallback
A callback that fires when a Track is stopped.
Definition SDL3pp_mixer.h:2007
MakeFrontCallback< void(TrackRaw track)> TrackStoppedCB
A callback that fires when a Track is stopped.
Definition SDL3pp_mixer.h:2031
Audio LoadRawAudio(MixerRef mixer, SourceBytes data, const AudioSpec &spec)
Load raw PCM data from a memory buffer.
Definition SDL3pp_mixer.h:4522
void SetTrackStereo(TrackRef track, const StereoGains &gains)
Force a track to stereo output, with optionally left/right panning.
Definition SDL3pp_mixer.h:6675
void SetTrackIOStream(TrackRef track, IOStreamRef io, bool closeio=false)
Set a Track's input to an IOStream.
Definition SDL3pp_mixer.h:5066
Audio LoadAudioWithProperties(PropertiesRef props)
Load audio for playback through a collection of properties.
Definition SDL3pp_mixer.h:4398
void Destroy()
Destroy the specified audio.
Definition SDL3pp_mixer.h:4823
void SetTrackCookedCallback(TrackRef track, TrackMixCallback cb, void *userdata)
Set a callback that fires when the mixer has transformed a track's audio.
Definition SDL3pp_mixer.h:7090
AudioStreamRef GetAudioStream()
Query the AudioStream assigned to a track.
Definition SDL3pp_mixer.h:5484
bool Paused()
Query if a track is currently paused.
Definition SDL3pp_mixer.h:6318
PropertiesRef GetAudioDecoderProperties(AudioDecoderRef audiodecoder)
Get the properties associated with a AudioDecoder.
Definition SDL3pp_mixer.h:7677
Audio LoadRawAudioNoCopy(SourceBytes data, const AudioSpec &spec, bool free_when_done)
Load raw PCM data from a memory buffer without making a copy.
Definition SDL3pp_mixer.h:4583
float GetTrackFrequencyRatio(TrackRef track)
Query the frequency ratio of a track.
Definition SDL3pp_mixer.h:6589
void GetMixerFormat(MixerRef mixer, AudioSpec *spec)
Get the audio format a mixer is generating.
Definition SDL3pp_mixer.h:4038
MakeFrontCallback< void(GroupRaw group, const AudioSpec *spec, float *pcm, int samples)> GroupMixCB
A callback that fires when a Group has completed mixing.
Definition SDL3pp_mixer.h:3501
void SetTagGain(StringParam tag, float gain)
Set the gain control of all tracks with a specific tag.
Definition SDL3pp_mixer.h:6463
void PauseTag(StringParam tag)
Pause all tracks with a specific tag.
Definition SDL3pp_mixer.h:6176
MIX_Group * GroupRaw
Alias to raw representation for Group.
Definition SDL3pp_mixer.h:163
void SetGain(float gain)
Set a mixer's master gain control.
Definition SDL3pp_mixer.h:6350
void SetTagGain(MixerRef mixer, StringParam tag, float gain)
Set the gain control of all tracks with a specific tag.
Definition SDL3pp_mixer.h:6458
void SetTrackPlaybackPosition(TrackRef track, Sint64 frames)
Seek a playing track to a new position in its input.
Definition SDL3pp_mixer.h:5288
void UntagTrack(TrackRef track, StringParam tag)
Remove an arbitrary tag from a track.
Definition SDL3pp_mixer.h:5198
void(SDLCALL *)(void *userdata, TrackRaw track, const AudioSpec *spec, float *pcm, int samples) TrackMixCallback
A callback that fires when a Track is mixing at various stages.
Definition SDL3pp_mixer.h:2069
void ResumeAllTracks()
Resume all currently-paused tracks.
Definition SDL3pp_mixer.h:6229
PropertiesRef GetProperties()
Get the properties associated with a group.
Definition SDL3pp_mixer.h:6843
PropertiesRef GetProperties()
Get the properties associated with a AudioDecoder.
Definition SDL3pp_mixer.h:7682
AudioRef GetAudio()
Query the Audio assigned to a track.
Definition SDL3pp_mixer.h:5456
Milliseconds FramesToMS(int sample_rate, Sint64 frames)
Convert sample frames, at a specific sample rate, to milliseconds.
Definition SDL3pp_mixer.h:5694
void PauseTag(MixerRef mixer, StringParam tag)
Pause all tracks with a specific tag.
Definition SDL3pp_mixer.h:6171
PropertiesRef GetProperties()
Get the properties associated with a Audio.
Definition SDL3pp_mixer.h:4689
void PlayTrack(TrackRef track, PropertiesRef options=nullptr)
Start (or restart) mixing a track for playback.
Definition SDL3pp_mixer.h:5815
void Destroy()
Destroy the specified audio decoder.
Definition SDL3pp_mixer.h:7652
Sint64 TrackMSToFrames(TrackRef track, Milliseconds ms)
Convert milliseconds to sample frames for a track's current format.
Definition SDL3pp_mixer.h:5546
OwnArray< char * > GetTrackTags(TrackRef track)
Get the tags currently associated with a track.
Definition SDL3pp_mixer.h:5218
Sint64 MSToFrames(Milliseconds ms)
Convert milliseconds to sample frames for a track's current format.
Definition SDL3pp_mixer.h:5551
void Destroy()
Destroy the specified track.
Definition SDL3pp_mixer.h:4879
void ResumeTag(MixerRef mixer, StringParam tag)
Resume all tracks with a specific tag.
Definition SDL3pp_mixer.h:6256
Audio CreateSineWaveAudio(MixerRef mixer, int hz, float amplitude, Sint64 ms)
Create a Audio that generates a sinewave.
Definition SDL3pp_mixer.h:4626
void Unlock(MixerLock &&lock)
Unlock a mixer previously locked by a call to LockMixer().
Definition SDL3pp_mixer.h:4125
void SetTrackStoppedCallback(TrackRef track, TrackStoppedCallback cb, void *userdata)
Set a callback that fires when a Track is stopped.
Definition SDL3pp_mixer.h:6930
PropertiesRef GetProperties()
Get the properties associated with a track.
Definition SDL3pp_mixer.h:4903
const char * GetAudioDecoder(int index)
Report the name of a specific audio decoders.
Definition SDL3pp_mixer.h:3851
void GetAudioDecoderFormat(AudioDecoderRef audiodecoder, AudioSpec *spec)
Query the initial audio format of a AudioDecoder.
Definition SDL3pp_mixer.h:7703
bool PlayAudio(AudioRef audio)
Play a Audio from start to finish without any management.
Definition SDL3pp_mixer.h:5962
ResourceRefT< GroupBase > GroupRef
Reference for Group.
Definition SDL3pp_mixer.h:170
int Generate(TargetBytes buffer)
Generate mixer output when not driving an audio device.
Definition SDL3pp_mixer.h:7330
bool Resume()
Resume a currently-paused track.
Definition SDL3pp_mixer.h:6202
void SetRawIOStream(IOStreamRef io, const AudioSpec &spec, bool closeio=false)
Set a Track's input to an IOStream providing raw PCM data.
Definition SDL3pp_mixer.h:5134
void DestroyAudioDecoder(AudioDecoderRaw audiodecoder)
Destroy the specified audio decoder.
Definition SDL3pp_mixer.h:7647
void UnlockMixer(MixerRef mixer)
Unlock a mixer previously locked by a call to LockMixer().
Definition SDL3pp_mixer.h:4123
bool Playing()
Query if a track is currently playing.
Definition SDL3pp_mixer.h:6291
Track CreateTrack(MixerRef mixer)
Create a new track on a mixer.
Definition SDL3pp_mixer.h:4847
MakeFrontCallback< void(TrackRaw track, const AudioSpec *spec, float *pcm, int samples)> TrackMixCB
A callback that fires when a Track is mixing at various stages.
Definition SDL3pp_mixer.h:2111
void SetGain(float gain)
Set a track's gain control.
Definition SDL3pp_mixer.h:6402
void SetLoops(int num_loops)
Change the number of times a currently-playing track will loop.
Definition SDL3pp_mixer.h:5426
Point3D Get3DPosition()
Get a track's current position in 3D space.
Definition SDL3pp_mixer.h:6760
void SetGroupPostMixCallback(GroupRef group, GroupMixCallback cb, void *userdata)
Set a callback that fires when a mixer group has completed mixing.
Definition SDL3pp_mixer.h:7167
void Untag(StringParam tag)
Remove an arbitrary tag from a track.
Definition SDL3pp_mixer.h:5203
MixerLock(MixerRef resource)
Lock a mixer by obtaining its internal mutex.
Definition SDL3pp_mixer.h:4095
ResourceRefT< AudioDecoderBase > AudioDecoderRef
Reference for AudioDecoder.
Definition SDL3pp_mixer.h:186
bool Pause()
Pause a currently-playing track.
Definition SDL3pp_mixer.h:6116
void SetTrackAudioStream(TrackRef track, AudioStreamRef stream)
Set a Track's input to an AudioStream.
Definition SDL3pp_mixer.h:5009
Audio LoadRawAudio_IO(MixerRef mixer, IOStreamRef io, const AudioSpec &spec, bool closeio=false)
Load raw PCM data from an IOStream.
Definition SDL3pp_mixer.h:4473
int Generate(MixerRef mixer, TargetBytes buffer)
Generate mixer output when not driving an audio device.
Definition SDL3pp_mixer.h:7324
void SetAudioStream(AudioStreamRef stream)
Set a Track's input to an AudioStream.
Definition SDL3pp_mixer.h:5014
PropertiesRef GetProperties()
Get the properties associated with a mixer.
Definition SDL3pp_mixer.h:3995
void SetTrackOutputChannelMap(TrackRef track, std::span< const int > chmap)
Set the current output channel map of a track.
Definition SDL3pp_mixer.h:6634
Sint64 GetDuration()
Get the length of a Audio's playback in sample frames.
Definition SDL3pp_mixer.h:4767
void StopTag(StringParam tag, Sint64 fade_out_ms)
Halt all tracks with a specific tag, possibly fading out over time.
Definition SDL3pp_mixer.h:6087
void ResumeTag(StringParam tag)
Resume all tracks with a specific tag.
Definition SDL3pp_mixer.h:6261
Audio LoadAudioNoCopy(SourceBytes data, bool free_when_done)
Load audio for playback from a memory buffer without making a copy.
Definition SDL3pp_mixer.h:4343
Audio LoadAudio_IO(MixerRef mixer, IOStreamRef io, bool predecode, bool closeio=false)
Load audio for playback from an IOStream.
Definition SDL3pp_mixer.h:4194
MIX_AudioDecoder * AudioDecoderRaw
Alias to raw representation for AudioDecoder.
Definition SDL3pp_mixer.h:179
OwnArray< TrackRef > GetTaggedTracks(StringParam tag)
Get all tracks with a specific tag.
Definition SDL3pp_mixer.h:5248
void DestroyMixer(MixerRaw mixer)
Free a mixer.
Definition SDL3pp_mixer.h:3969
AudioStreamRef GetTrackAudioStream(TrackRef track)
Query the AudioStream assigned to a track.
Definition SDL3pp_mixer.h:5479
Sint64 GetFadeFrames()
Query whether a given track is fading.
Definition SDL3pp_mixer.h:5358
bool Stop(Sint64 fade_out_frames)
Halt a currently-playing track, possibly fading out over time.
Definition SDL3pp_mixer.h:6004
void SetTrackRawCallback(TrackRef track, TrackMixCallback cb, void *userdata)
Set a callback that fires when a Track has initial decoded audio.
Definition SDL3pp_mixer.h:7009
Milliseconds AudioFramesToMS(AudioRef audio, Sint64 frames)
Convert sample frames for a Audio's format to milliseconds.
Definition SDL3pp_mixer.h:5642
void SetTrackAudio(TrackRef track, AudioRef audio)
Set a Track's input to a Audio.
Definition SDL3pp_mixer.h:4959
void StopTag(MixerRef mixer, StringParam tag, Sint64 fade_out_ms)
Halt all tracks with a specific tag, possibly fading out over time.
Definition SDL3pp_mixer.h:6082
void SetGroup(GroupRef group)
Assign a track to a mixing group.
Definition SDL3pp_mixer.h:6896
void(SDLCALL *)(void *userdata, MixerRaw mixer, const AudioSpec *spec, float *pcm, int samples) PostMixCallback
A callback that fires when all mixing has completed.
Definition SDL3pp_mixer.h:224
void SetStereo(const StereoGains &gains)
Force a track to stereo output, with optionally left/right panning.
Definition SDL3pp_mixer.h:6680
Sint64 GetPlaybackPosition()
Get the current input position of a playing track.
Definition SDL3pp_mixer.h:5326
Sint64 MSToFrames(int sample_rate, Milliseconds ms)
Convert milliseconds to sample frames at a specific sample rate.
Definition SDL3pp_mixer.h:5668
constexpr Sint64 DURATION_INFINITE
Infinite duration, when the audio never runs out of sound to generate.
Definition SDL3pp_mixer.h:4773
bool ResumeTrack(TrackRef track)
Resume a currently-paused track.
Definition SDL3pp_mixer.h:6200
void SetPostMixCallback(GroupMixCallback cb, void *userdata)
Set a callback that fires when a mixer group has completed mixing.
Definition SDL3pp_mixer.h:7202
void PlayTag(StringParam tag, PropertiesRef options)
Start (or restart) mixing all tracks with a specific tag for playback.
Definition SDL3pp_mixer.h:5922
void DestroyAudio(AudioRaw audio)
Destroy the specified audio.
Definition SDL3pp_mixer.h:4821
bool StopTrack(TrackRef track, Sint64 fade_out_frames)
Halt a currently-playing track, possibly fading out over time.
Definition SDL3pp_mixer.h:5999
void SetTrackRawIOStream(TrackRef track, IOStreamRef io, const AudioSpec &spec, bool closeio=false)
Set a Track's input to an IOStream providing raw PCM data.
Definition SDL3pp_mixer.h:5126
bool PauseTrack(TrackRef track)
Pause a currently-playing track.
Definition SDL3pp_mixer.h:6114
float GetTrackGain(TrackRef track)
Get a track's gain control.
Definition SDL3pp_mixer.h:6420
void SetPostMixCallback(MixerRef mixer, PostMixCallback cb, void *userdata)
Set a callback that fires when all mixing has completed.
Definition SDL3pp_mixer.h:7230
PropertiesRef GetTrackProperties(TrackRef track)
Get the properties associated with a track.
Definition SDL3pp_mixer.h:4898
MakeFrontCallback< void(MixerRaw mixer, const AudioSpec *spec, float *pcm, int samples)> PostMixCB
A callback that fires when all mixing has completed.
Definition SDL3pp_mixer.h:264
MixerLock Lock()
Lock a mixer by obtaining its internal mutex.
Definition SDL3pp_mixer.h:4093
MIX_Track * TrackRaw
Alias to raw representation for Track.
Definition SDL3pp_mixer.h:147
float GetMixerGain(MixerRef mixer)
Get a mixer's master gain control.
Definition SDL3pp_mixer.h:6368
float GetFrequencyRatio()
Get a mixer's master frequency ratio.
Definition SDL3pp_mixer.h:6526
int GetNumAudioDecoders()
Report the number of audio decoders available for use.
Definition SDL3pp_mixer.h:3820
float GetFrequencyRatio()
Query the frequency ratio of a track.
Definition SDL3pp_mixer.h:6594
Sint64 GetAudioDuration(AudioRef audio)
Get the length of a Audio's playback in sample frames.
Definition SDL3pp_mixer.h:4762
void Destroy()
Destroy a mixing group.
Definition SDL3pp_mixer.h:6819
void SetAudio(AudioRef audio)
Set a Track's input to a Audio.
Definition SDL3pp_mixer.h:4964
Mixer CreateMixerDevice(AudioDeviceRef devid, OptionalRef< const AudioSpec > spec=std::nullopt)
Create a mixer that plays sound directly to an audio device.
Definition SDL3pp_mixer.h:3901
OwnArray< char * > GetTags()
Get the tags currently associated with a track.
Definition SDL3pp_mixer.h:5225
void StopAllTracks(MixerRef mixer, Sint64 fade_out_ms)
Halt all currently-playing tracks, possibly fading out over time.
Definition SDL3pp_mixer.h:6041
Sint64 GetTrackRemaining(TrackRef track)
Return the number of sample frames remaining to be mixed in a track.
Definition SDL3pp_mixer.h:5514
void SetOutputChannelMap(std::span< const int > chmap)
Set the current output channel map of a track.
Definition SDL3pp_mixer.h:6640
void TagTrack(TrackRef track, StringParam tag)
Assign an arbitrary tag to a track.
Definition SDL3pp_mixer.h:5168
PropertiesRef GetAudioProperties(AudioRef audio)
Get the properties associated with a Audio.
Definition SDL3pp_mixer.h:4684
Audio LoadAudio(MixerRef mixer, StringParam path, bool predecode)
Load audio for playback from a file.
Definition SDL3pp_mixer.h:4269
void PauseAllTracks(MixerRef mixer)
Pause all currently-playing tracks.
Definition SDL3pp_mixer.h:6138
Audio LoadAudio_IO(IOStreamRef io, bool predecode, bool closeio=false)
Load audio for playback from an IOStream.
Definition SDL3pp_mixer.h:4202
void SetFrequencyRatio(float ratio)
Set a mixer's master frequency ratio.
Definition SDL3pp_mixer.h:6500
void SetStoppedCallback(TrackStoppedCallback cb, void *userdata)
Set a callback that fires when a Track is stopped.
Definition SDL3pp_mixer.h:6969
MixerRef GetMixer()
Get the Mixer that owns a Group.
Definition SDL3pp_mixer.h:6866
AudioDecoder CreateAudioDecoder_IO(IOStreamRef io, bool closeio=false, PropertiesRef props=nullptr)
Create a AudioDecoder from an IOStream.
Definition SDL3pp_mixer.h:7629
void SetPlaybackPosition(Sint64 frames)
Seek a playing track to a new position in its input.
Definition SDL3pp_mixer.h:5293
Audio LoadAudioNoCopy(MixerRef mixer, SourceBytes data, bool free_when_done)
Load audio for playback from a memory buffer without making a copy.
Definition SDL3pp_mixer.h:4335
Sint64 AudioMSToFrames(AudioRef audio, Milliseconds ms)
Convert milliseconds to sample frames for a Audio's format.
Definition SDL3pp_mixer.h:5610
void LockMixer(MixerRef mixer)
Lock a mixer by obtaining its internal mutex.
Definition SDL3pp_mixer.h:4091
void GetFormat(AudioSpec *spec)
Query the initial audio format of a AudioDecoder.
Definition SDL3pp_mixer.h:7708
PropertiesRef GetMixerProperties(MixerRef mixer)
Get the properties associated with a mixer.
Definition SDL3pp_mixer.h:3990
void SetPostMixCallback(PostMixCallback cb, void *userdata)
Set a callback that fires when all mixing has completed.
Definition SDL3pp_mixer.h:7263
float GetMixerFrequencyRatio(MixerRef mixer)
Get a mixer's master frequency ratio.
Definition SDL3pp_mixer.h:6521
void SetTrackFrequencyRatio(TrackRef track, float ratio)
Change the frequency ratio of a track.
Definition SDL3pp_mixer.h:6554
void GetFormat(AudioSpec *spec)
Query the initial audio format of a Audio.
Definition SDL3pp_mixer.h:4796
bool TrackPlaying(TrackRef track)
Query if a track is currently playing.
Definition SDL3pp_mixer.h:6289
int GetLoops()
Query how many loops remain for a given track.
Definition SDL3pp_mixer.h:5391
Milliseconds TrackFramesToMS(TrackRef track, Sint64 frames)
Convert sample frames for a track's current format to milliseconds.
Definition SDL3pp_mixer.h:5581
void reset()
Unlock a mixer previously locked by a call to LockMixer().
Definition SDL3pp_mixer.h:4131
void SetCookedCallback(TrackMixCallback cb, void *userdata)
Set a callback that fires when the mixer has transformed a track's audio.
Definition SDL3pp_mixer.h:7132
void Set3DPosition(const Point3D &position)
Set a track's position in 3D space.
Definition SDL3pp_mixer.h:6732
AudioDecoder CreateAudioDecoder(StringParam path, PropertiesRef props=nullptr)
Create a AudioDecoder from a path on the filesystem.
Definition SDL3pp_mixer.h:7575
Group CreateGroup(MixerRef mixer)
Create a mixing group.
Definition SDL3pp_mixer.h:6794
Sint64 GetTrackFadeFrames(TrackRef track)
Query whether a given track is fading.
Definition SDL3pp_mixer.h:5353
TrackRef CreateTrack()
Create a new track on a mixer.
Definition SDL3pp_mixer.h:4849
Sint64 MSToFrames(Milliseconds ms)
Convert milliseconds to sample frames for a Audio's format.
Definition SDL3pp_mixer.h:5615
Audio LoadRawAudio(SourceBytes data, const AudioSpec &spec)
Load raw PCM data from a memory buffer.
Definition SDL3pp_mixer.h:4529
PropertiesRef GetGroupProperties(GroupRef group)
Get the properties associated with a group.
Definition SDL3pp_mixer.h:6838
void SetMixerFrequencyRatio(MixerRef mixer, float ratio)
Set a mixer's master frequency ratio.
Definition SDL3pp_mixer.h:6495
constexpr Sint64 DURATION_UNKNOWN
Unknown duration, when the length of the audio can't be determined.
Definition SDL3pp_mixer.h:4770
Audio LoadRawAudio_IO(IOStreamRef io, const AudioSpec &spec, bool closeio=false)
Load raw PCM data from an IOStream.
Definition SDL3pp_mixer.h:4481
Audio LoadRawAudioNoCopy(MixerRef mixer, SourceBytes data, const AudioSpec &spec, bool free_when_done)
Load raw PCM data from a memory buffer without making a copy.
Definition SDL3pp_mixer.h:4574
void SetTrack3DPosition(TrackRef track, const Point3D &position)
Set a track's position in 3D space.
Definition SDL3pp_mixer.h:6727
MIX_Point3D Point3D
3D coordinates for SetTrack3DPosition.
Definition SDL3pp_mixer.h:1984
MIX_Audio * AudioRaw
Alias to raw representation for Audio.
Definition SDL3pp_mixer.h:131
bool PlayAudio(MixerRef mixer, AudioRef audio)
Play a Audio from start to finish without any management.
Definition SDL3pp_mixer.h:5957
void ResumeAllTracks(MixerRef mixer)
Resume all currently-paused tracks.
Definition SDL3pp_mixer.h:6224
void DestroyGroup(GroupRaw group)
Destroy a mixing group.
Definition SDL3pp_mixer.h:6817
Audio LoadAudio(StringParam path, bool predecode)
Load audio for playback from a file.
Definition SDL3pp_mixer.h:4274
void SetTrackGroup(TrackRef track, GroupRef group)
Assign a track to a mixing group.
Definition SDL3pp_mixer.h:6891
float GetGain()
Get a mixer's master gain control.
Definition SDL3pp_mixer.h:6370
MixerRef GetTrackMixer(TrackRef track)
Get the Mixer that owns a Track.
Definition SDL3pp_mixer.h:4921
MIX_Mixer * MixerRaw
Alias to raw representation for Mixer.
Definition SDL3pp_mixer.h:115
void GetFormat(AudioSpec *spec)
Get the audio format a mixer is generating.
Definition SDL3pp_mixer.h:4043
void PlayTag(MixerRef mixer, StringParam tag, PropertiesRef options)
Start (or restart) mixing all tracks with a specific tag for playback.
Definition SDL3pp_mixer.h:5917
void SetRawCallback(TrackMixCallback cb, void *userdata)
Set a callback that fires when a Track has initial decoded audio.
Definition SDL3pp_mixer.h:7048
void StopAllTracks(Sint64 fade_out_ms)
Halt all currently-playing tracks, possibly fading out over time.
Definition SDL3pp_mixer.h:6046
MixerRef GetMixer()
Get the Mixer that owns a Track.
Definition SDL3pp_mixer.h:4926
MixerRef GetGroupMixer(GroupRef group)
Get the Mixer that owns a Group.
Definition SDL3pp_mixer.h:6861
ResourceRefT< AudioBase > AudioRef
Reference for Audio.
Definition SDL3pp_mixer.h:138
bool TrackPaused(TrackRef track)
Query if a track is currently paused.
Definition SDL3pp_mixer.h:6316
void SetMixerGain(MixerRef mixer, float gain)
Set a mixer's master gain control.
Definition SDL3pp_mixer.h:6345
void SetTrackGain(TrackRef track, float gain)
Set a track's gain control.
Definition SDL3pp_mixer.h:6397
void PauseAllTracks()
Pause all currently-playing tracks.
Definition SDL3pp_mixer.h:6143
void Play(PropertiesRef options=nullptr)
Start (or restart) mixing a track for playback.
Definition SDL3pp_mixer.h:5820
GroupRef CreateGroup()
Create a mixing group.
Definition SDL3pp_mixer.h:6796
int GetTrackLoops(TrackRef track)
Query how many loops remain for a given track.
Definition SDL3pp_mixer.h:5389
ResourceRefT< MixerBase > MixerRef
Reference for Mixer.
Definition SDL3pp_mixer.h:122
void SetFrequencyRatio(float ratio)
Change the frequency ratio of a track.
Definition SDL3pp_mixer.h:6559
void Destroy()
Free a mixer.
Definition SDL3pp_mixer.h:3971
Sint64 GetTrackPlaybackPosition(TrackRef track)
Get the current input position of a playing track.
Definition SDL3pp_mixer.h:5321
void DestroyTrack(TrackRaw track)
Destroy the specified track.
Definition SDL3pp_mixer.h:4877
void Tag(StringParam tag)
Assign an arbitrary tag to a track.
Definition SDL3pp_mixer.h:5173
void SetTrackLoops(TrackRef track, int num_loops)
Change the number of times a currently-playing track will loop.
Definition SDL3pp_mixer.h:5421
Audio CreateSineWaveAudio(int hz, float amplitude, Sint64 ms)
Create a Audio that generates a sinewave.
Definition SDL3pp_mixer.h:4634
Point3D GetTrack3DPosition(TrackRef track)
Get a track's current position in 3D space.
Definition SDL3pp_mixer.h:6753
Mixer CreateMixer(const AudioSpec &spec)
Create a mixer that generates audio to a memory buffer.
Definition SDL3pp_mixer.h:3944
void GetAudioFormat(AudioRef audio, AudioSpec *spec)
Query the initial audio format of a Audio.
Definition SDL3pp_mixer.h:4791
float GetGain()
Get a track's gain control.
Definition SDL3pp_mixer.h:6422
MIX_StereoGains StereoGains
A set of per-channel gains for tracks using SetTrackStereo().
Definition SDL3pp_mixer.h:1972
OwnArray< TrackRef > GetTaggedTracks(MixerRef mixer, StringParam tag)
Get all tracks with a specific tag.
Definition SDL3pp_mixer.h:5241
Milliseconds FramesToMS(Sint64 frames)
Convert sample frames for a track's current format to milliseconds.
Definition SDL3pp_mixer.h:5586
int DecodeAudio(TargetBytes buffer, const AudioSpec &spec)
Decode more audio from a AudioDecoder.
Definition SDL3pp_mixer.h:7743
Milliseconds FramesToMS(Sint64 frames)
Convert sample frames for a Audio's format to milliseconds.
Definition SDL3pp_mixer.h:5647
int DecodeAudio(AudioDecoderRef audiodecoder, TargetBytes buffer, const AudioSpec &spec)
Decode more audio from a AudioDecoder.
Definition SDL3pp_mixer.h:7733
void(SDLCALL *)(void *userdata, GroupRaw group, const AudioSpec *spec, float *pcm, int samples) GroupMixCallback
A callback that fires when a Group has completed mixing.
Definition SDL3pp_mixer.h:3462
Sint64 GetRemaining()
Return the number of sample frames remaining to be mixed in a track.
Definition SDL3pp_mixer.h:5519
ResourceRefT< TrackBase > TrackRef
Reference for Track.
Definition SDL3pp_mixer.h:154
AudioRef GetTrackAudio(TrackRef track)
Query the Audio assigned to a track.
Definition SDL3pp_mixer.h:5451
void SetIOStream(IOStreamRef io, bool closeio=false)
Set a Track's input to an IOStream.
Definition SDL3pp_mixer.h:5073
::Sint64 Sint64
A signed 64-bit integer type.
Definition SDL3pp_stdinc.h:311
std::chrono::milliseconds Milliseconds
Duration in Miliseconds (Uint32).
Definition SDL3pp_stdinc.h:341
Properties for configuring audio loading.
Definition SDL3pp_mixer.h:4408
constexpr auto LOAD_IGNORE_LOOPS_BOOLEAN
Load ignore loops enabled.
Definition SDL3pp_mixer.h:4429
constexpr auto DECODER_STRING
String for decoder.
Definition SDL3pp_mixer.h:4434
constexpr auto LOAD_CLOSEIO_BOOLEAN
Load closeio enabled.
Definition SDL3pp_mixer.h:4413
constexpr auto LOAD_IOSTREAM_POINTER
Pointer to load iostream.
Definition SDL3pp_mixer.h:4410
constexpr auto LOAD_PREDECODE_BOOLEAN
Load predecode enabled.
Definition SDL3pp_mixer.h:4416
constexpr auto LOAD_SKIP_METADATA_TAGS_BOOLEAN
Enable load skip metadata tags.
Definition SDL3pp_mixer.h:4423
constexpr auto LOAD_PREFERRED_MIXER_POINTER
Pointer to load preferred mixer.
Definition SDL3pp_mixer.h:4419
Properties for Mixer.
Definition SDL3pp_mixer.h:4005
constexpr auto DEVICE_NUMBER
Device number.
Definition SDL3pp_mixer.h:4007
Properties that can be used in the options parameter of Track.Play().
Definition SDL3pp_mixer.h:5830
constexpr auto START_MILLISECOND_NUMBER
Number for start millisecond.
Definition SDL3pp_mixer.h:5843
constexpr auto LOOPS_NUMBER
Number for loops.
Definition SDL3pp_mixer.h:5832
constexpr auto START_ORDER_NUMBER
Number for start order.
Definition SDL3pp_mixer.h:5848
constexpr auto MAX_FRAME_NUMBER
Number for max frame.
Definition SDL3pp_mixer.h:5834
constexpr auto HALT_WHEN_EXHAUSTED_BOOLEAN
Halt when exhausted enabled.
Definition SDL3pp_mixer.h:5878
constexpr auto LOOP_START_FRAME_NUMBER
Number for loop start frame.
Definition SDL3pp_mixer.h:5853
constexpr auto FADE_IN_START_GAIN_FLOAT
Float for fade in start gain.
Definition SDL3pp_mixer.h:5867
constexpr auto APPEND_SILENCE_FRAMES_NUMBER
Number for append silence frames.
Definition SDL3pp_mixer.h:5870
constexpr auto FADE_IN_MILLISECONDS_NUMBER
Number for fade in milliseconds.
Definition SDL3pp_mixer.h:5863
constexpr auto FADE_IN_FRAMES_NUMBER
Number for fade in frames.
Definition SDL3pp_mixer.h:5860
constexpr auto START_FRAME_NUMBER
Number for start frame.
Definition SDL3pp_mixer.h:5840
constexpr auto MAX_MILLISECONDS_NUMBER
Number for max milliseconds.
Definition SDL3pp_mixer.h:5837
constexpr auto APPEND_SILENCE_MILLISECONDS_NUMBER
Number for append silence milliseconds.
Definition SDL3pp_mixer.h:5874
constexpr auto LOOP_START_MILLISECOND_NUMBER
Number for loop start millisecond.
Definition SDL3pp_mixer.h:5856
Main include header for the SDL3pp library.
Sint32 narrowS32(T value)
Narrows to Sint32.
Definition SDL3pp_stdinc.h:6262
Base class to Audio.
Definition SDL3pp_mixer.h:1527
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
Base class to AudioDecoder.
Definition SDL3pp_mixer.h:7341
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
An opaque object that represents an audio decoder.
Definition SDL3pp_mixer.h:7435
constexpr AudioDecoder(AudioDecoderRaw resource) noexcept
Constructs from raw AudioDecoder.
Definition SDL3pp_mixer.h:7445
constexpr AudioDecoder & operator=(AudioDecoder &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:7535
~AudioDecoder()
Destructor.
Definition SDL3pp_mixer.h:7532
constexpr AudioDecoder(AudioDecoder &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:7451
An opaque object that represents audio data.
Definition SDL3pp_mixer.h:1707
constexpr Audio(Audio &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:1723
constexpr Audio(AudioRaw resource) noexcept
Constructs from raw Audio.
Definition SDL3pp_mixer.h:1717
constexpr Audio & operator=(Audio &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:1949
~Audio()
Destructor.
Definition SDL3pp_mixer.h:1946
Base class to Group.
Definition SDL3pp_mixer.h:3510
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
An opaque object that represents a grouping of tracks.
Definition SDL3pp_mixer.h:3605
~Group()
Destructor.
Definition SDL3pp_mixer.h:3659
constexpr Group & operator=(Group &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:3662
constexpr Group(GroupRaw resource) noexcept
Constructs from raw Group.
Definition SDL3pp_mixer.h:3615
constexpr Group(Group &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:3621
Definition SDL3pp_callbackWrapper.h:169
Base class to Mixer.
Definition SDL3pp_mixer.h:273
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
An opaque object that represents a mixer.
Definition SDL3pp_mixer.h:1249
constexpr Mixer(MixerRaw resource) noexcept
Constructs from raw Mixer.
Definition SDL3pp_mixer.h:1259
constexpr Mixer(Mixer &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:1265
~Mixer()
Destructor.
Definition SDL3pp_mixer.h:1348
constexpr Mixer & operator=(Mixer &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:1351
A non-owning reference wrapper for a given resource.
Definition SDL3pp_resource.h:93
Base class to Track.
Definition SDL3pp_mixer.h:2120
constexpr ResourceBaseT()=default
Default constructor, creates null/invalid resource.
An opaque object that represents a source of sound output to be mixed.
Definition SDL3pp_mixer.h:3372
constexpr Track & operator=(Track &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:3423
constexpr Track(TrackRaw resource) noexcept
Constructs from raw Track.
Definition SDL3pp_mixer.h:3382
constexpr Track(Track &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:3388
~Track()
Destructor.
Definition SDL3pp_mixer.h:3420