Mercurial > sdl-ios-xcode
comparison include/SDL_audio.h @ 1895:c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 10 Jul 2006 21:04:37 +0000 |
parents | c71e05b4dc2e |
children | 071b6598d48f |
comparison
equal
deleted
inserted
replaced
1894:c69cee13dd76 | 1895:c121d94672cb |
---|---|
18 | 18 |
19 Sam Lantinga | 19 Sam Lantinga |
20 slouken@libsdl.org | 20 slouken@libsdl.org |
21 */ | 21 */ |
22 | 22 |
23 /* Access to the raw audio mixing buffer for the SDL library */ | 23 /** |
24 * \file SDL_audio.h | |
25 * | |
26 * Access to the raw audio mixing buffer for the SDL library | |
27 */ | |
24 | 28 |
25 #ifndef _SDL_audio_h | 29 #ifndef _SDL_audio_h |
26 #define _SDL_audio_h | 30 #define _SDL_audio_h |
27 | 31 |
28 #include "SDL_stdinc.h" | 32 #include "SDL_stdinc.h" |
33 #include "SDL_rwops.h" | 37 #include "SDL_rwops.h" |
34 | 38 |
35 #include "begin_code.h" | 39 #include "begin_code.h" |
36 /* Set up for C function definitions, even when using C++ */ | 40 /* Set up for C function definitions, even when using C++ */ |
37 #ifdef __cplusplus | 41 #ifdef __cplusplus |
42 /* *INDENT-OFF* */ | |
38 extern "C" { | 43 extern "C" { |
44 /* *INDENT-ON* */ | |
39 #endif | 45 #endif |
40 | 46 |
41 /* The calculated values in this structure are calculated by SDL_OpenAudio() */ | 47 /* The calculated values in this structure are calculated by SDL_OpenAudio() */ |
42 typedef struct SDL_AudioSpec { | 48 typedef struct SDL_AudioSpec |
43 int freq; /* DSP frequency -- samples per second */ | 49 { |
44 Uint16 format; /* Audio data format */ | 50 int freq; /* DSP frequency -- samples per second */ |
45 Uint8 channels; /* Number of channels: 1 mono, 2 stereo */ | 51 Uint16 format; /* Audio data format */ |
46 Uint8 silence; /* Audio buffer silence value (calculated) */ | 52 Uint8 channels; /* Number of channels: 1 mono, 2 stereo */ |
47 Uint16 samples; /* Audio buffer size in samples (power of 2) */ | 53 Uint8 silence; /* Audio buffer silence value (calculated) */ |
48 Uint16 padding; /* Necessary for some compile environments */ | 54 Uint16 samples; /* Audio buffer size in samples (power of 2) */ |
49 Uint32 size; /* Audio buffer size in bytes (calculated) */ | 55 Uint16 padding; /* Necessary for some compile environments */ |
50 /* This function is called when the audio device needs more data. | 56 Uint32 size; /* Audio buffer size in bytes (calculated) */ |
51 'stream' is a pointer to the audio data buffer | 57 /* This function is called when the audio device needs more data. |
52 'len' is the length of that buffer in bytes. | 58 'stream' is a pointer to the audio data buffer |
53 Once the callback returns, the buffer will no longer be valid. | 59 'len' is the length of that buffer in bytes. |
54 Stereo samples are stored in a LRLRLR ordering. | 60 Once the callback returns, the buffer will no longer be valid. |
55 */ | 61 Stereo samples are stored in a LRLRLR ordering. |
56 void (SDLCALL *callback)(void *userdata, Uint8 *stream, int len); | 62 */ |
57 void *userdata; | 63 void (SDLCALL * callback) (void *userdata, Uint8 * stream, int len); |
64 void *userdata; | |
58 } SDL_AudioSpec; | 65 } SDL_AudioSpec; |
59 | 66 |
60 /* Audio format flags (defaults to LSB byte order) */ | 67 /* Audio format flags (defaults to LSB byte order) */ |
61 #define AUDIO_U8 0x0008 /* Unsigned 8-bit samples */ | 68 #define AUDIO_U8 0x0008 /* Unsigned 8-bit samples */ |
62 #define AUDIO_S8 0x8008 /* Signed 8-bit samples */ | 69 #define AUDIO_S8 0x8008 /* Signed 8-bit samples */ |
63 #define AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */ | 70 #define AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */ |
64 #define AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */ | 71 #define AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */ |
65 #define AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */ | 72 #define AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */ |
66 #define AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */ | 73 #define AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */ |
67 #define AUDIO_U16 AUDIO_U16LSB | 74 #define AUDIO_U16 AUDIO_U16LSB |
68 #define AUDIO_S16 AUDIO_S16LSB | 75 #define AUDIO_S16 AUDIO_S16LSB |
69 | 76 |
70 /* Native audio byte ordering */ | 77 /* Native audio byte ordering */ |
71 #if SDL_BYTEORDER == SDL_LIL_ENDIAN | 78 #if SDL_BYTEORDER == SDL_LIL_ENDIAN |
76 #define AUDIO_S16SYS AUDIO_S16MSB | 83 #define AUDIO_S16SYS AUDIO_S16MSB |
77 #endif | 84 #endif |
78 | 85 |
79 | 86 |
80 /* A structure to hold a set of audio conversion filters and buffers */ | 87 /* A structure to hold a set of audio conversion filters and buffers */ |
81 typedef struct SDL_AudioCVT { | 88 typedef struct SDL_AudioCVT |
82 int needed; /* Set to 1 if conversion possible */ | 89 { |
83 Uint16 src_format; /* Source audio format */ | 90 int needed; /* Set to 1 if conversion possible */ |
84 Uint16 dst_format; /* Target audio format */ | 91 Uint16 src_format; /* Source audio format */ |
85 double rate_incr; /* Rate conversion increment */ | 92 Uint16 dst_format; /* Target audio format */ |
86 Uint8 *buf; /* Buffer to hold entire audio data */ | 93 double rate_incr; /* Rate conversion increment */ |
87 int len; /* Length of original audio buffer */ | 94 Uint8 *buf; /* Buffer to hold entire audio data */ |
88 int len_cvt; /* Length of converted audio buffer */ | 95 int len; /* Length of original audio buffer */ |
89 int len_mult; /* buffer must be len*len_mult big */ | 96 int len_cvt; /* Length of converted audio buffer */ |
90 double len_ratio; /* Given len, final size is len*len_ratio */ | 97 int len_mult; /* buffer must be len*len_mult big */ |
91 void (SDLCALL *filters[10])(struct SDL_AudioCVT *cvt, Uint16 format); | 98 double len_ratio; /* Given len, final size is len*len_ratio */ |
92 int filter_index; /* Current audio conversion function */ | 99 void (SDLCALL * filters[10]) (struct SDL_AudioCVT * cvt, Uint16 format); |
100 int filter_index; /* Current audio conversion function */ | |
93 } SDL_AudioCVT; | 101 } SDL_AudioCVT; |
94 | 102 |
95 | 103 |
96 /* Function prototypes */ | 104 /* Function prototypes */ |
105 | |
106 /* These functions return the list of built in video drivers, in the | |
107 * order that they are normally initialized by default. | |
108 */ | |
109 extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); | |
110 extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); | |
97 | 111 |
98 /* These functions are used internally, and should not be used unless you | 112 /* These functions are used internally, and should not be used unless you |
99 * have a specific need to specify the audio driver you want to use. | 113 * have a specific need to specify the audio driver you want to use. |
100 * You should normally use SDL_Init() or SDL_InitSubSystem(). | 114 * You should normally use SDL_Init() or SDL_InitSubSystem(). |
101 */ | 115 */ |
102 extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); | 116 extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); |
103 extern DECLSPEC void SDLCALL SDL_AudioQuit(void); | 117 extern DECLSPEC void SDLCALL SDL_AudioQuit(void); |
104 | 118 |
105 /* This function fills the given character buffer with the name of the | 119 /* This function returns the name of the current audio driver, or NULL |
106 * current audio driver, and returns a pointer to it if the audio driver has | 120 * if no driver has been initialized. |
107 * been initialized. It returns NULL if no driver has been initialized. | 121 */ |
108 */ | 122 extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); |
109 extern DECLSPEC char * SDLCALL SDL_AudioDriverName(char *namebuf, int maxlen); | |
110 | 123 |
111 /* | 124 /* |
112 * This function opens the audio device with the desired parameters, and | 125 * This function opens the audio device with the desired parameters, and |
113 * returns 0 if successful, placing the actual hardware parameters in the | 126 * returns 0 if successful, placing the actual hardware parameters in the |
114 * structure pointed to by 'obtained'. If 'obtained' is NULL, the audio | 127 * structure pointed to by 'obtained'. If 'obtained' is NULL, the audio |
147 * be enabled for playing by calling SDL_PauseAudio(0) when you are ready | 160 * be enabled for playing by calling SDL_PauseAudio(0) when you are ready |
148 * for your audio callback function to be called. Since the audio driver | 161 * for your audio callback function to be called. Since the audio driver |
149 * may modify the requested size of the audio buffer, you should allocate | 162 * may modify the requested size of the audio buffer, you should allocate |
150 * any local mixing buffers after you open the audio device. | 163 * any local mixing buffers after you open the audio device. |
151 */ | 164 */ |
152 extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec *desired, SDL_AudioSpec *obtained); | 165 extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, |
166 SDL_AudioSpec * obtained); | |
153 | 167 |
154 /* | 168 /* |
155 * Get the current audio state: | 169 * Get the current audio state: |
156 */ | 170 */ |
157 typedef enum { | 171 typedef enum |
158 SDL_AUDIO_STOPPED = 0, | 172 { |
159 SDL_AUDIO_PLAYING, | 173 SDL_AUDIO_STOPPED = 0, |
160 SDL_AUDIO_PAUSED | 174 SDL_AUDIO_PLAYING, |
175 SDL_AUDIO_PAUSED | |
161 } SDL_audiostatus; | 176 } SDL_audiostatus; |
162 extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); | 177 extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); |
163 | 178 |
164 /* | 179 /* |
165 * This function pauses and unpauses the audio callback processing. | 180 * This function pauses and unpauses the audio callback processing. |
185 * | 200 * |
186 * This function returns NULL and sets the SDL error message if the | 201 * This function returns NULL and sets the SDL error message if the |
187 * wave file cannot be opened, uses an unknown data format, or is | 202 * wave file cannot be opened, uses an unknown data format, or is |
188 * corrupt. Currently raw and MS-ADPCM WAVE files are supported. | 203 * corrupt. Currently raw and MS-ADPCM WAVE files are supported. |
189 */ | 204 */ |
190 extern DECLSPEC SDL_AudioSpec * SDLCALL SDL_LoadWAV_RW(SDL_RWops *src, int freesrc, SDL_AudioSpec *spec, Uint8 **audio_buf, Uint32 *audio_len); | 205 extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, |
206 int freesrc, | |
207 SDL_AudioSpec * spec, | |
208 Uint8 ** audio_buf, | |
209 Uint32 * audio_len); | |
191 | 210 |
192 /* Compatibility convenience function -- loads a WAV from a file */ | 211 /* Compatibility convenience function -- loads a WAV from a file */ |
193 #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ | 212 #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ |
194 SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) | 213 SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) |
195 | 214 |
196 /* | 215 /* |
197 * This function frees data previously allocated with SDL_LoadWAV_RW() | 216 * This function frees data previously allocated with SDL_LoadWAV_RW() |
198 */ | 217 */ |
199 extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 *audio_buf); | 218 extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); |
200 | 219 |
201 /* | 220 /* |
202 * This function takes a source format and rate and a destination format | 221 * This function takes a source format and rate and a destination format |
203 * and rate, and initializes the 'cvt' structure with information needed | 222 * and rate, and initializes the 'cvt' structure with information needed |
204 * by SDL_ConvertAudio() to convert a buffer of audio data from one format | 223 * by SDL_ConvertAudio() to convert a buffer of audio data from one format |
205 * to the other. | 224 * to the other. |
206 * This function returns 0, or -1 if there was an error. | 225 * This function returns 0, or -1 if there was an error. |
207 */ | 226 */ |
208 extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT *cvt, | 227 extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, |
209 Uint16 src_format, Uint8 src_channels, int src_rate, | 228 Uint16 src_format, |
210 Uint16 dst_format, Uint8 dst_channels, int dst_rate); | 229 Uint8 src_channels, |
230 int src_rate, | |
231 Uint16 dst_format, | |
232 Uint8 dst_channels, | |
233 int dst_rate); | |
211 | 234 |
212 /* Once you have initialized the 'cvt' structure using SDL_BuildAudioCVT(), | 235 /* Once you have initialized the 'cvt' structure using SDL_BuildAudioCVT(), |
213 * created an audio buffer cvt->buf, and filled it with cvt->len bytes of | 236 * created an audio buffer cvt->buf, and filled it with cvt->len bytes of |
214 * audio data in the source format, this function will convert it in-place | 237 * audio data in the source format, this function will convert it in-place |
215 * to the desired format. | 238 * to the desired format. |
216 * The data conversion may expand the size of the audio data, so the buffer | 239 * The data conversion may expand the size of the audio data, so the buffer |
217 * cvt->buf should be allocated after the cvt structure is initialized by | 240 * cvt->buf should be allocated after the cvt structure is initialized by |
218 * SDL_BuildAudioCVT(), and should be cvt->len*cvt->len_mult bytes long. | 241 * SDL_BuildAudioCVT(), and should be cvt->len*cvt->len_mult bytes long. |
219 */ | 242 */ |
220 extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT *cvt); | 243 extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); |
221 | 244 |
222 /* | 245 /* |
223 * This takes two audio buffers of the playing audio format and mixes | 246 * This takes two audio buffers of the playing audio format and mixes |
224 * them, performing addition, volume adjustment, and overflow clipping. | 247 * them, performing addition, volume adjustment, and overflow clipping. |
225 * The volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME | 248 * The volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME |
226 * for full audio volume. Note this does not change hardware volume. | 249 * for full audio volume. Note this does not change hardware volume. |
227 * This is provided for convenience -- you can mix your own audio data. | 250 * This is provided for convenience -- you can mix your own audio data. |
228 */ | 251 */ |
229 #define SDL_MIX_MAXVOLUME 128 | 252 #define SDL_MIX_MAXVOLUME 128 |
230 extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 *dst, const Uint8 *src, Uint32 len, int volume); | 253 extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, |
254 Uint32 len, int volume); | |
231 | 255 |
232 /* | 256 /* |
233 * The lock manipulated by these functions protects the callback function. | 257 * The lock manipulated by these functions protects the callback function. |
234 * During a LockAudio/UnlockAudio pair, you can be guaranteed that the | 258 * During a LockAudio/UnlockAudio pair, you can be guaranteed that the |
235 * callback function is not running. Do not call these from the callback | 259 * callback function is not running. Do not call these from the callback |
244 extern DECLSPEC void SDLCALL SDL_CloseAudio(void); | 268 extern DECLSPEC void SDLCALL SDL_CloseAudio(void); |
245 | 269 |
246 | 270 |
247 /* Ends C function definitions when using C++ */ | 271 /* Ends C function definitions when using C++ */ |
248 #ifdef __cplusplus | 272 #ifdef __cplusplus |
273 /* *INDENT-OFF* */ | |
249 } | 274 } |
275 /* *INDENT-ON* */ | |
250 #endif | 276 #endif |
251 #include "close_code.h" | 277 #include "close_code.h" |
252 | 278 |
253 #endif /* _SDL_audio_h */ | 279 #endif /* _SDL_audio_h */ |
280 | |
281 /* vi: set ts=4 sw=4 expandtab: */ |