Types
AudioFormat = uint16
AudioCallback = proc (userdata: pointer; stream: ptr uint8; len: cint) {...}{.cdecl.}
AudioSpec = object freq*: cint format*: AudioFormat channels*: uint8 silence*: uint8 samples*: uint16 padding*: uint16 size*: uint32 callback*: AudioCallback userdata*: pointer
AudioCVT {...}{.packed.} = object needed*: cint src_format*: AudioFormat dst_format*: AudioFormat rate_incr*: cdouble buf*: ptr uint8 len*: cint len_cvt*: cint len_mult*: cint len_ratio*: cdouble filters*: array[10, AudioFilter] filter_index*: cint
AudioFilter = proc (cvt: ptr AudioCVT; format: AudioFormat) {...}{.cdecl.}
AudioStreamPtr = ptr AudioStream
-
(Available since SDL 2.0.7) A pointer to an SDL_AudioStream. Audio streams were added to SDL2 in version 2.0.7, to provide an easier-to-use alternative to SDL_AudioCVT.
See Also:
AudioDeviceID = uint32
AudioStatus {...}{.size: 4.} = enum SDL_AUDIO_STOPPED = 0, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED
Consts
SDL_AUDIO_MASK_BITSIZE = 255'u
SDL_AUDIO_MASK_DATATYPE = 256'u
SDL_AUDIO_MASK_ENDIAN = 4096'u
SDL_AUDIO_MASK_SIGNED = 32768'u
AUDIO_U8 = 0x00000008
AUDIO_S8 = 0x00008008
AUDIO_U16LSB = 0x00000010
AUDIO_S16LSB = 0x00008010
AUDIO_U16MSB = 0x00001010
AUDIO_S16MSB = 0x00009010
AUDIO_U16 = 0x00000010
AUDIO_S16 = 0x00008010
AUDIO_S32LSB = 0x00008020
AUDIO_S32MSB = 0x00009020
AUDIO_S32 = 0x00008020
AUDIO_F32LSB = 0x00008120
AUDIO_F32MSB = 0x00009120
AUDIO_F32 = 0x00008120
SDL_AUDIO_ALLOW_FREQUENCY_CHANGE = 0x00000001
SDL_AUDIO_ALLOW_FORMAT_CHANGE = 0x00000002
SDL_AUDIO_ALLOW_CHANNELS_CHANGE = 0x00000004
SDL_AUDIO_ALLOW_ANY_CHANGE = 7
SDL_MIX_MAXVOLUME = 128
Procs
proc getNumAudioDrivers(): cint {...}{.importc: "SDL_GetNumAudioDrivers".}
proc getAudioDriver(index: cint): cstring {...}{.importc: "SDL_GetAudioDriver".}
proc audioInit(driver_name: cstring): cint {...}{.importc: "SDL_AudioInit".}
proc audioQuit() {...}{.importc: "SDL_AudioQuit".}
proc getCurrentAudioDriver(): cstring {...}{.importc: "SDL_GetCurrentAudioDriver".}
proc openAudio(desired: ptr AudioSpec; obtained: ptr AudioSpec): cint {...}{. importc: "SDL_OpenAudio".}
proc getNumAudioDevices(iscapture: cint): cint {...}{. importc: "SDL_GetNumAudioDevices".}
proc getAudioDeviceName(index: cint; iscapture: cint): cstring {...}{. importc: "SDL_GetAudioDeviceName".}
proc openAudioDevice(device: cstring; iscapture: cint; desired: ptr AudioSpec; obtained: ptr AudioSpec; allowed_changes: cint): AudioDeviceID {...}{. importc: "SDL_OpenAudioDevice".}
proc getAudioStatus(): AudioStatus {...}{.importc: "SDL_GetAudioStatus".}
proc getAudioDeviceStatus(dev: AudioDeviceID): AudioStatus {...}{. importc: "SDL_GetAudioDeviceStatus".}
proc getQueuedAudioSize(dev: AudioDeviceID): uint32 {...}{. importc: "SDL_GetQueuedAudioSize".}
proc queueAudio(dev: AudioDeviceID; data: pointer; len: uint32): cint {...}{. importc: "SDL_QueueAudio".}
proc pauseAudio(pause_on: cint) {...}{.importc: "SDL_PauseAudio".}
proc pauseAudioDevice(dev: AudioDeviceID; pause_on: cint) {...}{. importc: "SDL_PauseAudioDevice".}
proc loadWAV_RW(src: ptr RWops; freesrc: cint; spec: ptr AudioSpec; audio_buf: ptr ptr uint8; audio_len: ptr uint32): ptr AudioSpec {...}{. importc: "SDL_LoadWAV_RW".}
proc freeWAV(audio_buf: ptr uint8) {...}{.importc: "SDL_FreeWAV".}
proc buildAudioCVT(cvt: ptr AudioCVT; src_format: AudioFormat; src_channels: uint8; src_rate: cint; dst_format: AudioFormat; dst_channels: uint8; dst_rate: cint): cint {...}{. importc: "SDL_BuildAudioCVT".}
proc convertAudio(cvt: ptr AudioCVT): cint {...}{.importc: "SDL_ConvertAudio".}
proc mixAudio(dst: ptr uint8; src: ptr uint8; len: uint32; volume: cint) {...}{. importc: "SDL_MixAudio".}
proc mixAudioFormat(dst: ptr uint8; src: ptr uint8; format: AudioFormat; len: uint32; volume: cint) {...}{.importc: "SDL_MixAudioFormat".}
proc lockAudio() {...}{.importc: "SDL_LockAudio".}
proc lockAudioDevice(dev: AudioDeviceID) {...}{.importc: "SDL_LockAudioDevice".}
proc unlockAudio() {...}{.importc: "SDL_UnlockAudio".}
proc unlockAudioDevice(dev: AudioDeviceID) {...}{.importc: "SDL_UnlockAudioDevice".}
proc closeAudio() {...}{.importc: "SDL_CloseAudio".}
proc closeAudioDevice(dev: AudioDeviceID) {...}{.importc: "SDL_CloseAudioDevice".}
proc newAudioStream(src_format: AudioFormat; src_channels: uint8; src_rate: cint; dst_format: AudioFormat; dst_channels: uint8; dst_rate: cint): AudioStreamPtr {...}{. importc: "SDL_NewAudioStream".}
-
(Available since SDL 2.0.7) Create a new audio stream. return 0 on success, or -1 on error.
Parameters:
- src_format The format of the source audio
- src_channels The number of channels of the source audio
- src_rate The sampling rate of the source audio
- dst_format The format of the desired audio output
- dst_channels The number of channels of the desired audio output
- dst_rate The sampling rate of the desired audio output
See also:
proc newAudioStream(srcSpec, destSpec: AudioSpec): AudioStreamPtr {...}{.raises: [], tags: [].}
-
(Available since SDL 2.0.7) Create a new audio stream that converts from srcSpec to destSpec.
See also:
proc put(stream: AudioStreamPtr; buf: pointer; len: cint): cint {...}{. importc: "SDL_AudioStreamPut".}
-
(Available since SDL 2.0.7) Add data to be converted/resampled to the stream. Returns 0 on success, or -1 on error.
Parameters:
- stream The stream the audio data is being added to
- buf A pointer to the audio data to add
- len The number of bytes to write to the stream
See also:
proc get(stream: AudioStreamPtr; buf: pointer; len: cint): cint {...}{. importc: "SDL_AudioStreamGet".}
-
(Available since SDL 2.0.7) Get converted/resampled data from the stream. Returns the number of bytes read from the stream, or -1 on error.
Parameters:
- stream The stream the audio is being requested from
- buf A buffer to fill with audio data
- len The maximum number of bytes to fill
See also:
proc available(stream: AudioStreamPtr): cint {...}{. importc: "SDL_AudioStreamAvailable".}
-
(Available since SDL 2.0.7) Get the number of converted/resampled bytes available (BYTES, not samples!). The stream may be buffering data behind the scenes until it has enough to resample correctly, so this number might be lower than what you expect, or even be zero. Add more data or flush the stream if you need the data now.
See also:
proc flush(stream: AudioStreamPtr): cint {...}{.importc: "SDL_AudioStreamFlush".}
-
(Available since SDL 2.0.7) Tell the stream that you're done sending data, and anything being buffered should be converted/resampled and made available immediately. Returns 0 on success, -1 on error.
It is legal to add more data to a stream after flushing, but there will be audio gaps in the output. Generally this is intended to signal the end of input, so the complete output becomes available.
See also:
proc clear(stream: AudioStreamPtr) {...}{.importc: "SDL_AudioStreamClear".}
-
(Available since SDL 2.0.7) Clear any pending data in the stream without converting it.
See also:
proc destroy(stream: AudioStreamPtr) {...}{.importc: "SDL_FreeAudioStream".}
-
(Available since SDL 2.0.7) Free an audio stream.
See also:
Templates
template SDL_AUDIO_BITSIZE(x: uint32): uint32
template SDL_AUDIO_ISFLOAT(x: uint32): bool
template SDL_AUDIO_ISBIGENDIAN(x: uint32): bool
template SDL_AUDIO_ISSIGNED(x: uint32): bool
template SDL_AUDIO_ISINT(x: uint32): bool
template SDL_AUDIO_ISLITTLEENDIAN(x: uint32): bool
template SDL_AUDIO_ISUNSIGNED(x: uint32): bool
template loadWAV(file: string; spec: ptr AudioSpec; audio_buf: ptr ptr uint8; audio_len: ptr uint32): ptr AudioSpec