SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
SDL3pp_mixer.h
1#ifndef SDL3PP_MIXER_H_
2#define SDL3PP_MIXER_H_
3
4#include "SDL3pp_audio.h"
5#include "SDL3pp_version.h"
6
7#if defined(SDL3PP_ENABLE_MIXER) || defined(SDL3PP_DOC)
8
9#include <SDL3_mixer/SDL_mixer.h>
10
11namespace SDL {
12
107
108// Forward decl
109struct Mixer;
110
112using MixerRaw = MIX_Mixer*;
113
120
121// Forward decl
122struct Audio;
123
125using AudioRaw = MIX_Audio*;
126
133
134// Forward decl
135struct Track;
136
138using TrackRaw = MIX_Track*;
139
146
147// Forward decl
148struct Group;
149
151using GroupRaw = MIX_Group*;
152
159
160// Forward decl
161struct AudioDecoder;
162
164using AudioDecoderRaw = MIX_AudioDecoder*;
165
172
173// Forward decl
174struct MixerLock;
175
209using PostMixCallback = void(SDLCALL*)(void* userdata,
210 MixerRaw mixer,
211 const AudioSpec* spec,
212 float* pcm,
213 int samples);
214
250 void(MixerRaw mixer, const AudioSpec* spec, float* pcm, int samples)>;
251
268struct Mixer : ResourceBase<MixerRaw>
269{
271
279 constexpr explicit Mixer(MixerRaw resource) noexcept
280 : ResourceBase(resource)
281 {
282 }
283
285 constexpr Mixer(const Mixer& other) = delete;
286
288 constexpr Mixer(Mixer&& other) noexcept
289 : Mixer(other.release())
290 {
291 }
292
293 constexpr Mixer(const MixerRef& other) = delete;
294
295 constexpr Mixer(MixerRef&& other) = delete;
296
343 Mixer(AudioDeviceRef devid, OptionalRef<const AudioSpec> spec = std::nullopt);
344
372 Mixer(const AudioSpec& spec);
373
375 ~Mixer() { MIX_DestroyMixer(get()); }
376
378 constexpr Mixer& operator=(Mixer&& other) noexcept
379 {
380 swap(*this, other);
381 return *this;
382 }
383
385 Mixer& operator=(const Mixer& other) = delete;
386
408 void Destroy();
409
427
455 void GetFormat(AudioSpec* spec);
456
498 MixerLock Lock();
499
520 void Unlock(MixerLock&& lock);
521
577 Audio LoadAudio_IO(IOStreamRef io, bool predecode, bool closeio = false);
578
606 Audio LoadAudio(StringParam path, bool predecode);
607
664 Audio LoadAudioNoCopy(SourceBytes data, bool free_when_done);
665
700 const AudioSpec& spec,
701 bool closeio = false);
702
736 Audio LoadRawAudio(SourceBytes data, const AudioSpec& spec);
737
778 const AudioSpec& spec,
779 bool free_when_done);
780
816 Audio CreateSineWaveAudio(int hz, float amplitude, Sint64 ms);
817
842
857
892 void PlayTag(StringParam tag, PropertiesRef options);
893
923 bool PlayAudio(AudioRef audio);
924
953 void StopAllTracks(Sint64 fade_out_ms);
954
985 void StopTag(StringParam tag, Sint64 fade_out_ms);
986
1006 void PauseAllTracks();
1007
1033 void PauseTag(StringParam tag);
1034
1054 void ResumeAllTracks();
1055
1081 void ResumeTag(StringParam tag);
1082
1107 void SetGain(float gain);
1108
1124 float GetGain();
1125
1159 void SetTagGain(StringParam tag, float gain);
1160
1188 void SetFrequencyRatio(float ratio);
1189
1205 float GetFrequencyRatio();
1206
1237
1261 void SetPostMixCallback(PostMixCallback cb, void* userdata);
1262
1285
1337 int Generate(TargetBytes buffer);
1338};
1339
1382{
1383 MixerRef m_lock;
1384
1385public:
1430
1432 MixerLock(const MixerLock& other) = delete;
1433
1435 MixerLock(MixerLock&& other) noexcept
1436 : m_lock(std::move(other.m_lock))
1437 {
1438 }
1439
1461
1462 MixerLock& operator=(const MixerLock& other) = delete;
1463
1465 MixerLock& operator=(MixerLock&& other) noexcept
1466 {
1467 std::swap(m_lock, other.m_lock);
1468 return *this;
1469 }
1470
1472 constexpr operator bool() const { return bool(m_lock); }
1473
1494 void reset();
1495
1497 MixerRef resource() const { return m_lock; }
1498
1500 void release() { m_lock.release(); }
1501};
1502
1519struct Audio : ResourceBase<AudioRaw>
1520{
1522
1530 constexpr explicit Audio(AudioRaw resource) noexcept
1531 : ResourceBase(resource)
1532 {
1533 }
1534
1536 constexpr Audio(const Audio& other) = delete;
1537
1539 constexpr Audio(Audio&& other) noexcept
1540 : Audio(other.release())
1541 {
1542 }
1543
1544 constexpr Audio(const AudioRef& other) = delete;
1545
1546 constexpr Audio(AudioRef&& other) = delete;
1547
1605 Audio(MixerRef mixer, IOStreamRef io, bool predecode, bool closeio = false);
1606
1636 Audio(MixerRef mixer, StringParam path, bool predecode);
1637
1684 Audio(PropertiesRef props);
1685
1720 Audio(MixerRef mixer,
1721 IOStreamRef io,
1722 const AudioSpec& spec,
1723 bool closeio = false);
1724
1759 Audio(MixerRef mixer, SourceBytes data, const AudioSpec& spec);
1760
1762 ~Audio() { MIX_DestroyAudio(get()); }
1763
1765 constexpr Audio& operator=(Audio&& other) noexcept
1766 {
1767 swap(*this, other);
1768 return *this;
1769 }
1770
1772 Audio& operator=(const Audio& other) = delete;
1773
1792 void Destroy();
1793
1839
1872
1888 void GetFormat(AudioSpec* spec);
1889
1909
1932};
1933
1950using StereoGains = MIX_StereoGains;
1951
1962using Point3D = MIX_Point3D;
1963
1985using TrackStoppedCallback = void(SDLCALL*)(void* userdata, TrackRaw track);
1986
2010
2047using TrackMixCallback = void(SDLCALL*)(void* userdata,
2048 TrackRaw track,
2049 const AudioSpec* spec,
2050 float* pcm,
2051 int samples);
2052
2090 void(TrackRaw track, const AudioSpec* spec, float* pcm, int samples)>;
2091
2106struct Track : ResourceBase<TrackRaw>
2107{
2109
2117 constexpr explicit Track(TrackRaw resource) noexcept
2118 : ResourceBase(resource)
2119 {
2120 }
2121
2123 constexpr Track(const Track& other) = delete;
2124
2126 constexpr Track(Track&& other) noexcept
2127 : Track(other.release())
2128 {
2129 }
2130
2131 constexpr Track(const TrackRef& other) = delete;
2132
2133 constexpr Track(TrackRef&& other) = delete;
2134
2159 Track(MixerRef mixer);
2160
2162 ~Track() { MIX_DestroyTrack(get()); }
2163
2165 constexpr Track& operator=(Track&& other) noexcept
2166 {
2167 swap(*this, other);
2168 return *this;
2169 }
2170
2172 Track& operator=(const Track& other) = delete;
2173
2190 void Destroy();
2191
2209
2223
2254 void SetAudio(AudioRef audio);
2255
2295 void SetAudioStream(AudioStreamRef stream);
2296
2344 void SetIOStream(IOStreamRef io, bool closeio = false);
2345
2394 const AudioSpec& spec,
2395 bool closeio = false);
2396
2423 void Tag(StringParam tag);
2424
2447 void Untag(StringParam tag);
2448
2462
2497 void SetPlaybackPosition(Sint64 frames);
2498
2524
2547
2573 int GetLoops();
2574
2603 void SetLoops(int num_loops);
2604
2626
2648
2674
2698
2725
2837 void Play(PropertiesRef options = nullptr);
2838
2870 bool Stop(Sint64 fade_out_frames);
2871
2893 bool Pause();
2894
2916 bool Resume();
2917
2940 bool Playing();
2941
2965 bool Paused();
2966
2991 void SetGain(float gain);
2992
3008 float GetGain();
3009
3032 void SetFrequencyRatio(float ratio);
3033
3058 float GetFrequencyRatio();
3059
3094 void SetOutputChannelMap(std::span<const int> chmap);
3095
3125 void SetStereo(const StereoGains& gains);
3126
3169 void Set3DPosition(const Point3D& position);
3170
3187
3210 void SetGroup(GroupRef group);
3211
3241 void SetStoppedCallback(TrackStoppedCallback cb, void* userdata);
3242
3271
3301 void SetRawCallback(TrackMixCallback cb, void* userdata);
3302
3330 void SetRawCallback(TrackMixCB cb);
3331
3364 void SetCookedCallback(TrackMixCallback cb, void* userdata);
3365
3397};
3398
3431using GroupMixCallback = void(SDLCALL*)(void* userdata,
3432 GroupRaw group,
3433 const AudioSpec* spec,
3434 float* pcm,
3435 int samples);
3436
3471 void(GroupRaw group, const AudioSpec* spec, float* pcm, int samples)>;
3472
3490struct Group : ResourceBase<GroupRaw>
3491{
3493
3501 constexpr explicit Group(GroupRaw resource) noexcept
3502 : ResourceBase(resource)
3503 {
3504 }
3505
3507 constexpr Group(const Group& other) = delete;
3508
3510 constexpr Group(Group&& other) noexcept
3511 : Group(other.release())
3512 {
3513 }
3514
3515 constexpr Group(const GroupRef& other) = delete;
3516
3517 constexpr Group(GroupRef&& other) = delete;
3518
3549 Group(MixerRef mixer);
3550
3552 ~Group() { MIX_DestroyGroup(get()); }
3553
3555 constexpr Group& operator=(Group&& other) noexcept
3556 {
3557 swap(*this, other);
3558 return *this;
3559 }
3560
3562 Group& operator=(const Group& other) = delete;
3563
3576 void Destroy();
3577
3595
3609
3635 void SetPostMixCallback(GroupMixCallback cb, void* userdata);
3636};
3637
3638#ifdef SDL3PP_DOC
3639
3647#define SDL_MIXER_MAJOR_VERSION
3648
3656#define SDL_MIXER_MINOR_VERSION
3657
3665#define SDL_MIXER_MICRO_VERSION
3666
3674#define SDL_MIXER_VERSION \
3675 SDL_VERSIONNUM( \
3676 SDL_MIXER_MAJOR_VERSION, SDL_MIXER_MINOR_VERSION, SDL_MIXER_MICRO_VERSION)
3677
3683#define SDL_MIXER_VERSION_ATLEAST(X, Y, Z) \
3684 ((SDL_MIXER_MAJOR_VERSION >= X) && \
3685 (SDL_MIXER_MAJOR_VERSION > X || SDL_MIXER_MINOR_VERSION >= Y) && \
3686 (SDL_MIXER_MAJOR_VERSION > X || SDL_MIXER_MINOR_VERSION > Y || \
3687 SDL_MIXER_MICRO_VERSION >= Z))
3688
3689#endif // SDL3PP_DOC
3690
3691namespace MIX {
3692
3709inline int Version() { return MIX_Version(); }
3710
3729inline void Init() { CheckError(MIX_Init()); }
3730
3765inline void Quit() { MIX_Quit(); }
3766
3767} // namespace MIX
3768
3789inline int GetNumAudioDecoders() { return MIX_GetNumAudioDecoders(); }
3790
3820inline const char* GetAudioDecoder(int index)
3821{
3822 return MIX_GetAudioDecoder(index);
3823}
3824
3871 OptionalRef<const AudioSpec> spec = std::nullopt)
3872{
3873 return Mixer(devid, spec);
3874}
3875
3877 : Mixer(CheckError(MIX_CreateMixerDevice(devid, spec)))
3878{
3879}
3880
3881inline Mixer::Mixer(const AudioSpec& spec)
3882 : Mixer(CheckError(MIX_CreateMixer(&spec)))
3883{
3884}
3885
3913inline Mixer CreateMixer(const AudioSpec& spec) { return Mixer(spec); }
3914
3938inline void DestroyMixer(MixerRaw mixer) { MIX_DestroyMixer(mixer); }
3939
3941
3960{
3961 return CheckError(MIX_GetMixerProperties(mixer));
3962}
3963
3968
3974namespace prop::Mixer {
3975
3976constexpr auto DEVICE_NUMBER = MIX_PROP_MIXER_DEVICE_NUMBER;
3977
3978} // namespace prop::Mixer
3979
4008inline void GetMixerFormat(MixerRef mixer, AudioSpec* spec)
4009{
4010 CheckError(MIX_GetMixerFormat(mixer, spec));
4011}
4012
4013inline void Mixer::GetFormat(AudioSpec* spec)
4014{
4015 SDL::GetMixerFormat(get(), spec);
4016}
4017
4061inline void LockMixer(MixerRef mixer) { MIX_LockMixer(mixer); }
4062
4063inline MixerLock Mixer::Lock() { return {MixerRef(*this)}; }
4064
4066 : m_lock(std::move(resource))
4067{
4068 LockMixer(m_lock);
4069}
4070
4093inline void UnlockMixer(MixerRef mixer) { MIX_UnlockMixer(mixer); }
4094
4095inline void Mixer::Unlock(MixerLock&& lock)
4096{
4097 SDL_assert_paranoid(lock.resource() == *this);
4098 std::move(lock).reset();
4099}
4100
4101inline void MixerLock::reset()
4102{
4103 if (!m_lock) return;
4104 UnlockMixer(m_lock);
4105 m_lock = {};
4106}
4107
4165 IOStreamRef io,
4166 bool predecode,
4167 bool closeio = false)
4168{
4169 return Audio(mixer, io, predecode, closeio);
4170}
4171
4172inline Audio Mixer::LoadAudio_IO(IOStreamRef io, bool predecode, bool closeio)
4173{
4174 return Audio(get(), io, predecode, closeio);
4175}
4176
4178 IOStreamRef io,
4179 bool predecode,
4180 bool closeio)
4181 : Audio(MIX_LoadAudio_IO(mixer, io, predecode, closeio))
4182{
4183}
4184
4185inline Audio::Audio(MixerRef mixer, StringParam path, bool predecode)
4186 : Audio(MIX_LoadAudio(mixer, path, predecode))
4187{
4188}
4189
4191 : Audio(CheckError(MIX_LoadAudioWithProperties(props)))
4192{
4193}
4194
4196 IOStreamRef io,
4197 const AudioSpec& spec,
4198 bool closeio)
4199 : Audio(CheckError(MIX_LoadRawAudio_IO(mixer, io, &spec, closeio)))
4200{
4201}
4202
4203inline Audio::Audio(MixerRef mixer, SourceBytes data, const AudioSpec& spec)
4204 : Audio(CheckError(
4205 MIX_LoadRawAudio(mixer, data.data(), data.size_bytes(), &spec)))
4206{
4207}
4208
4237inline Audio LoadAudio(MixerRef mixer, StringParam path, bool predecode)
4238{
4239 return Audio(mixer, std::move(path), predecode);
4240}
4241
4242inline Audio Mixer::LoadAudio(StringParam path, bool predecode)
4243{
4244 return Audio(get(), std::move(path), predecode);
4245}
4246
4304 SourceBytes data,
4305 bool free_when_done)
4306{
4307 return Audio(CheckError(MIX_LoadAudioNoCopy(
4308 mixer, data.data(), data.size_bytes(), free_when_done)));
4309}
4310
4311inline Audio Mixer::LoadAudioNoCopy(SourceBytes data, bool free_when_done)
4312{
4313 return SDL::LoadAudioNoCopy(get(), std::move(data), free_when_done);
4314}
4315
4363{
4364 return Audio(props);
4365}
4366
4372namespace prop::Audio {
4373
4375 MIX_PROP_AUDIO_LOAD_IOSTREAM_POINTER;
4376
4377constexpr auto LOAD_CLOSEIO_BOOLEAN =
4378 MIX_PROP_AUDIO_LOAD_CLOSEIO_BOOLEAN;
4379
4381 MIX_PROP_AUDIO_LOAD_PREDECODE_BOOLEAN;
4382
4384 MIX_PROP_AUDIO_LOAD_PREFERRED_MIXER_POINTER;
4386
4388 MIX_PROP_AUDIO_LOAD_SKIP_METADATA_TAGS_BOOLEAN;
4390
4391constexpr auto DECODER_STRING =
4392 MIX_PROP_AUDIO_DECODER_STRING;
4393
4394} // namespace prop::Audio
4395
4431 IOStreamRef io,
4432 const AudioSpec& spec,
4433 bool closeio = false)
4434{
4435 return Audio(mixer, io, spec, closeio);
4436}
4437
4439 const AudioSpec& spec,
4440 bool closeio)
4441{
4442 return Audio(get(), io, spec, closeio);
4443}
4444
4480 SourceBytes data,
4481 const AudioSpec& spec)
4482{
4483 return Audio(mixer, std::move(data), spec);
4484}
4485
4487{
4488 return Audio(get(), std::move(data), spec);
4489}
4490
4532 SourceBytes data,
4533 const AudioSpec& spec,
4534 bool free_when_done)
4535{
4536 return Audio(CheckError(MIX_LoadRawAudioNoCopy(
4537 mixer, data.data(), data.size_bytes(), &spec, free_when_done)));
4538}
4539
4541 const AudioSpec& spec,
4542 bool free_when_done)
4543{
4544 return SDL::LoadRawAudioNoCopy(get(), std::move(data), spec, free_when_done);
4545}
4546
4584 int hz,
4585 float amplitude,
4586 Sint64 ms)
4587{
4588 return Audio(CheckError(MIX_CreateSineWaveAudio(mixer, hz, amplitude, ms)));
4589}
4590
4591inline Audio Mixer::CreateSineWaveAudio(int hz, float amplitude, Sint64 ms)
4592{
4593 return SDL::CreateSineWaveAudio(get(), hz, amplitude, ms);
4594}
4595
4642{
4643 return CheckError(MIX_GetAudioProperties(audio));
4644}
4645
4650
4657
4658constexpr auto TITLE_STRING =
4659 MIX_PROP_METADATA_TITLE_STRING;
4660
4661constexpr auto ARTIST_STRING =
4662 MIX_PROP_METADATA_ARTIST_STRING;
4663
4664constexpr auto ALBUM_STRING =
4665 MIX_PROP_METADATA_ALBUM_STRING;
4666
4667constexpr auto COPYRIGHT_STRING =
4668 MIX_PROP_METADATA_COPYRIGHT_STRING;
4669
4670constexpr auto TRACK_NUMBER =
4671 MIX_PROP_METADATA_TRACK_NUMBER;
4672
4673constexpr auto TOTAL_TRACKS_NUMBER =
4674 MIX_PROP_METADATA_TOTAL_TRACKS_NUMBER;
4675
4676constexpr auto YEAR_NUMBER =
4677 MIX_PROP_METADATA_YEAR_NUMBER;
4678
4680 MIX_PROP_METADATA_DURATION_FRAMES_NUMBER;
4681
4683 MIX_PROP_METADATA_DURATION_INFINITE_BOOLEAN;
4684
4685} // namespace prop::Audio::Metadata
4686
4720{
4721 return MIX_GetAudioDuration(audio);
4722}
4723
4725
4727constexpr Sint64 DURATION_UNKNOWN = MIX_DURATION_UNKNOWN;
4728
4730constexpr Sint64 DURATION_INFINITE = MIX_DURATION_INFINITE;
4731
4748inline void GetAudioFormat(AudioRef audio, AudioSpec* spec)
4749{
4750 CheckError(MIX_GetAudioFormat(audio, spec));
4751}
4752
4753inline void Audio::GetFormat(AudioSpec* spec)
4754{
4755 SDL::GetAudioFormat(get(), spec);
4756}
4757
4778inline void DestroyAudio(AudioRaw audio) { MIX_DestroyAudio(audio); }
4779
4781
4804inline Track CreateTrack(MixerRef mixer) { return Track(mixer); }
4805
4806inline TrackRef Mixer::CreateTrack() { return Track(get()); }
4807
4809 : Track(CheckError(MIX_CreateTrack(mixer)))
4810{
4811}
4812
4831inline void DestroyTrack(TrackRaw track) { MIX_DestroyTrack(track); }
4832
4834
4853{
4854 return CheckError(MIX_GetTrackProperties(track));
4855}
4856
4861
4876{
4877 return CheckError(MIX_GetTrackMixer(track));
4878}
4879
4881
4913inline void SetTrackAudio(TrackRef track, AudioRef audio)
4914{
4915 CheckError(MIX_SetTrackAudio(track, audio));
4916}
4917
4918inline void Track::SetAudio(AudioRef audio)
4919{
4920 SDL::SetTrackAudio(get(), audio);
4921}
4922
4964{
4965 CheckError(MIX_SetTrackAudioStream(track, stream));
4966}
4967
4969{
4970 SDL::SetTrackAudioStream(get(), stream);
4971}
4972
5020inline void SetTrackIOStream(TrackRef track,
5021 IOStreamRef io,
5022 bool closeio = false)
5023{
5024 CheckError(MIX_SetTrackIOStream(track, io, closeio));
5025}
5026
5027inline void Track::SetIOStream(IOStreamRef io, bool closeio)
5028{
5029 SDL::SetTrackIOStream(get(), io, closeio);
5030}
5031
5081 IOStreamRef io,
5082 const AudioSpec& spec,
5083 bool closeio = false)
5084{
5085 CheckError(MIX_SetTrackRawIOStream(track, io, &spec, closeio));
5086}
5087
5089 const AudioSpec& spec,
5090 bool closeio)
5091{
5092 SDL::SetTrackRawIOStream(get(), io, spec, closeio);
5093}
5094
5122inline void TagTrack(TrackRef track, StringParam tag)
5123{
5124 CheckError(MIX_TagTrack(track, tag));
5125}
5126
5127inline void Track::Tag(StringParam tag)
5128{
5129 SDL::TagTrack(get(), std::move(tag));
5130}
5131
5155inline void UntagTrack(TrackRef track, StringParam tag)
5156{
5157 MIX_UntagTrack(track, tag);
5158}
5159
5161{
5162 SDL::UntagTrack(get(), std::move(tag));
5163}
5164
5179{
5180 int count;
5181 auto result = CheckError(MIX_GetTrackTags(track, &count));
5182 return OwnArray<char*>(result, count);
5183}
5184
5186
5202{
5203 int count;
5204 auto result = CheckError(MIX_GetTaggedTracks(mixer, tag, &count));
5205 return OwnArray<TrackRef>(reinterpret_cast<TrackRef*>(result), count);
5206}
5207
5209{
5210 return SDL::GetTaggedTracks(get(), std::move(tag));
5211}
5212
5248inline void SetTrackPlaybackPosition(TrackRef track, Sint64 frames)
5249{
5250 CheckError(MIX_SetTrackPlaybackPosition(track, frames));
5251}
5252
5254{
5256}
5257
5282{
5283 return MIX_GetTrackPlaybackPosition(track);
5284}
5285
5290
5314{
5315 return MIX_GetTrackFadeFrames(track);
5316}
5317
5319
5346inline int GetTrackLoops(TrackRef track) { return MIX_GetTrackLoops(track); }
5347
5348inline int Track::GetLoops() { return SDL::GetTrackLoops(get()); }
5349
5378inline void SetTrackLoops(TrackRef track, int num_loops)
5379{
5380 CheckError(MIX_SetTrackLoops(track, num_loops));
5381}
5382
5383inline void Track::SetLoops(int num_loops)
5384{
5385 SDL::SetTrackLoops(get(), num_loops);
5386}
5387
5409{
5410 return MIX_GetTrackAudio(track);
5411}
5412
5414
5437{
5438 return MIX_GetTrackAudioStream(track);
5439}
5440
5445
5472{
5473 return MIX_GetTrackRemaining(track);
5474}
5475
5477
5501{
5502 return MIX_TrackMSToFrames(track, ms.count());
5503}
5504
5506{
5507 return SDL::TrackMSToFrames(get(), ms);
5508}
5509
5536{
5537 return Milliseconds(MIX_TrackFramesToMS(track, frames));
5538}
5539
5541{
5542 return SDL::TrackFramesToMS(get(), frames);
5543}
5544
5565{
5566 return MIX_AudioMSToFrames(audio, ms.count());
5567}
5568
5570{
5571 return SDL::AudioMSToFrames(get(), ms);
5572}
5573
5597{
5598 return Milliseconds(MIX_AudioFramesToMS(audio, frames));
5599}
5600
5602{
5603 return SDL::AudioFramesToMS(get(), frames);
5604}
5605
5622inline Sint64 MSToFrames(int sample_rate, Milliseconds ms)
5623{
5624 return MIX_MSToFrames(sample_rate, ms.count());
5625}
5626
5648inline Milliseconds FramesToMS(int sample_rate, Sint64 frames)
5649{
5650 return Milliseconds(MIX_FramesToMS(sample_rate, frames));
5651}
5652
5763inline void PlayTrack(TrackRef track, PropertiesRef options = nullptr)
5764{
5765 CheckError(MIX_PlayTrack(track, options));
5766}
5767
5768inline void Track::Play(PropertiesRef options)
5769{
5770 SDL::PlayTrack(get(), options);
5771}
5772
5778namespace prop::Play {
5779
5780constexpr auto LOOPS_NUMBER = MIX_PROP_PLAY_LOOPS_NUMBER;
5781
5782constexpr auto MAX_FRAME_NUMBER =
5783 MIX_PROP_PLAY_MAX_FRAME_NUMBER;
5784
5786 MIX_PROP_PLAY_MAX_MILLISECONDS_NUMBER;
5787
5788constexpr auto START_FRAME_NUMBER =
5789 MIX_PROP_PLAY_START_FRAME_NUMBER;
5790
5792 MIX_PROP_PLAY_START_MILLISECOND_NUMBER;
5793
5795 MIX_PROP_PLAY_LOOP_START_FRAME_NUMBER;
5796
5798 MIX_PROP_PLAY_LOOP_START_MILLISECOND_NUMBER;
5800
5802 MIX_PROP_PLAY_FADE_IN_FRAMES_NUMBER;
5803
5805 MIX_PROP_PLAY_FADE_IN_MILLISECONDS_NUMBER;
5807
5809 MIX_PROP_PLAY_FADE_IN_START_GAIN_FLOAT;
5810
5812 MIX_PROP_PLAY_APPEND_SILENCE_FRAMES_NUMBER;
5814
5816 MIX_PROP_PLAY_APPEND_SILENCE_MILLISECONDS_NUMBER;
5818
5820 MIX_PROP_PLAY_HALT_WHEN_EXHAUSTED_BOOLEAN;
5821
5822} // namespace prop::Play
5823
5859inline void PlayTag(MixerRef mixer, StringParam tag, PropertiesRef options)
5860{
5861 CheckError(MIX_PlayTag(mixer, tag, options));
5862}
5863
5865{
5866 SDL::PlayTag(get(), std::move(tag), options);
5867}
5868
5899inline bool PlayAudio(MixerRef mixer, AudioRef audio)
5900{
5901 return MIX_PlayAudio(mixer, audio);
5902}
5903
5904inline bool Mixer::PlayAudio(AudioRef audio)
5905{
5906 return SDL::PlayAudio(get(), audio);
5907}
5908
5941inline bool StopTrack(TrackRef track, Sint64 fade_out_frames)
5942{
5943 return MIX_StopTrack(track, fade_out_frames);
5944}
5945
5946inline bool Track::Stop(Sint64 fade_out_frames)
5947{
5948 return SDL::StopTrack(get(), fade_out_frames);
5949}
5950
5980inline void StopAllTracks(MixerRef mixer, Sint64 fade_out_ms)
5981{
5982 CheckError(MIX_StopAllTracks(mixer, fade_out_ms));
5983}
5984
5985inline void Mixer::StopAllTracks(Sint64 fade_out_ms)
5986{
5987 SDL::StopAllTracks(get(), fade_out_ms);
5988}
5989
6021inline void StopTag(MixerRef mixer, StringParam tag, Sint64 fade_out_ms)
6022{
6023 CheckError(MIX_StopTag(mixer, tag, fade_out_ms));
6024}
6025
6026inline void Mixer::StopTag(StringParam tag, Sint64 fade_out_ms)
6027{
6028 SDL::StopTag(get(), std::move(tag), fade_out_ms);
6029}
6030
6053inline bool PauseTrack(TrackRef track) { return MIX_PauseTrack(track); }
6054
6055inline bool Track::Pause() { return SDL::PauseTrack(get()); }
6056
6077inline void PauseAllTracks(MixerRef mixer)
6078{
6079 CheckError(MIX_PauseAllTracks(mixer));
6080}
6081
6083
6110inline void PauseTag(MixerRef mixer, StringParam tag)
6111{
6112 CheckError(MIX_PauseTag(mixer, tag));
6113}
6114
6116{
6117 SDL::PauseTag(get(), std::move(tag));
6118}
6119
6142inline bool ResumeTrack(TrackRef track) { return MIX_ResumeTrack(track); }
6143
6144inline bool Track::Resume() { return SDL::ResumeTrack(get()); }
6145
6166inline void ResumeAllTracks(MixerRef mixer)
6167{
6168 CheckError(MIX_ResumeAllTracks(mixer));
6169}
6170
6172
6198inline void ResumeTag(MixerRef mixer, StringParam tag)
6199{
6200 CheckError(MIX_ResumeTag(mixer, tag));
6201}
6202
6204{
6205 SDL::ResumeTag(get(), std::move(tag));
6206}
6207
6231inline bool TrackPlaying(TrackRef track) { return MIX_TrackPlaying(track); }
6232
6233inline bool Track::Playing() { return SDL::TrackPlaying(get()); }
6234
6258inline bool TrackPaused(TrackRef track) { return MIX_TrackPaused(track); }
6259
6260inline bool Track::Paused() { return SDL::TrackPaused(get()); }
6261
6287inline void SetMixerGain(MixerRef mixer, float gain)
6288{
6289 CheckError(MIX_SetMixerGain(mixer, gain));
6290}
6291
6292inline void Mixer::SetGain(float gain) { SDL::SetMixerGain(get(), gain); }
6293
6310inline float GetMixerGain(MixerRef mixer) { return MIX_GetMixerGain(mixer); }
6311
6312inline float Mixer::GetGain() { return SDL::GetMixerGain(get()); }
6313
6339inline void SetTrackGain(TrackRef track, float gain)
6340{
6341 CheckError(MIX_SetTrackGain(track, gain));
6342}
6343
6344inline void Track::SetGain(float gain) { SDL::SetTrackGain(get(), gain); }
6345
6362inline float GetTrackGain(TrackRef track) { return MIX_GetTrackGain(track); }
6363
6364inline float Track::GetGain() { return SDL::GetTrackGain(get()); }
6365
6400inline void SetTagGain(MixerRef mixer, StringParam tag, float gain)
6401{
6402 CheckError(MIX_SetTagGain(mixer, tag, gain));
6403}
6404
6405inline void Mixer::SetTagGain(StringParam tag, float gain)
6406{
6407 SDL::SetTagGain(get(), std::move(tag), gain);
6408}
6409
6437inline void SetMixerFrequencyRatio(MixerRef mixer, float ratio)
6438{
6439 CheckError(MIX_SetMixerFrequencyRatio(mixer, ratio));
6440}
6441
6442inline void Mixer::SetFrequencyRatio(float ratio)
6443{
6445}
6446
6464{
6465 return MIX_GetMixerFrequencyRatio(mixer);
6466}
6467
6469{
6471}
6472
6496inline void SetTrackFrequencyRatio(TrackRef track, float ratio)
6497{
6498 CheckError(MIX_SetTrackFrequencyRatio(track, ratio));
6499}
6500
6501inline void Track::SetFrequencyRatio(float ratio)
6502{
6504}
6505
6532{
6533 return MIX_GetTrackFrequencyRatio(track);
6534}
6535
6537{
6539}
6540
6576inline void SetTrackOutputChannelMap(TrackRef track, std::span<const int> chmap)
6577{
6578 CheckError(
6579 MIX_SetTrackOutputChannelMap(track, chmap.data(), narrowS32(chmap.size())));
6580}
6581
6582inline void Track::SetOutputChannelMap(std::span<const int> chmap)
6583{
6585}
6586
6617inline void SetTrackStereo(TrackRef track, const StereoGains& gains)
6618{
6619 CheckError(MIX_SetTrackStereo(track, &gains));
6620}
6621
6622inline void Track::SetStereo(const StereoGains& gains)
6623{
6624 SDL::SetTrackStereo(get(), gains);
6625}
6626
6669inline void SetTrack3DPosition(TrackRef track, const Point3D& position)
6670{
6671 CheckError(MIX_SetTrack3DPosition(track, &position));
6672}
6673
6674inline void Track::Set3DPosition(const Point3D& position)
6675{
6676 SDL::SetTrack3DPosition(get(), position);
6677}
6678
6696{
6697 Point3D position;
6698 CheckError(MIX_GetTrack3DPosition(track, &position));
6699 return position;
6700}
6701
6703
6733inline Group CreateGroup(MixerRef mixer) { return Group(mixer); }
6734
6735inline GroupRef Mixer::CreateGroup() { return Group(get()); }
6736
6738 : Group(CheckError(MIX_CreateGroup(mixer)))
6739{
6740}
6741
6756inline void DestroyGroup(GroupRaw group) { MIX_DestroyGroup(group); }
6757
6759
6778{
6779 return CheckError(MIX_GetGroupProperties(group));
6780}
6781
6786
6801{
6802 return CheckError(MIX_GetGroupMixer(group));
6803}
6804
6806
6830inline void SetTrackGroup(TrackRef track, GroupRef group)
6831{
6832 CheckError(MIX_SetTrackGroup(track, group));
6833}
6834
6835inline void Track::SetGroup(GroupRef group)
6836{
6837 SDL::SetTrackGroup(get(), group);
6838}
6839
6871 void* userdata)
6872{
6873 CheckError(MIX_SetTrackStoppedCallback(track, cb, userdata));
6874}
6875
6904{
6905 SetTrackStoppedCallback(track, cb.wrapper, cb.data);
6906}
6907
6909{
6910 SDL::SetTrackStoppedCallback(get(), cb, userdata);
6911}
6912
6917
6949 void* userdata)
6950{
6951 CheckError(MIX_SetTrackRawCallback(track, cb, userdata));
6952}
6953
6982{
6983 SetTrackRawCallback(track, cb.wrapper, cb.data);
6984}
6985
6986inline void Track::SetRawCallback(TrackMixCallback cb, void* userdata)
6987{
6988 SDL::SetTrackRawCallback(get(), cb, userdata);
6989}
6990
6992{
6994}
6995
7030 void* userdata)
7031{
7032 CheckError(MIX_SetTrackCookedCallback(track, cb, userdata));
7033}
7034
7066{
7067 SetTrackCookedCallback(track, cb.wrapper, cb.data);
7068}
7069
7070inline void Track::SetCookedCallback(TrackMixCallback cb, void* userdata)
7071{
7072 SDL::SetTrackCookedCallback(get(), cb, userdata);
7073}
7074
7079
7107 void* userdata)
7108{
7109 CheckError(MIX_SetGroupPostMixCallback(group, cb, userdata));
7110}
7111
7136{
7137 SetGroupPostMixCallback(group, cb.wrapper, cb.data);
7138}
7139
7140inline void Group::SetPostMixCallback(GroupMixCallback cb, void* userdata)
7141{
7142 SDL::SetGroupPostMixCallback(get(), cb, userdata);
7143}
7144
7169 PostMixCallback cb,
7170 void* userdata)
7171{
7172 CheckError(MIX_SetPostMixCallback(mixer, cb, userdata));
7173}
7174
7197{
7198 SetPostMixCallback(mixer, cb.wrapper, cb.data);
7199}
7200
7201inline void Mixer::SetPostMixCallback(PostMixCallback cb, void* userdata)
7202{
7203 SDL::SetPostMixCallback(get(), cb, userdata);
7204}
7205
7207{
7209}
7210
7262inline int Generate(MixerRef mixer, TargetBytes buffer)
7263{
7264 return CheckError(
7265 MIX_Generate(mixer, buffer.data(), narrowS32(buffer.size_bytes())), -1);
7266}
7267
7269{
7270 return SDL::Generate(get(), std::move(buffer));
7271}
7272
7288struct AudioDecoder : ResourceBase<AudioDecoderRaw>
7289{
7291
7299 constexpr explicit AudioDecoder(AudioDecoderRaw resource) noexcept
7300 : ResourceBase(resource)
7301 {
7302 }
7303
7305 constexpr AudioDecoder(const AudioDecoder& other) = delete;
7306
7308 constexpr AudioDecoder(AudioDecoder&& other) noexcept
7309 : AudioDecoder(other.release())
7310 {
7311 }
7312
7313 constexpr AudioDecoder(const AudioDecoderRef& other) = delete;
7314
7315 constexpr AudioDecoder(AudioDecoderRef&& other) = delete;
7316
7350 AudioDecoder(StringParam path, PropertiesRef props = nullptr);
7351
7388 bool closeio = false,
7389 PropertiesRef props = nullptr);
7390
7392 ~AudioDecoder() { MIX_DestroyAudioDecoder(get()); }
7393
7395 constexpr AudioDecoder& operator=(AudioDecoder&& other) noexcept
7396 {
7397 swap(*this, other);
7398 return *this;
7399 }
7400
7402 AudioDecoder& operator=(const AudioDecoder& other) = delete;
7403
7413 void Destroy();
7414
7438
7454 void GetFormat(AudioSpec* spec);
7455
7476 int DecodeAudio(TargetBytes buffer, const AudioSpec& spec);
7477};
7478
7513 PropertiesRef props = nullptr)
7514{
7515 return AudioDecoder(std::move(path), props);
7516}
7517
7519 : AudioDecoder(MIX_CreateAudioDecoder(path, props))
7520{
7521}
7522
7524 bool closeio,
7525 PropertiesRef props)
7526 : AudioDecoder(MIX_CreateAudioDecoder_IO(io, closeio, props))
7527{
7528}
7529
7566 bool closeio = false,
7567 PropertiesRef props = nullptr)
7568{
7569 return AudioDecoder(io, closeio, props);
7570}
7571
7583inline void DestroyAudioDecoder(AudioDecoderRaw audiodecoder)
7584{
7585 MIX_DestroyAudioDecoder(audiodecoder);
7586}
7587
7589
7614{
7615 return CheckError(MIX_GetAudioDecoderProperties(audiodecoder));
7616}
7617
7622
7639inline void GetAudioDecoderFormat(AudioDecoderRef audiodecoder, AudioSpec* spec)
7640{
7641 CheckError(MIX_GetAudioDecoderFormat(audiodecoder, spec));
7642}
7643
7645{
7647}
7648
7669inline int DecodeAudio(AudioDecoderRef audiodecoder,
7670 TargetBytes buffer,
7671 const AudioSpec& spec)
7672{
7673 return CheckError(
7674 MIX_DecodeAudio(
7675 audiodecoder, buffer.data(), narrowS32(buffer.size_bytes()), &spec),
7676 -1);
7677}
7678
7679inline int AudioDecoder::DecodeAudio(TargetBytes buffer, const AudioSpec& spec)
7680{
7681 return SDL::DecodeAudio(get(), std::move(buffer), spec);
7682}
7683
7685
7686} // namespace SDL
7687
7688#endif /* defined(SDL3PP_ENABLE_MIXER) || defined(SDL3PP_DOC) */
7689
7690#endif /* SDL3PP_MIXER_H_ */
Lock a mixer by obtaining its internal mutex.
Definition SDL3pp_mixer.h:1382
MixerRef resource() const
Get the reference to locked resource.
Definition SDL3pp_mixer.h:1497
MixerLock(MixerLock &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:1435
void release()
Releases the lock without unlocking.
Definition SDL3pp_mixer.h:1500
~MixerLock()
Unlock a mixer previously locked by a call to Mixer.Lock().
Definition SDL3pp_mixer.h:1460
MixerLock(const MixerLock &other)=delete
Copy constructor.
MixerLock & operator=(MixerLock &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:1465
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 get() const noexcept
Definition SDL3pp_resource.h:53
constexpr RawPointer release() noexcept
Definition SDL3pp_resource.h:56
constexpr ResourceBase(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:29
Source byte stream.
Definition SDL3pp_strings.h:237
constexpr size_t size_bytes() const
Retrieves contained size in bytes.
Definition SDL3pp_strings.h:301
constexpr const char * data() const
Retrieves contained data.
Definition SDL3pp_strings.h:304
Helpers to use C++ strings parameters.
Definition SDL3pp_strings.h:43
Target byte stream.
Definition SDL3pp_strings.h:323
constexpr char * data() const
Retrieves contained data.
Definition SDL3pp_strings.h:409
constexpr size_t size_bytes() const
Retrieves contained size in bytes.
Definition SDL3pp_strings.h:406
#define SDL_assert_paranoid(condition)
An assertion test that is performed only when built with paranoid settings.
Definition SDL3pp_assert.h:383
ResourceRef< AudioStream > AudioStreamRef
Reference for AudioStream.
Definition SDL3pp_audio.h:146
ResourceRef< AudioDevice > AudioDeviceRef
Reference for AudioDevice.
Definition SDL3pp_audio.h:133
SDL_AudioSpec AudioSpec
Format specifier for audio data.
Definition SDL3pp_audio.h:198
constexpr void CheckError(bool result)
Check and throw if returned value from SDL is an error.
Definition SDL3pp_error.h:199
ResourceRef< IOStream > IOStreamRef
Reference for IOStream.
Definition SDL3pp_iostream.h:34
void Quit()
Clean up all initialized subsystems.
Definition SDL3pp_init.h:329
ResourceRef< Properties > PropertiesRef
Reference for Properties.
Definition SDL3pp_properties.h:54
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:5088
void(SDLCALL *)(void *userdata, TrackRaw track) TrackStoppedCallback
A callback that fires when a Track is stopped.
Definition SDL3pp_mixer.h:1985
MakeFrontCallback< void(TrackRaw track)> TrackStoppedCB
A callback that fires when a Track is stopped.
Definition SDL3pp_mixer.h:2009
Audio LoadRawAudio(MixerRef mixer, SourceBytes data, const AudioSpec &spec)
Load raw PCM data from a memory buffer.
Definition SDL3pp_mixer.h:4479
void SetTrackStereo(TrackRef track, const StereoGains &gains)
Force a track to stereo output, with optionally left/right panning.
Definition SDL3pp_mixer.h:6617
void ResumeAllTracks()
Resume all currently-paused tracks.
Definition SDL3pp_mixer.h:6171
void SetTrackIOStream(TrackRef track, IOStreamRef io, bool closeio=false)
Set a Track's input to an IOStream.
Definition SDL3pp_mixer.h:5020
Audio LoadAudioWithProperties(PropertiesRef props)
Load audio for playback through a collection of properties.
Definition SDL3pp_mixer.h:4362
Audio LoadAudio(StringParam path, bool predecode)
Load audio for playback from a file.
Definition SDL3pp_mixer.h:4242
void Destroy()
Free a mixer.
Definition SDL3pp_mixer.h:3940
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:7028
MixerRef GetMixer()
Get the Mixer that owns a Group.
Definition SDL3pp_mixer.h:6805
ResourceRef< Group > GroupRef
Reference for Group.
Definition SDL3pp_mixer.h:158
PropertiesRef GetAudioDecoderProperties(AudioDecoderRef audiodecoder)
Get the properties associated with a AudioDecoder.
Definition SDL3pp_mixer.h:7613
void SetPlaybackPosition(Sint64 frames)
Seek a playing track to a new position in its input.
Definition SDL3pp_mixer.h:5253
float GetTrackFrequencyRatio(TrackRef track)
Query the frequency ratio of a track.
Definition SDL3pp_mixer.h:6531
void GetMixerFormat(MixerRef mixer, AudioSpec *spec)
Get the audio format a mixer is generating.
Definition SDL3pp_mixer.h:4008
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:3470
void SetPostMixCallback(GroupMixCallback cb, void *userdata)
Set a callback that fires when a mixer group has completed mixing.
Definition SDL3pp_mixer.h:7140
MIX_Group * GroupRaw
Alias to raw representation for Group.
Definition SDL3pp_mixer.h:151
void SetTagGain(MixerRef mixer, StringParam tag, float gain)
Set the gain control of all tracks with a specific tag.
Definition SDL3pp_mixer.h:6400
void SetStoppedCallback(TrackStoppedCallback cb, void *userdata)
Set a callback that fires when a Track is stopped.
Definition SDL3pp_mixer.h:6908
void SetTrackPlaybackPosition(TrackRef track, Sint64 frames)
Seek a playing track to a new position in its input.
Definition SDL3pp_mixer.h:5248
void UntagTrack(TrackRef track, StringParam tag)
Remove an arbitrary tag from a track.
Definition SDL3pp_mixer.h:5155
float GetFrequencyRatio()
Query the frequency ratio of a track.
Definition SDL3pp_mixer.h:6536
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:2047
void Unlock(MixerLock &&lock)
Unlock a mixer previously locked by a call to Mixer.Lock().
Definition SDL3pp_mixer.h:4095
Milliseconds FramesToMS(int sample_rate, Sint64 frames)
Convert sample frames, at a specific sample rate, to milliseconds.
Definition SDL3pp_mixer.h:5648
void PauseTag(MixerRef mixer, StringParam tag)
Pause all tracks with a specific tag.
Definition SDL3pp_mixer.h:6110
int DecodeAudio(TargetBytes buffer, const AudioSpec &spec)
Decode more audio from a AudioDecoder.
Definition SDL3pp_mixer.h:7679
void PlayTrack(TrackRef track, PropertiesRef options=nullptr)
Start (or restart) mixing a track for playback.
Definition SDL3pp_mixer.h:5763
Sint64 TrackMSToFrames(TrackRef track, Milliseconds ms)
Convert milliseconds to sample frames for a track's current format.
Definition SDL3pp_mixer.h:5500
void Untag(StringParam tag)
Remove an arbitrary tag from a track.
Definition SDL3pp_mixer.h:5160
OwnArray< char * > GetTrackTags(TrackRef track)
Get the tags currently associated with a track.
Definition SDL3pp_mixer.h:5178
void ResumeTag(MixerRef mixer, StringParam tag)
Resume all tracks with a specific tag.
Definition SDL3pp_mixer.h:6198
Audio CreateSineWaveAudio(MixerRef mixer, int hz, float amplitude, Sint64 ms)
Create a Audio that generates a sinewave.
Definition SDL3pp_mixer.h:4583
void SetTrackStoppedCallback(TrackRef track, TrackStoppedCallback cb, void *userdata)
Set a callback that fires when a Track is stopped.
Definition SDL3pp_mixer.h:6869
Sint64 GetPlaybackPosition()
Get the current input position of a playing track.
Definition SDL3pp_mixer.h:5286
const char * GetAudioDecoder(int index)
Report the name of a specific audio decoders.
Definition SDL3pp_mixer.h:3820
void GetAudioDecoderFormat(AudioDecoderRef audiodecoder, AudioSpec *spec)
Query the initial audio format of a AudioDecoder.
Definition SDL3pp_mixer.h:7639
Sint64 GetFadeFrames()
Query whether a given track is fading.
Definition SDL3pp_mixer.h:5318
MixerRef GetMixer()
Get the Mixer that owns a Track.
Definition SDL3pp_mixer.h:4880
void DestroyAudioDecoder(AudioDecoderRaw audiodecoder)
Destroy the specified audio decoder.
Definition SDL3pp_mixer.h:7583
void UnlockMixer(MixerRef mixer)
Unlock a mixer previously locked by a call to Mixer.Lock().
Definition SDL3pp_mixer.h:4093
Track CreateTrack(MixerRef mixer)
Create a new track on a mixer.
Definition SDL3pp_mixer.h:4804
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:2089
bool Resume()
Resume a currently-paused track.
Definition SDL3pp_mixer.h:6144
void SetGroupPostMixCallback(GroupRef group, GroupMixCallback cb, void *userdata)
Set a callback that fires when a mixer group has completed mixing.
Definition SDL3pp_mixer.h:7105
void SetFrequencyRatio(float ratio)
Set a mixer's master frequency ratio.
Definition SDL3pp_mixer.h:6442
MixerLock(MixerRef resource)
Lock a mixer by obtaining its internal mutex.
Definition SDL3pp_mixer.h:4065
void SetTrackAudioStream(TrackRef track, AudioStreamRef stream)
Set a Track's input to an AudioStream.
Definition SDL3pp_mixer.h:4963
void SetGain(float gain)
Set a mixer's master gain control.
Definition SDL3pp_mixer.h:6292
Audio LoadRawAudio_IO(MixerRef mixer, IOStreamRef io, const AudioSpec &spec, bool closeio=false)
Load raw PCM data from an IOStream.
Definition SDL3pp_mixer.h:4430
bool Playing()
Query if a track is currently playing.
Definition SDL3pp_mixer.h:6233
bool PlayAudio(AudioRef audio)
Play a Audio from start to finish without any management.
Definition SDL3pp_mixer.h:5904
OwnArray< TrackRef > GetTaggedTracks(StringParam tag)
Get all tracks with a specific tag.
Definition SDL3pp_mixer.h:5208
int Generate(MixerRef mixer, TargetBytes buffer)
Generate mixer output when not driving an audio device.
Definition SDL3pp_mixer.h:7262
void SetTrackOutputChannelMap(TrackRef track, std::span< const int > chmap)
Set the current output channel map of a track.
Definition SDL3pp_mixer.h:6576
AudioRef GetAudio()
Query the Audio assigned to a track.
Definition SDL3pp_mixer.h:5413
Audio LoadAudio_IO(MixerRef mixer, IOStreamRef io, bool predecode, bool closeio=false)
Load audio for playback from an IOStream.
Definition SDL3pp_mixer.h:4164
MIX_AudioDecoder * AudioDecoderRaw
Alias to raw representation for AudioDecoder.
Definition SDL3pp_mixer.h:164
void DestroyMixer(MixerRaw mixer)
Free a mixer.
Definition SDL3pp_mixer.h:3938
AudioStreamRef GetTrackAudioStream(TrackRef track)
Query the AudioStream assigned to a track.
Definition SDL3pp_mixer.h:5436
void SetGroup(GroupRef group)
Assign a track to a mixing group.
Definition SDL3pp_mixer.h:6835
Milliseconds FramesToMS(Sint64 frames)
Convert sample frames for a Audio's format to milliseconds.
Definition SDL3pp_mixer.h:5601
void SetTrackRawCallback(TrackRef track, TrackMixCallback cb, void *userdata)
Set a callback that fires when a Track has initial decoded audio.
Definition SDL3pp_mixer.h:6947
void Play(PropertiesRef options=nullptr)
Start (or restart) mixing a track for playback.
Definition SDL3pp_mixer.h:5768
Milliseconds AudioFramesToMS(AudioRef audio, Sint64 frames)
Convert sample frames for a Audio's format to milliseconds.
Definition SDL3pp_mixer.h:5596
TrackRef CreateTrack()
Create a new track on a mixer.
Definition SDL3pp_mixer.h:4806
void SetTrackAudio(TrackRef track, AudioRef audio)
Set a Track's input to a Audio.
Definition SDL3pp_mixer.h:4913
Audio LoadRawAudio(SourceBytes data, const AudioSpec &spec)
Load raw PCM data from a memory buffer.
Definition SDL3pp_mixer.h:4486
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:6021
void SetFrequencyRatio(float ratio)
Change the frequency ratio of a track.
Definition SDL3pp_mixer.h:6501
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:209
void PauseAllTracks()
Pause all currently-playing tracks.
Definition SDL3pp_mixer.h:6082
float GetGain()
Get a track's gain control.
Definition SDL3pp_mixer.h:6364
PropertiesRef GetProperties()
Get the properties associated with a Audio.
Definition SDL3pp_mixer.h:4646
void SetTagGain(StringParam tag, float gain)
Set the gain control of all tracks with a specific tag.
Definition SDL3pp_mixer.h:6405
float GetGain()
Get a mixer's master gain control.
Definition SDL3pp_mixer.h:6312
Sint64 MSToFrames(int sample_rate, Milliseconds ms)
Convert milliseconds to sample frames at a specific sample rate.
Definition SDL3pp_mixer.h:5622
float GetFrequencyRatio()
Get a mixer's master frequency ratio.
Definition SDL3pp_mixer.h:6468
constexpr Sint64 DURATION_INFINITE
Infinite duration, when the audio never runs out of sound to generate.
Definition SDL3pp_mixer.h:4730
void SetStereo(const StereoGains &gains)
Force a track to stereo output, with optionally left/right panning.
Definition SDL3pp_mixer.h:6622
bool ResumeTrack(TrackRef track)
Resume a currently-paused track.
Definition SDL3pp_mixer.h:6142
void DestroyAudio(AudioRaw audio)
Destroy the specified audio.
Definition SDL3pp_mixer.h:4778
PropertiesRef GetProperties()
Get the properties associated with a mixer.
Definition SDL3pp_mixer.h:3964
bool StopTrack(TrackRef track, Sint64 fade_out_frames)
Halt a currently-playing track, possibly fading out over time.
Definition SDL3pp_mixer.h:5941
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:5080
bool PauseTrack(TrackRef track)
Pause a currently-playing track.
Definition SDL3pp_mixer.h:6053
float GetTrackGain(TrackRef track)
Get a track's gain control.
Definition SDL3pp_mixer.h:6362
void SetPostMixCallback(MixerRef mixer, PostMixCallback cb, void *userdata)
Set a callback that fires when all mixing has completed.
Definition SDL3pp_mixer.h:7168
void Destroy()
Destroy a mixing group.
Definition SDL3pp_mixer.h:6758
PropertiesRef GetTrackProperties(TrackRef track)
Get the properties associated with a track.
Definition SDL3pp_mixer.h:4852
Sint64 GetRemaining()
Return the number of sample frames remaining to be mixed in a track.
Definition SDL3pp_mixer.h:5476
ResourceRef< Audio > AudioRef
Reference for Audio.
Definition SDL3pp_mixer.h:132
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:249
void Destroy()
Destroy the specified audio decoder.
Definition SDL3pp_mixer.h:7588
MIX_Track * TrackRaw
Alias to raw representation for Track.
Definition SDL3pp_mixer.h:138
void SetAudio(AudioRef audio)
Set a Track's input to a Audio.
Definition SDL3pp_mixer.h:4918
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:4540
float GetMixerGain(MixerRef mixer)
Get a mixer's master gain control.
Definition SDL3pp_mixer.h:6310
int GetNumAudioDecoders()
Report the number of audio decoders available for use.
Definition SDL3pp_mixer.h:3789
void SetCookedCallback(TrackMixCallback cb, void *userdata)
Set a callback that fires when the mixer has transformed a track's audio.
Definition SDL3pp_mixer.h:7070
Sint64 GetAudioDuration(AudioRef audio)
Get the length of a Audio's playback in sample frames.
Definition SDL3pp_mixer.h:4719
PropertiesRef GetProperties()
Get the properties associated with a track.
Definition SDL3pp_mixer.h:4857
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:3870
void StopTag(StringParam tag, Sint64 fade_out_ms)
Halt all tracks with a specific tag, possibly fading out over time.
Definition SDL3pp_mixer.h:6026
void StopAllTracks(MixerRef mixer, Sint64 fade_out_ms)
Halt all currently-playing tracks, possibly fading out over time.
Definition SDL3pp_mixer.h:5980
Sint64 GetTrackRemaining(TrackRef track)
Return the number of sample frames remaining to be mixed in a track.
Definition SDL3pp_mixer.h:5471
void TagTrack(TrackRef track, StringParam tag)
Assign an arbitrary tag to a track.
Definition SDL3pp_mixer.h:5122
ResourceRef< AudioDecoder > AudioDecoderRef
Reference for AudioDecoder.
Definition SDL3pp_mixer.h:171
PropertiesRef GetAudioProperties(AudioRef audio)
Get the properties associated with a Audio.
Definition SDL3pp_mixer.h:4641
Audio LoadAudio(MixerRef mixer, StringParam path, bool predecode)
Load audio for playback from a file.
Definition SDL3pp_mixer.h:4237
void PauseAllTracks(MixerRef mixer)
Pause all currently-playing tracks.
Definition SDL3pp_mixer.h:6077
ResourceRef< Mixer > MixerRef
Reference for Mixer.
Definition SDL3pp_mixer.h:119
void GetFormat(AudioSpec *spec)
Query the initial audio format of a Audio.
Definition SDL3pp_mixer.h:4753
void GetFormat(AudioSpec *spec)
Query the initial audio format of a AudioDecoder.
Definition SDL3pp_mixer.h:7644
void Tag(StringParam tag)
Assign an arbitrary tag to a track.
Definition SDL3pp_mixer.h:5127
int GetLoops()
Query how many loops remain for a given track.
Definition SDL3pp_mixer.h:5348
AudioDecoder CreateAudioDecoder_IO(IOStreamRef io, bool closeio=false, PropertiesRef props=nullptr)
Create a AudioDecoder from an IOStream.
Definition SDL3pp_mixer.h:7565
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:4303
Audio LoadAudio_IO(IOStreamRef io, bool predecode, bool closeio=false)
Load audio for playback from an IOStream.
Definition SDL3pp_mixer.h:4172
Sint64 AudioMSToFrames(AudioRef audio, Milliseconds ms)
Convert milliseconds to sample frames for a Audio's format.
Definition SDL3pp_mixer.h:5564
void LockMixer(MixerRef mixer)
Lock a mixer by obtaining its internal mutex.
Definition SDL3pp_mixer.h:4061
PropertiesRef GetMixerProperties(MixerRef mixer)
Get the properties associated with a mixer.
Definition SDL3pp_mixer.h:3959
float GetMixerFrequencyRatio(MixerRef mixer)
Get a mixer's master frequency ratio.
Definition SDL3pp_mixer.h:6463
void SetTrackFrequencyRatio(TrackRef track, float ratio)
Change the frequency ratio of a track.
Definition SDL3pp_mixer.h:6496
bool Stop(Sint64 fade_out_frames)
Halt a currently-playing track, possibly fading out over time.
Definition SDL3pp_mixer.h:5946
bool TrackPlaying(TrackRef track)
Query if a track is currently playing.
Definition SDL3pp_mixer.h:6231
Milliseconds TrackFramesToMS(TrackRef track, Sint64 frames)
Convert sample frames for a track's current format to milliseconds.
Definition SDL3pp_mixer.h:5535
void reset()
Unlock a mixer previously locked by a call to Mixer.Lock().
Definition SDL3pp_mixer.h:4101
bool Paused()
Query if a track is currently paused.
Definition SDL3pp_mixer.h:6260
AudioDecoder CreateAudioDecoder(StringParam path, PropertiesRef props=nullptr)
Create a AudioDecoder from a path on the filesystem.
Definition SDL3pp_mixer.h:7512
Group CreateGroup(MixerRef mixer)
Create a mixing group.
Definition SDL3pp_mixer.h:6733
Sint64 GetTrackFadeFrames(TrackRef track)
Query whether a given track is fading.
Definition SDL3pp_mixer.h:5313
MixerLock Lock()
Lock a mixer by obtaining its internal mutex.
Definition SDL3pp_mixer.h:4063
Audio LoadAudioNoCopy(SourceBytes data, bool free_when_done)
Load audio for playback from a memory buffer without making a copy.
Definition SDL3pp_mixer.h:4311
PropertiesRef GetGroupProperties(GroupRef group)
Get the properties associated with a group.
Definition SDL3pp_mixer.h:6777
void SetRawCallback(TrackMixCallback cb, void *userdata)
Set a callback that fires when a Track has initial decoded audio.
Definition SDL3pp_mixer.h:6986
void SetMixerFrequencyRatio(MixerRef mixer, float ratio)
Set a mixer's master frequency ratio.
Definition SDL3pp_mixer.h:6437
constexpr Sint64 DURATION_UNKNOWN
Unknown duration, when the length of the audio can't be determined.
Definition SDL3pp_mixer.h:4727
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:4531
void SetTrack3DPosition(TrackRef track, const Point3D &position)
Set a track's position in 3D space.
Definition SDL3pp_mixer.h:6669
MIX_Point3D Point3D
3D coordinates for Track.Set3DPosition.
Definition SDL3pp_mixer.h:1962
MIX_Audio * AudioRaw
Alias to raw representation for Audio.
Definition SDL3pp_mixer.h:125
bool PlayAudio(MixerRef mixer, AudioRef audio)
Play a Audio from start to finish without any management.
Definition SDL3pp_mixer.h:5899
void ResumeAllTracks(MixerRef mixer)
Resume all currently-paused tracks.
Definition SDL3pp_mixer.h:6166
void DestroyGroup(GroupRaw group)
Destroy a mixing group.
Definition SDL3pp_mixer.h:6756
void SetTrackGroup(TrackRef track, GroupRef group)
Assign a track to a mixing group.
Definition SDL3pp_mixer.h:6830
Milliseconds FramesToMS(Sint64 frames)
Convert sample frames for a track's current format to milliseconds.
Definition SDL3pp_mixer.h:5540
MixerRef GetTrackMixer(TrackRef track)
Get the Mixer that owns a Track.
Definition SDL3pp_mixer.h:4875
MIX_Mixer * MixerRaw
Alias to raw representation for Mixer.
Definition SDL3pp_mixer.h:112
Audio CreateSineWaveAudio(int hz, float amplitude, Sint64 ms)
Create a Audio that generates a sinewave.
Definition SDL3pp_mixer.h:4591
void PlayTag(MixerRef mixer, StringParam tag, PropertiesRef options)
Start (or restart) mixing all tracks with a specific tag for playback.
Definition SDL3pp_mixer.h:5859
void Set3DPosition(const Point3D &position)
Set a track's position in 3D space.
Definition SDL3pp_mixer.h:6674
void SetPostMixCallback(PostMixCallback cb, void *userdata)
Set a callback that fires when all mixing has completed.
Definition SDL3pp_mixer.h:7201
ResourceRef< Track > TrackRef
Reference for Track.
Definition SDL3pp_mixer.h:145
int Generate(TargetBytes buffer)
Generate mixer output when not driving an audio device.
Definition SDL3pp_mixer.h:7268
PropertiesRef GetProperties()
Get the properties associated with a group.
Definition SDL3pp_mixer.h:6782
MixerRef GetGroupMixer(GroupRef group)
Get the Mixer that owns a Group.
Definition SDL3pp_mixer.h:6800
bool TrackPaused(TrackRef track)
Query if a track is currently paused.
Definition SDL3pp_mixer.h:6258
void SetMixerGain(MixerRef mixer, float gain)
Set a mixer's master gain control.
Definition SDL3pp_mixer.h:6287
void PlayTag(StringParam tag, PropertiesRef options)
Start (or restart) mixing all tracks with a specific tag for playback.
Definition SDL3pp_mixer.h:5864
void GetFormat(AudioSpec *spec)
Get the audio format a mixer is generating.
Definition SDL3pp_mixer.h:4013
void SetTrackGain(TrackRef track, float gain)
Set a track's gain control.
Definition SDL3pp_mixer.h:6339
Audio LoadRawAudio_IO(IOStreamRef io, const AudioSpec &spec, bool closeio=false)
Load raw PCM data from an IOStream.
Definition SDL3pp_mixer.h:4438
AudioStreamRef GetAudioStream()
Query the AudioStream assigned to a track.
Definition SDL3pp_mixer.h:5441
int GetTrackLoops(TrackRef track)
Query how many loops remain for a given track.
Definition SDL3pp_mixer.h:5346
Sint64 GetDuration()
Get the length of a Audio's playback in sample frames.
Definition SDL3pp_mixer.h:4724
Sint64 MSToFrames(Milliseconds ms)
Convert milliseconds to sample frames for a Audio's format.
Definition SDL3pp_mixer.h:5569
OwnArray< char * > GetTags()
Get the tags currently associated with a track.
Definition SDL3pp_mixer.h:5185
void SetIOStream(IOStreamRef io, bool closeio=false)
Set a Track's input to an IOStream.
Definition SDL3pp_mixer.h:5027
Sint64 GetTrackPlaybackPosition(TrackRef track)
Get the current input position of a playing track.
Definition SDL3pp_mixer.h:5281
void DestroyTrack(TrackRaw track)
Destroy the specified track.
Definition SDL3pp_mixer.h:4831
void SetTrackLoops(TrackRef track, int num_loops)
Change the number of times a currently-playing track will loop.
Definition SDL3pp_mixer.h:5378
void PauseTag(StringParam tag)
Pause all tracks with a specific tag.
Definition SDL3pp_mixer.h:6115
Point3D GetTrack3DPosition(TrackRef track)
Get a track's current position in 3D space.
Definition SDL3pp_mixer.h:6695
Mixer CreateMixer(const AudioSpec &spec)
Create a mixer that generates audio to a memory buffer.
Definition SDL3pp_mixer.h:3913
void SetLoops(int num_loops)
Change the number of times a currently-playing track will loop.
Definition SDL3pp_mixer.h:5383
void StopAllTracks(Sint64 fade_out_ms)
Halt all currently-playing tracks, possibly fading out over time.
Definition SDL3pp_mixer.h:5985
void GetAudioFormat(AudioRef audio, AudioSpec *spec)
Query the initial audio format of a Audio.
Definition SDL3pp_mixer.h:4748
PropertiesRef GetProperties()
Get the properties associated with a AudioDecoder.
Definition SDL3pp_mixer.h:7618
MIX_StereoGains StereoGains
A set of per-channel gains for tracks using Track.SetStereo().
Definition SDL3pp_mixer.h:1950
OwnArray< TrackRef > GetTaggedTracks(MixerRef mixer, StringParam tag)
Get all tracks with a specific tag.
Definition SDL3pp_mixer.h:5201
void SetOutputChannelMap(std::span< const int > chmap)
Set the current output channel map of a track.
Definition SDL3pp_mixer.h:6582
bool Pause()
Pause a currently-playing track.
Definition SDL3pp_mixer.h:6055
void Destroy()
Destroy the specified audio.
Definition SDL3pp_mixer.h:4780
void ResumeTag(StringParam tag)
Resume all tracks with a specific tag.
Definition SDL3pp_mixer.h:6203
Point3D Get3DPosition()
Get a track's current position in 3D space.
Definition SDL3pp_mixer.h:6702
GroupRef CreateGroup()
Create a mixing group.
Definition SDL3pp_mixer.h:6735
void SetGain(float gain)
Set a track's gain control.
Definition SDL3pp_mixer.h:6344
void Destroy()
Destroy the specified track.
Definition SDL3pp_mixer.h:4833
int DecodeAudio(AudioDecoderRef audiodecoder, TargetBytes buffer, const AudioSpec &spec)
Decode more audio from a AudioDecoder.
Definition SDL3pp_mixer.h:7669
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:3431
void SetAudioStream(AudioStreamRef stream)
Set a Track's input to an AudioStream.
Definition SDL3pp_mixer.h:4968
Sint64 MSToFrames(Milliseconds ms)
Convert milliseconds to sample frames for a track's current format.
Definition SDL3pp_mixer.h:5505
AudioRef GetTrackAudio(TrackRef track)
Query the Audio assigned to a track.
Definition SDL3pp_mixer.h:5408
::Sint64 Sint64
A signed 64-bit integer type.
Definition SDL3pp_stdinc.h:305
std::chrono::milliseconds Milliseconds
Duration in Miliseconds (Uint32).
Definition SDL3pp_stdinc.h:335
Metadata for audio.
Definition SDL3pp_mixer.h:4656
constexpr auto TOTAL_TRACKS_NUMBER
Number for total tracks.
Definition SDL3pp_mixer.h:4673
constexpr auto DURATION_FRAMES_NUMBER
Number for duration frames.
Definition SDL3pp_mixer.h:4679
constexpr auto YEAR_NUMBER
Number for year.
Definition SDL3pp_mixer.h:4676
constexpr auto ARTIST_STRING
String for artist.
Definition SDL3pp_mixer.h:4661
constexpr auto TITLE_STRING
String for title.
Definition SDL3pp_mixer.h:4658
constexpr auto COPYRIGHT_STRING
String for copyright.
Definition SDL3pp_mixer.h:4667
constexpr auto DURATION_INFINITE_BOOLEAN
Enable duration infinite.
Definition SDL3pp_mixer.h:4682
constexpr auto TRACK_NUMBER
Number for track.
Definition SDL3pp_mixer.h:4670
constexpr auto ALBUM_STRING
String for album.
Definition SDL3pp_mixer.h:4664
Properties for configuring audio loading.
Definition SDL3pp_mixer.h:4372
constexpr auto DECODER_STRING
String for decoder.
Definition SDL3pp_mixer.h:4391
constexpr auto LOAD_CLOSEIO_BOOLEAN
Load closeio enabled.
Definition SDL3pp_mixer.h:4377
constexpr auto LOAD_IOSTREAM_POINTER
Pointer to load iostream.
Definition SDL3pp_mixer.h:4374
constexpr auto LOAD_PREDECODE_BOOLEAN
Load predecode enabled.
Definition SDL3pp_mixer.h:4380
constexpr auto LOAD_SKIP_METADATA_TAGS_BOOLEAN
Enable load skip metadata tags.
Definition SDL3pp_mixer.h:4387
constexpr auto LOAD_PREFERRED_MIXER_POINTER
Pointer to load preferred mixer.
Definition SDL3pp_mixer.h:4383
Properties for Mixer.
Definition SDL3pp_mixer.h:3974
Properties that can be used in the options parameter of Track.Play().
Definition SDL3pp_mixer.h:5778
constexpr auto START_MILLISECOND_NUMBER
Number for start millisecond.
Definition SDL3pp_mixer.h:5791
constexpr auto LOOPS_NUMBER
Number for loops.
Definition SDL3pp_mixer.h:5780
constexpr auto MAX_FRAME_NUMBER
Number for max frame.
Definition SDL3pp_mixer.h:5782
constexpr auto HALT_WHEN_EXHAUSTED_BOOLEAN
Halt when exhausted enabled.
Definition SDL3pp_mixer.h:5819
constexpr auto LOOP_START_FRAME_NUMBER
Number for loop start frame.
Definition SDL3pp_mixer.h:5794
constexpr auto FADE_IN_START_GAIN_FLOAT
Float for fade in start gain.
Definition SDL3pp_mixer.h:5808
constexpr auto APPEND_SILENCE_FRAMES_NUMBER
Number for append silence frames.
Definition SDL3pp_mixer.h:5811
constexpr auto FADE_IN_MILLISECONDS_NUMBER
Number for fade in milliseconds.
Definition SDL3pp_mixer.h:5804
constexpr auto FADE_IN_FRAMES_NUMBER
Number for fade in frames.
Definition SDL3pp_mixer.h:5801
constexpr auto START_FRAME_NUMBER
Number for start frame.
Definition SDL3pp_mixer.h:5788
constexpr auto MAX_MILLISECONDS_NUMBER
Number for max milliseconds.
Definition SDL3pp_mixer.h:5785
constexpr auto APPEND_SILENCE_MILLISECONDS_NUMBER
Number for append silence milliseconds.
Definition SDL3pp_mixer.h:5815
constexpr auto LOOP_START_MILLISECOND_NUMBER
Number for loop start millisecond.
Definition SDL3pp_mixer.h:5797
Main include header for the SDL3pp library.
Sint32 narrowS32(T value)
Narrows to Sint32.
Definition SDL3pp_stdinc.h:6257
An opaque object that represents an audio decoder.
Definition SDL3pp_mixer.h:7289
constexpr AudioDecoder(AudioDecoderRaw resource) noexcept
Constructs from raw AudioDecoder.
Definition SDL3pp_mixer.h:7299
constexpr AudioDecoder & operator=(AudioDecoder &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:7395
constexpr ResourceBase(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:29
~AudioDecoder()
Destructor.
Definition SDL3pp_mixer.h:7392
AudioDecoder & operator=(const AudioDecoder &other)=delete
Assignment operator.
constexpr AudioDecoder(AudioDecoder &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:7308
constexpr AudioDecoder(const AudioDecoder &other)=delete
Copy constructor.
An opaque object that represents audio data.
Definition SDL3pp_mixer.h:1520
constexpr Audio(Audio &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:1539
constexpr Audio(AudioRaw resource) noexcept
Constructs from raw Audio.
Definition SDL3pp_mixer.h:1530
constexpr Audio(const Audio &other)=delete
Copy constructor.
Audio & operator=(const Audio &other)=delete
Assignment operator.
constexpr ResourceBase(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:29
constexpr Audio & operator=(Audio &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:1765
~Audio()
Destructor.
Definition SDL3pp_mixer.h:1762
An opaque object that represents a grouping of tracks.
Definition SDL3pp_mixer.h:3491
constexpr Group(const Group &other)=delete
Copy constructor.
~Group()
Destructor.
Definition SDL3pp_mixer.h:3552
constexpr ResourceBase(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:29
constexpr Group & operator=(Group &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:3555
Group & operator=(const Group &other)=delete
Assignment operator.
constexpr Group(GroupRaw resource) noexcept
Constructs from raw Group.
Definition SDL3pp_mixer.h:3501
constexpr Group(Group &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:3510
Definition SDL3pp_callbackWrapper.h:169
An opaque object that represents a mixer.
Definition SDL3pp_mixer.h:269
constexpr Mixer(MixerRaw resource) noexcept
Constructs from raw Mixer.
Definition SDL3pp_mixer.h:279
constexpr ResourceBase(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:29
constexpr Mixer(Mixer &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:288
Mixer & operator=(const Mixer &other)=delete
Assignment operator.
~Mixer()
Destructor.
Definition SDL3pp_mixer.h:375
constexpr Mixer(const Mixer &other)=delete
Copy constructor.
constexpr Mixer & operator=(Mixer &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:378
A non-owning reference wrapper for a given resource.
Definition SDL3pp_resource.h:156
An opaque object that represents a source of sound output to be mixed.
Definition SDL3pp_mixer.h:2107
constexpr Track & operator=(Track &&other) noexcept
Assignment operator.
Definition SDL3pp_mixer.h:2165
constexpr Track(TrackRaw resource) noexcept
Constructs from raw Track.
Definition SDL3pp_mixer.h:2117
constexpr ResourceBase(RawPointer resource)
Constructs from resource pointer.
Definition SDL3pp_resource.h:29
constexpr Track(Track &&other) noexcept
Move constructor.
Definition SDL3pp_mixer.h:2126
~Track()
Destructor.
Definition SDL3pp_mixer.h:2162
constexpr Track(const Track &other)=delete
Copy constructor.
Track & operator=(const Track &other)=delete
Assignment operator.