from sdl3.SDL import * # type: ignore
from sdl3 import SDL_POINTER
import ctypes, typing
LP_LP_MIX_Track: typing.TypeAlias = SDL_POINTER[SDL_POINTER[MIX_Track]]
LP_SDL_AudioStream: typing.TypeAlias = SDL_POINTER[SDL_AudioStream]
LP_SDL_IOStream: typing.TypeAlias = SDL_POINTER[SDL_IOStream]
LP_MIX_Group: typing.TypeAlias = SDL_POINTER[MIX_Group]
LP_MIX_Track: typing.TypeAlias = SDL_POINTER[MIX_Track]
LP_MIX_Audio: typing.TypeAlias = SDL_POINTER[MIX_Audio]
LP_MIX_Mixer: typing.TypeAlias = SDL_POINTER[MIX_Mixer]
LP_c_int: typing.TypeAlias = SDL_POINTER[ctypes.c_int]
LP_MIX_StereoGains: typing.TypeAlias = SDL_POINTER[MIX_StereoGains]
LP_SDL_AudioSpec: typing.TypeAlias = SDL_POINTER[SDL_AudioSpec]
LP_MIX_AudioDecoder: typing.TypeAlias = SDL_POINTER[MIX_AudioDecoder]
LP_MIX_Point3D: typing.TypeAlias = SDL_POINTER[MIX_Point3D]
LP_c_char_p: typing.TypeAlias = SDL_POINTER[ctypes.c_char_p]
[docs]
def MIX_Version() -> ctypes.c_int:
"""
Get the version of SDL_mixer that is linked against your program.
"""
[docs]
def MIX_Init() -> ctypes.c_bool:
"""
Initialize the SDL_mixer library.
"""
[docs]
def MIX_Quit() -> None:
"""
Deinitialize the SDL_mixer library.
"""
[docs]
def MIX_GetNumAudioDecoders() -> ctypes.c_int:
"""
Report the number of audio decoders available for use.
"""
[docs]
def MIX_GetAudioDecoder(index: ctypes.c_int) -> ctypes.c_char_p:
"""
Report the name of a specific audio decoders.
"""
[docs]
def MIX_CreateMixerDevice(devid: SDL_AudioDeviceID, spec: LP_SDL_AudioSpec) -> LP_MIX_Mixer:
"""
Create a mixer that plays sound directly to an audio device.
"""
[docs]
def MIX_CreateMixer(spec: LP_SDL_AudioSpec) -> LP_MIX_Mixer:
"""
Create a mixer that generates audio to a memory buffer.
"""
[docs]
def MIX_DestroyMixer(mixer: LP_MIX_Mixer) -> None:
"""
Free a mixer.
"""
[docs]
def MIX_GetMixerProperties(mixer: LP_MIX_Mixer) -> SDL_PropertiesID:
"""
Get the properties associated with a mixer.
"""
[docs]
def MIX_LockMixer(mixer: LP_MIX_Mixer) -> None:
"""
Lock a mixer by obtaining its internal mutex.
"""
[docs]
def MIX_UnlockMixer(mixer: LP_MIX_Mixer) -> None:
"""
Unlock a mixer previously locked by a call to MIX_LockMixer().
"""
[docs]
def MIX_LoadAudio_IO(mixer: LP_MIX_Mixer, io: LP_SDL_IOStream, predecode: ctypes.c_bool, closeio: ctypes.c_bool) -> LP_MIX_Audio:
"""
Load audio for playback from an SDL_IOStream.
"""
[docs]
def MIX_LoadAudio(mixer: LP_MIX_Mixer, path: ctypes.c_char_p, predecode: ctypes.c_bool) -> LP_MIX_Audio:
"""
Load audio for playback from a file.
"""
[docs]
def MIX_LoadAudioNoCopy(mixer: LP_MIX_Mixer, data: ctypes.c_void_p, datalen: ctypes.c_size_t, free_when_done: ctypes.c_bool) -> LP_MIX_Audio:
"""
Load audio for playback from a memory buffer without making a copy.
"""
[docs]
def MIX_LoadAudioWithProperties(props: SDL_PropertiesID) -> LP_MIX_Audio:
"""
Load audio for playback through a collection of properties.
"""
[docs]
def MIX_LoadRawAudio_IO(mixer: LP_MIX_Mixer, io: LP_SDL_IOStream, spec: LP_SDL_AudioSpec, closeio: ctypes.c_bool) -> LP_MIX_Audio:
"""
Load raw PCM data from an SDL_IOStream.
"""
[docs]
def MIX_LoadRawAudio(mixer: LP_MIX_Mixer, data: ctypes.c_void_p, datalen: ctypes.c_size_t, spec: LP_SDL_AudioSpec) -> LP_MIX_Audio:
"""
Load raw PCM data from a memory buffer.
"""
[docs]
def MIX_LoadRawAudioNoCopy(mixer: LP_MIX_Mixer, data: ctypes.c_void_p, datalen: ctypes.c_size_t, spec: LP_SDL_AudioSpec, free_when_done: ctypes.c_bool) -> LP_MIX_Audio:
"""
Load raw PCM data from a memory buffer without making a copy.
"""
[docs]
def MIX_CreateSineWaveAudio(mixer: LP_MIX_Mixer, hz: ctypes.c_int, amplitude: ctypes.c_float, ms: ctypes.c_int64) -> LP_MIX_Audio:
"""
Create a MIX_Audio that generates a sinewave.
"""
[docs]
def MIX_GetAudioProperties(audio: LP_MIX_Audio) -> SDL_PropertiesID:
"""
Get the properties associated with a MIX_Audio.
"""
[docs]
def MIX_GetAudioDuration(audio: LP_MIX_Audio) -> ctypes.c_int64:
"""
Get the length of a MIX_Audio's playback in sample frames.
"""
[docs]
def MIX_DestroyAudio(audio: LP_MIX_Audio) -> None:
"""
Destroy the specified audio.
"""
[docs]
def MIX_CreateTrack(mixer: LP_MIX_Mixer) -> LP_MIX_Track:
"""
Create a new track on a mixer.
"""
[docs]
def MIX_DestroyTrack(track: LP_MIX_Track) -> None:
"""
Destroy the specified track.
"""
[docs]
def MIX_GetTrackProperties(track: LP_MIX_Track) -> SDL_PropertiesID:
"""
Get the properties associated with a track.
"""
[docs]
def MIX_GetTrackMixer(track: LP_MIX_Track) -> LP_MIX_Mixer:
"""
Get the MIX_Mixer that owns a MIX_Track.
"""
[docs]
def MIX_SetTrackAudio(track: LP_MIX_Track, audio: LP_MIX_Audio) -> ctypes.c_bool:
"""
Set a MIX_Track's input to a MIX_Audio.
"""
[docs]
def MIX_SetTrackAudioStream(track: LP_MIX_Track, stream: LP_SDL_AudioStream) -> ctypes.c_bool:
"""
Set a MIX_Track's input to an SDL_AudioStream.
"""
[docs]
def MIX_SetTrackIOStream(track: LP_MIX_Track, io: LP_SDL_IOStream, closeio: ctypes.c_bool) -> ctypes.c_bool:
"""
Set a MIX_Track's input to an SDL_IOStream.
"""
[docs]
def MIX_SetTrackRawIOStream(track: LP_MIX_Track, io: LP_SDL_IOStream, spec: LP_SDL_AudioSpec, closeio: ctypes.c_bool) -> ctypes.c_bool:
"""
Set a MIX_Track's input to an SDL_IOStream providing raw PCM data.
"""
[docs]
def MIX_TagTrack(track: LP_MIX_Track, tag: ctypes.c_char_p) -> ctypes.c_bool:
"""
Assign an arbitrary tag to a track.
"""
[docs]
def MIX_UntagTrack(track: LP_MIX_Track, tag: ctypes.c_char_p) -> None:
"""
Remove an arbitrary tag from a track.
"""
[docs]
def MIX_GetTaggedTracks(mixer: LP_MIX_Mixer, tag: ctypes.c_char_p, count: LP_c_int) -> LP_LP_MIX_Track:
"""
Get all tracks with a specific tag.
"""
[docs]
def MIX_SetTrackPlaybackPosition(track: LP_MIX_Track, frames: ctypes.c_int64) -> ctypes.c_bool:
"""
Seek a playing track to a new position in its input.
"""
[docs]
def MIX_GetTrackPlaybackPosition(track: LP_MIX_Track) -> ctypes.c_int64:
"""
Get the current input position of a playing track.
"""
[docs]
def MIX_GetTrackFadeFrames(track: LP_MIX_Track) -> ctypes.c_int64:
"""
Query whether a given track is fading.
"""
[docs]
def MIX_GetTrackLoops(track: LP_MIX_Track) -> ctypes.c_int:
"""
Query how many loops remain for a given track.
"""
[docs]
def MIX_SetTrackLoops(track: LP_MIX_Track, num_loops: ctypes.c_int) -> ctypes.c_bool:
"""
Change the number of times a currently-playing track will loop.
"""
[docs]
def MIX_GetTrackAudio(track: LP_MIX_Track) -> LP_MIX_Audio:
"""
Query the MIX_Audio assigned to a track.
"""
[docs]
def MIX_GetTrackAudioStream(track: LP_MIX_Track) -> LP_SDL_AudioStream:
"""
Query the SDL_AudioStream assigned to a track.
"""
[docs]
def MIX_GetTrackRemaining(track: LP_MIX_Track) -> ctypes.c_int64:
"""
Return the number of sample frames remaining to be mixed in a track.
"""
[docs]
def MIX_TrackMSToFrames(track: LP_MIX_Track, ms: ctypes.c_int64) -> ctypes.c_int64:
"""
Convert milliseconds to sample frames for a track's current format.
"""
[docs]
def MIX_TrackFramesToMS(track: LP_MIX_Track, frames: ctypes.c_int64) -> ctypes.c_int64:
"""
Convert sample frames for a track's current format to milliseconds.
"""
[docs]
def MIX_AudioMSToFrames(audio: LP_MIX_Audio, ms: ctypes.c_int64) -> ctypes.c_int64:
"""
Convert milliseconds to sample frames for a MIX_Audio's format.
"""
[docs]
def MIX_AudioFramesToMS(audio: LP_MIX_Audio, frames: ctypes.c_int64) -> ctypes.c_int64:
"""
Convert sample frames for a MIX_Audio's format to milliseconds.
"""
[docs]
def MIX_MSToFrames(sample_rate: ctypes.c_int, ms: ctypes.c_int64) -> ctypes.c_int64:
"""
Convert milliseconds to sample frames at a specific sample rate.
"""
[docs]
def MIX_FramesToMS(sample_rate: ctypes.c_int, frames: ctypes.c_int64) -> ctypes.c_int64:
"""
Convert sample frames, at a specific sample rate, to milliseconds.
"""
[docs]
def MIX_PlayTrack(track: LP_MIX_Track, options: SDL_PropertiesID) -> ctypes.c_bool:
"""
Start (or restart) mixing a track for playback.
"""
[docs]
def MIX_PlayTag(mixer: LP_MIX_Mixer, tag: ctypes.c_char_p, options: SDL_PropertiesID) -> ctypes.c_bool:
"""
Start (or restart) mixing all tracks with a specific tag for playback.
"""
[docs]
def MIX_PlayAudio(mixer: LP_MIX_Mixer, audio: LP_MIX_Audio) -> ctypes.c_bool:
"""
Play a MIX_Audio from start to finish without any management.
"""
[docs]
def MIX_StopTrack(track: LP_MIX_Track, fade_out_frames: ctypes.c_int64) -> ctypes.c_bool:
"""
Halt a currently-playing track, possibly fading out over time.
"""
[docs]
def MIX_StopAllTracks(mixer: LP_MIX_Mixer, fade_out_ms: ctypes.c_int64) -> ctypes.c_bool:
"""
Halt all currently-playing tracks, possibly fading out over time.
"""
[docs]
def MIX_StopTag(mixer: LP_MIX_Mixer, tag: ctypes.c_char_p, fade_out_ms: ctypes.c_int64) -> ctypes.c_bool:
"""
Halt all tracks with a specific tag, possibly fading out over time.
"""
[docs]
def MIX_PauseTrack(track: LP_MIX_Track) -> ctypes.c_bool:
"""
Pause a currently-playing track.
"""
[docs]
def MIX_PauseAllTracks(mixer: LP_MIX_Mixer) -> ctypes.c_bool:
"""
Pause all currently-playing tracks.
"""
[docs]
def MIX_PauseTag(mixer: LP_MIX_Mixer, tag: ctypes.c_char_p) -> ctypes.c_bool:
"""
Pause all tracks with a specific tag.
"""
[docs]
def MIX_ResumeTrack(track: LP_MIX_Track) -> ctypes.c_bool:
"""
Resume a currently-paused track.
"""
[docs]
def MIX_ResumeAllTracks(mixer: LP_MIX_Mixer) -> ctypes.c_bool:
"""
Resume all currently-paused tracks.
"""
[docs]
def MIX_TrackPlaying(track: LP_MIX_Track) -> ctypes.c_bool:
"""
Query if a track is currently playing.
"""
[docs]
def MIX_TrackPaused(track: LP_MIX_Track) -> ctypes.c_bool:
"""
Query if a track is currently paused.
"""
[docs]
def MIX_SetMixerGain(mixer: LP_MIX_Mixer, gain: ctypes.c_float) -> ctypes.c_bool:
"""
Set a mixer's master gain control.
"""
[docs]
def MIX_GetMixerGain(mixer: LP_MIX_Mixer) -> ctypes.c_float:
"""
Get a mixer's master gain control.
"""
[docs]
def MIX_SetTrackGain(track: LP_MIX_Track, gain: ctypes.c_float) -> ctypes.c_bool:
"""
Set a track's gain control.
"""
[docs]
def MIX_GetTrackGain(track: LP_MIX_Track) -> ctypes.c_float:
"""
Get a track's gain control.
"""
[docs]
def MIX_SetTagGain(mixer: LP_MIX_Mixer, tag: ctypes.c_char_p, gain: ctypes.c_float) -> ctypes.c_bool:
"""
Set the gain control of all tracks with a specific tag.
"""
[docs]
def MIX_SetMixerFrequencyRatio(mixer: LP_MIX_Mixer, ratio: ctypes.c_float) -> ctypes.c_bool:
"""
Set a mixer's master frequency ratio.
"""
[docs]
def MIX_GetMixerFrequencyRatio(mixer: LP_MIX_Mixer) -> ctypes.c_float:
"""
Get a mixer's master frequency ratio.
"""
[docs]
def MIX_SetTrackFrequencyRatio(track: LP_MIX_Track, ratio: ctypes.c_float) -> ctypes.c_bool:
"""
Change the frequency ratio of a track.
"""
[docs]
def MIX_GetTrackFrequencyRatio(track: LP_MIX_Track) -> ctypes.c_float:
"""
Query the frequency ratio of a track.
"""
[docs]
def MIX_SetTrackOutputChannelMap(track: LP_MIX_Track, chmap: LP_c_int, count: ctypes.c_int) -> ctypes.c_bool:
"""
Set the current output channel map of a track.
"""
[docs]
def MIX_SetTrackStereo(track: LP_MIX_Track, gains: LP_MIX_StereoGains) -> ctypes.c_bool:
"""
Force a track to stereo output, with optionally left/right panning.
"""
[docs]
def MIX_SetTrack3DPosition(track: LP_MIX_Track, position: LP_MIX_Point3D) -> ctypes.c_bool:
"""
Set a track's position in 3D space.
"""
[docs]
def MIX_GetTrack3DPosition(track: LP_MIX_Track, position: LP_MIX_Point3D) -> ctypes.c_bool:
"""
Get a track's current position in 3D space.
"""
[docs]
def MIX_CreateGroup(mixer: LP_MIX_Mixer) -> LP_MIX_Group:
"""
Create a mixing group.
"""
[docs]
def MIX_DestroyGroup(group: LP_MIX_Group) -> None:
"""
Destroy a mixing group.
"""
[docs]
def MIX_GetGroupProperties(group: LP_MIX_Group) -> SDL_PropertiesID:
"""
Get the properties associated with a group.
"""
[docs]
def MIX_GetGroupMixer(group: LP_MIX_Group) -> LP_MIX_Mixer:
"""
Get the MIX_Mixer that owns a MIX_Group.
"""
[docs]
def MIX_SetTrackGroup(track: LP_MIX_Track, group: LP_MIX_Group) -> ctypes.c_bool:
"""
Assign a track to a mixing group.
"""
[docs]
def MIX_SetTrackStoppedCallback(track: LP_MIX_Track, cb: MIX_TrackStoppedCallback, userdata: ctypes.c_void_p) -> ctypes.c_bool:
"""
Set a callback that fires when a MIX_Track is stopped.
"""
[docs]
def MIX_SetTrackRawCallback(track: LP_MIX_Track, cb: MIX_TrackMixCallback, userdata: ctypes.c_void_p) -> ctypes.c_bool:
"""
Set a callback that fires when a MIX_Track has initial decoded audio.
"""
[docs]
def MIX_SetTrackCookedCallback(track: LP_MIX_Track, cb: MIX_TrackMixCallback, userdata: ctypes.c_void_p) -> ctypes.c_bool:
"""
Set a callback that fires when the mixer has transformed a track's audio.
"""
[docs]
def MIX_SetGroupPostMixCallback(group: LP_MIX_Group, cb: MIX_GroupMixCallback, userdata: ctypes.c_void_p) -> ctypes.c_bool:
"""
Set a callback that fires when a mixer group has completed mixing.
"""
[docs]
def MIX_SetPostMixCallback(mixer: LP_MIX_Mixer, cb: MIX_PostMixCallback, userdata: ctypes.c_void_p) -> ctypes.c_bool:
"""
Set a callback that fires when all mixing has completed.
"""
[docs]
def MIX_Generate(mixer: LP_MIX_Mixer, buffer: ctypes.c_void_p, buflen: ctypes.c_int) -> ctypes.c_int:
"""
Generate mixer output when not driving an audio device.
"""
[docs]
def MIX_CreateAudioDecoder(path: ctypes.c_char_p, props: SDL_PropertiesID) -> LP_MIX_AudioDecoder:
"""
Create a MIX_AudioDecoder from a path on the filesystem.
"""
[docs]
def MIX_CreateAudioDecoder_IO(io: LP_SDL_IOStream, closeio: ctypes.c_bool, props: SDL_PropertiesID) -> LP_MIX_AudioDecoder:
"""
Create a MIX_AudioDecoder from an SDL_IOStream.
"""
[docs]
def MIX_DestroyAudioDecoder(audiodecoder: LP_MIX_AudioDecoder) -> None:
"""
Destroy the specified audio decoder.
"""
[docs]
def MIX_GetAudioDecoderProperties(audiodecoder: LP_MIX_AudioDecoder) -> SDL_PropertiesID:
"""
Get the properties associated with a MIX_AudioDecoder.
"""
[docs]
def MIX_DecodeAudio(audiodecoder: LP_MIX_AudioDecoder, buffer: ctypes.c_void_p, buflen: ctypes.c_int, spec: LP_SDL_AudioSpec) -> ctypes.c_int:
"""
Decode more audio from a MIX_AudioDecoder.
"""