My Project
SDL_audio.h
Go to the documentation of this file.
1 /*
2  Simple DirectMedia Layer
3  Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
4 
5  This software is provided 'as-is', without any express or implied
6  warranty. In no event will the authors be held liable for any damages
7  arising from the use of this software.
8 
9  Permission is granted to anyone to use this software for any purpose,
10  including commercial applications, and to alter it and redistribute it
11  freely, subject to the following restrictions:
12 
13  1. The origin of this software must not be misrepresented; you must not
14  claim that you wrote the original software. If you use this software
15  in a product, an acknowledgment in the product documentation would be
16  appreciated but is not required.
17  2. Altered source versions must be plainly marked as such, and must not be
18  misrepresented as being the original software.
19  3. This notice may not be removed or altered from any source distribution.
20 */
21 
28 #ifndef _SDL_audio_h
29 #define _SDL_audio_h
30 
31 #include "SDL_stdinc.h"
32 #include "SDL_error.h"
33 #include "SDL_endian.h"
34 #include "SDL_mutex.h"
35 #include "SDL_thread.h"
36 #include "SDL_rwops.h"
37 
38 #include "begin_code.h"
39 /* Set up for C function definitions, even when using C++ */
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43 
65 
69 /* @{ */
70 
71 #define SDL_AUDIO_MASK_BITSIZE (0xFF)
72 #define SDL_AUDIO_MASK_DATATYPE (1<<8)
73 #define SDL_AUDIO_MASK_ENDIAN (1<<12)
74 #define SDL_AUDIO_MASK_SIGNED (1<<15)
75 #define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE)
76 #define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE)
77 #define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN)
78 #define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED)
79 #define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x))
80 #define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x))
81 #define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x))
82 
88 /* @{ */
89 #define AUDIO_U8 0x0008
90 #define AUDIO_S8 0x8008
91 #define AUDIO_U16LSB 0x0010
92 #define AUDIO_S16LSB 0x8010
93 #define AUDIO_U16MSB 0x1010
94 #define AUDIO_S16MSB 0x9010
95 #define AUDIO_U16 AUDIO_U16LSB
96 #define AUDIO_S16 AUDIO_S16LSB
97 /* @} */
98 
102 /* @{ */
103 #define AUDIO_S32LSB 0x8020
104 #define AUDIO_S32MSB 0x9020
105 #define AUDIO_S32 AUDIO_S32LSB
106 /* @} */
107 
111 /* @{ */
112 #define AUDIO_F32LSB 0x8120
113 #define AUDIO_F32MSB 0x9120
114 #define AUDIO_F32 AUDIO_F32LSB
115 /* @} */
116 
120 /* @{ */
121 #if SDL_BYTEORDER == SDL_LIL_ENDIAN
122 #define AUDIO_U16SYS AUDIO_U16LSB
123 #define AUDIO_S16SYS AUDIO_S16LSB
124 #define AUDIO_S32SYS AUDIO_S32LSB
125 #define AUDIO_F32SYS AUDIO_F32LSB
126 #else
127 #define AUDIO_U16SYS AUDIO_U16MSB
128 #define AUDIO_S16SYS AUDIO_S16MSB
129 #define AUDIO_S32SYS AUDIO_S32MSB
130 #define AUDIO_F32SYS AUDIO_F32MSB
131 #endif
132 /* @} */
133 
139 /* @{ */
140 #define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001
141 #define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002
142 #define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004
143 #define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE)
144 /* @} */
145 
146 /* @} *//* Audio flags */
147 
162 typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream,
163  int len);
164 
168 typedef struct SDL_AudioSpec
169 {
170  int freq;
171  SDL_AudioFormat format;
178  void *userdata;
179 } SDL_AudioSpec;
180 
181 
182 struct SDL_AudioCVT;
183 typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt,
184  SDL_AudioFormat format);
185 
189 #ifdef __GNUC__
190 /* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't
191  pad it out to 88 bytes to guarantee ABI compatibility between compilers.
192  vvv
193  The next time we rev the ABI, make sure to size the ints and add padding.
194 */
195 #define SDL_AUDIOCVT_PACKED __attribute__((packed))
196 #else
197 #define SDL_AUDIOCVT_PACKED
198 #endif
199 /* */
200 typedef struct SDL_AudioCVT
201 {
202  int needed;
203  SDL_AudioFormat src_format;
204  SDL_AudioFormat dst_format;
205  double rate_incr;
207  int len;
208  int len_cvt;
209  int len_mult;
210  double len_ratio;
211  SDL_AudioFilter filters[10];
214 
215 
216 /* Function prototypes */
217 
224 /* @{ */
225 extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void);
226 extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index);
227 /* @} */
228 
236 /* @{ */
237 extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name);
238 extern DECLSPEC void SDLCALL SDL_AudioQuit(void);
239 /* @} */
240 
245 extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void);
246 
292 extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired,
293  SDL_AudioSpec * obtained);
294 
305 
318 extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture);
319 
333 extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index,
334  int iscapture);
335 
336 
350 extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice(const char
351  *device,
352  int iscapture,
353  const
354  SDL_AudioSpec *
355  desired,
356  SDL_AudioSpec *
357  obtained,
358  int
359  allowed_changes);
360 
361 
362 
368 /* @{ */
369 typedef enum
370 {
371  SDL_AUDIO_STOPPED = 0,
372  SDL_AUDIO_PLAYING,
373  SDL_AUDIO_PAUSED
374 } SDL_AudioStatus;
375 extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void);
376 
377 extern DECLSPEC SDL_AudioStatus SDLCALL
378 SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev);
379 /* @} *//* Audio State */
380 
390 /* @{ */
391 extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on);
392 extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev,
393  int pause_on);
394 /* @} *//* Pause audio functions */
395 
415 extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src,
416  int freesrc,
417  SDL_AudioSpec * spec,
418  Uint8 ** audio_buf,
419  Uint32 * audio_len);
420 
425 #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \
426  SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len)
427 
431 extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf);
432 
442 extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
443  SDL_AudioFormat src_format,
444  Uint8 src_channels,
445  int src_rate,
446  SDL_AudioFormat dst_format,
447  Uint8 dst_channels,
448  int dst_rate);
449 
460 extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt);
461 
462 #define SDL_MIX_MAXVOLUME 128
463 
470 extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src,
471  Uint32 len, int volume);
472 
478 extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst,
479  const Uint8 * src,
480  SDL_AudioFormat format,
481  Uint32 len, int volume);
482 
522 extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len);
523 
568 extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len);
569 
604 extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev);
605 
640 extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev);
641 
642 
651 /* @{ */
652 extern DECLSPEC void SDLCALL SDL_LockAudio(void);
653 extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev);
654 extern DECLSPEC void SDLCALL SDL_UnlockAudio(void);
655 extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev);
656 /* @} *//* Audio lock functions */
657 
661 extern DECLSPEC void SDLCALL SDL_CloseAudio(void);
662 extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev);
663 
664 /* Ends C function definitions when using C++ */
665 #ifdef __cplusplus
666 }
667 #endif
668 #include "close_code.h"
669 
670 #endif /* _SDL_audio_h */
671 
672 /* vi: set ts=4 sw=4 expandtab: */
int len_cvt
Definition: SDL_audio.h:208
DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops *src, int freesrc, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len)
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:143
Definition: SDL_audio.h:168
DECLSPEC void SDLCALL SDL_CloseAudio(void)
DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained)
DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 *audio_buf)
Uint16 padding
Definition: SDL_audio.h:175
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:159
int needed
Definition: SDL_audio.h:202
DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, int iscapture)
Uint8 channels
Definition: SDL_audio.h:172
uint16_t Uint16
An unsigned 16-bit integer type.
Definition: SDL_stdinc.h:151
void(SDLCALL * SDL_AudioCallback)(void *userdata, Uint8 *stream, int len)
Definition: SDL_audio.h:162
void * userdata
Definition: SDL_audio.h:178
double rate_incr
Definition: SDL_audio.h:205
DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 *dst, const Uint8 *src, SDL_AudioFormat format, Uint32 len, int volume)
DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture)
Uint8 * buf
Definition: SDL_audio.h:206
#define SDL_AUDIOCVT_PACKED
Definition: SDL_audio.h:197
SDL_AudioFormat src_format
Definition: SDL_audio.h:203
struct SDL_AudioSpec SDL_AudioSpec
int len_mult
Definition: SDL_audio.h:209
DECLSPEC void SDLCALL SDL_MixAudio(Uint8 *dst, const Uint8 *src, Uint32 len, int volume)
double len_ratio
Definition: SDL_audio.h:210
Uint32 size
Definition: SDL_audio.h:176
SDL_AudioFormat format
Definition: SDL_audio.h:171
Definition: SDL_audio.h:200
DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT *cvt)
int len
Definition: SDL_audio.h:207
DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT *cvt, SDL_AudioFormat src_format, Uint8 src_channels, int src_rate, SDL_AudioFormat dst_format, Uint8 dst_channels, int dst_rate)
Uint32 SDL_AudioDeviceID
Definition: SDL_audio.h:304
DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void)
DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev)
DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev)
SDL_AudioFormat dst_format
Definition: SDL_audio.h:204
DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len)
Uint16 SDL_AudioFormat
Audio format flags.
Definition: SDL_audio.h:64
Uint8 silence
Definition: SDL_audio.h:173
int filter_index
Definition: SDL_audio.h:212
Uint16 samples
Definition: SDL_audio.h:174
DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len)
int freq
Definition: SDL_audio.h:170
DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice(const char *device, int iscapture, const SDL_AudioSpec *desired, SDL_AudioSpec *obtained, int allowed_changes)
Definition: SDL_rwops.h:52
SDL_AudioCallback callback
Definition: SDL_audio.h:177