Mercurial > sdl-ios-xcode
comparison include/SDL_audio.h @ 1964:071b6598d48f
1.3 API proposals for audio subsystem. Nothing in here is guaranteed to
stay as-is! And none of it is implemented yet!
Use at own risk!
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Thu, 03 Aug 2006 19:34:05 +0000 |
parents | c121d94672cb |
children | 01e29c3e9a29 |
comparison
equal
deleted
inserted
replaced
1963:2590b68531ef | 1964:071b6598d48f |
---|---|
42 /* *INDENT-OFF* */ | 42 /* *INDENT-OFF* */ |
43 extern "C" { | 43 extern "C" { |
44 /* *INDENT-ON* */ | 44 /* *INDENT-ON* */ |
45 #endif | 45 #endif |
46 | 46 |
47 typedef Uint16 SDL_AudioFormat; | |
48 | |
47 /* The calculated values in this structure are calculated by SDL_OpenAudio() */ | 49 /* The calculated values in this structure are calculated by SDL_OpenAudio() */ |
48 typedef struct SDL_AudioSpec | 50 typedef struct SDL_AudioSpec |
49 { | 51 { |
50 int freq; /* DSP frequency -- samples per second */ | 52 int freq; /* DSP frequency -- samples per second */ |
51 Uint16 format; /* Audio data format */ | 53 SDL_AudioFormat format; /* Audio data format */ |
52 Uint8 channels; /* Number of channels: 1 mono, 2 stereo */ | 54 Uint8 channels; /* Number of channels: 1 mono, 2 stereo */ |
53 Uint8 silence; /* Audio buffer silence value (calculated) */ | 55 Uint8 silence; /* Audio buffer silence value (calculated) */ |
54 Uint16 samples; /* Audio buffer size in samples (power of 2) */ | 56 Uint16 samples; /* Audio buffer size in samples (power of 2) */ |
55 Uint16 padding; /* Necessary for some compile environments */ | 57 Uint16 padding; /* Necessary for some compile environments */ |
56 Uint32 size; /* Audio buffer size in bytes (calculated) */ | 58 Uint32 size; /* Audio buffer size in bytes (calculated) */ |
62 */ | 64 */ |
63 void (SDLCALL * callback) (void *userdata, Uint8 * stream, int len); | 65 void (SDLCALL * callback) (void *userdata, Uint8 * stream, int len); |
64 void *userdata; | 66 void *userdata; |
65 } SDL_AudioSpec; | 67 } SDL_AudioSpec; |
66 | 68 |
69 | |
70 /* | |
71 These are what the 16 bits in SDL_AudioFormat currently mean... | |
72 (Unspecified bits are always zero.) | |
73 | |
74 ++-----------------------sample is signed if set | |
75 || | |
76 || ++-----------sample is bigendian if set | |
77 || || | |
78 || || ++---sample is float if set | |
79 || || || | |
80 || || || +---sample bit size---+ | |
81 || || || | | | |
82 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 | |
83 | |
84 There are macros in SDL 1.3 and later to query these bits. | |
85 */ | |
86 | |
87 #define SDL_AUDIO_MASK_BITSIZE (0xFF) | |
88 #define SDL_AUDIO_MASK_DATATYPE (1<<8) | |
89 #define SDL_AUDIO_MASK_ENDIAN (1<<12) | |
90 #define SDL_AUDIO_MASK_SIGNED (1<<15) | |
91 #define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) | |
92 #define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) | |
93 #define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) | |
94 #define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) | |
95 #define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) | |
96 #define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) | |
97 #define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) | |
98 | |
67 /* Audio format flags (defaults to LSB byte order) */ | 99 /* Audio format flags (defaults to LSB byte order) */ |
68 #define AUDIO_U8 0x0008 /* Unsigned 8-bit samples */ | 100 #define AUDIO_U8 0x0008 /* Unsigned 8-bit samples */ |
69 #define AUDIO_S8 0x8008 /* Signed 8-bit samples */ | 101 #define AUDIO_S8 0x8008 /* Signed 8-bit samples */ |
70 #define AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */ | 102 #define AUDIO_U16LSB 0x0010 /* Unsigned 16-bit samples */ |
71 #define AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */ | 103 #define AUDIO_S16LSB 0x8010 /* Signed 16-bit samples */ |
72 #define AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */ | 104 #define AUDIO_U16MSB 0x1010 /* As above, but big-endian byte order */ |
73 #define AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */ | 105 #define AUDIO_S16MSB 0x9010 /* As above, but big-endian byte order */ |
74 #define AUDIO_U16 AUDIO_U16LSB | 106 #define AUDIO_U16 AUDIO_U16LSB |
75 #define AUDIO_S16 AUDIO_S16LSB | 107 #define AUDIO_S16 AUDIO_S16LSB |
76 | 108 |
109 /* int32 support new to SDL 1.3 */ | |
110 #define AUDIO_S32LSB 0x8020 /* 32-bit integer samples */ | |
111 #define AUDIO_S32MSB 0x9020 /* As above, but big-endian byte order */ | |
112 #define AUDIO_S32 AUDIO_S32LSB | |
113 #define AUDIO_U32LSB 0x0020 /* Unsigned 32-bit integer samples */ | |
114 #define AUDIO_U32MSB 0x1020 /* As above, but big-endian byte order */ | |
115 #define AUDIO_U32 AUDIO_U32LSB | |
116 | |
117 /* float32 support new to SDL 1.3 */ | |
118 #define AUDIO_F32LSB 0x8120 /* 32-bit floating point samples */ | |
119 #define AUDIO_F32MSB 0x9120 /* As above, but big-endian byte order */ | |
120 #define AUDIO_F32 AUDIO_F32LSB | |
121 | |
77 /* Native audio byte ordering */ | 122 /* Native audio byte ordering */ |
78 #if SDL_BYTEORDER == SDL_LIL_ENDIAN | 123 #if SDL_BYTEORDER == SDL_LIL_ENDIAN |
79 #define AUDIO_U16SYS AUDIO_U16LSB | 124 #define AUDIO_U16SYS AUDIO_U16LSB |
80 #define AUDIO_S16SYS AUDIO_S16LSB | 125 #define AUDIO_S16SYS AUDIO_S16LSB |
126 #define AUDIO_S32SYS AUDIO_S32LSB | |
127 #define AUDIO_U32SYS AUDIO_U32LSB | |
128 #define AUDIO_F32SYS AUDIO_F32LSB | |
81 #else | 129 #else |
82 #define AUDIO_U16SYS AUDIO_U16MSB | 130 #define AUDIO_U16SYS AUDIO_U16MSB |
83 #define AUDIO_S16SYS AUDIO_S16MSB | 131 #define AUDIO_S16SYS AUDIO_S16MSB |
132 #define AUDIO_S32SYS AUDIO_S32MSB | |
133 #define AUDIO_U32SYS AUDIO_U32MSB | |
134 #define AUDIO_F32SYS AUDIO_F32MSB | |
84 #endif | 135 #endif |
85 | 136 |
86 | 137 |
87 /* A structure to hold a set of audio conversion filters and buffers */ | 138 /* A structure to hold a set of audio conversion filters and buffers */ |
88 typedef struct SDL_AudioCVT | 139 typedef struct SDL_AudioCVT |
164 */ | 215 */ |
165 extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, | 216 extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, |
166 SDL_AudioSpec * obtained); | 217 SDL_AudioSpec * obtained); |
167 | 218 |
168 /* | 219 /* |
220 * SDL Audio Device IDs. | |
221 * A successful call to SDL_OpenAudio() is always device id 1, and legacy | |
222 * SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls | |
223 * always returns devices >= 2 on success. The legacy calls are good both | |
224 * for backwards compatibility and when you don't care about multiple, | |
225 * specific, or capture devices. | |
226 */ | |
227 typedef Uint32 SDL_AudioDeviceID; | |
228 | |
229 /* | |
230 * Get the number of available devices exposed by the current driver. | |
231 * Only valid after a successfully initializing the audio subsystem. | |
232 */ | |
233 extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); | |
234 | |
235 /* | |
236 * Get the human-readable name of a specific audio device. | |
237 * Must be a value between 0 and (number of audio devices-1). | |
238 * Only valid after a successfully initializing the audio subsystem. | |
239 */ | |
240 extern DECLSPEC const char *SDLCALL SDL_GetAudioDevice(int index, int iscapture); | |
241 | |
242 | |
243 /* | |
244 * Open a specific audio device. Passing in a device name of NULL is | |
245 * equivalent to SDL_OpenAudio(). Returns 0 on error, a valid device ID | |
246 * on success. | |
247 */ | |
248 extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice( | |
249 const char * device, | |
250 int iscapture, | |
251 const SDL_AudioSpec * desired, | |
252 SDL_AudioSpec * obtained); | |
253 | |
254 | |
255 | |
256 /* | |
169 * Get the current audio state: | 257 * Get the current audio state: |
170 */ | 258 */ |
171 typedef enum | 259 typedef enum |
172 { | 260 { |
173 SDL_AUDIO_STOPPED = 0, | 261 SDL_AUDIO_STOPPED = 0, |
174 SDL_AUDIO_PLAYING, | 262 SDL_AUDIO_PLAYING, |
175 SDL_AUDIO_PAUSED | 263 SDL_AUDIO_PAUSED |
176 } SDL_audiostatus; | 264 } SDL_audiostatus; |
177 extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); | 265 extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioStatus(void); |
178 | 266 |
267 extern DECLSPEC SDL_audiostatus SDLCALL SDL_GetAudioDeviceStatus( | |
268 SDL_AudioDeviceID dev); | |
269 | |
179 /* | 270 /* |
180 * This function pauses and unpauses the audio callback processing. | 271 * This function pauses and unpauses the audio callback processing. |
181 * It should be called with a parameter of 0 after opening the audio | 272 * It should be called with a parameter of 0 after opening the audio |
182 * device to start playing sound. This is so you can safely initialize | 273 * device to start playing sound. This is so you can safely initialize |
183 * data for your callback function after opening the audio device. | 274 * data for your callback function after opening the audio device. |
184 * Silence will be written to the audio device during the pause. | 275 * Silence will be written to the audio device during the pause. |
185 */ | 276 */ |
186 extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); | 277 extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); |
278 extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, | |
279 int pause_on); | |
187 | 280 |
188 /* | 281 /* |
189 * This function loads a WAVE from the data source, automatically freeing | 282 * This function loads a WAVE from the data source, automatically freeing |
190 * that source if 'freesrc' is non-zero. For example, to load a WAVE file, | 283 * that source if 'freesrc' is non-zero. For example, to load a WAVE file, |
191 * you could do: | 284 * you could do: |
220 /* | 313 /* |
221 * This function takes a source format and rate and a destination format | 314 * This function takes a source format and rate and a destination format |
222 * and rate, and initializes the 'cvt' structure with information needed | 315 * and rate, and initializes the 'cvt' structure with information needed |
223 * by SDL_ConvertAudio() to convert a buffer of audio data from one format | 316 * by SDL_ConvertAudio() to convert a buffer of audio data from one format |
224 * to the other. | 317 * to the other. |
225 * This function returns 0, or -1 if there was an error. | 318 * Returns -1 if the format conversion is not supported, 0 if there's |
319 * no conversion needed, or 1 if the audio filter is set up. | |
226 */ | 320 */ |
227 extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, | 321 extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, |
228 Uint16 src_format, | 322 Uint16 src_format, |
229 Uint8 src_channels, | 323 Uint8 src_channels, |
230 int src_rate, | 324 int src_rate, |
252 #define SDL_MIX_MAXVOLUME 128 | 346 #define SDL_MIX_MAXVOLUME 128 |
253 extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, | 347 extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, |
254 Uint32 len, int volume); | 348 Uint32 len, int volume); |
255 | 349 |
256 /* | 350 /* |
351 * This works like SDL_MixAudio, but you specify the audio format instead of | |
352 * using the format of audio device 1. Thus it can be used when no audio | |
353 * device is open at all. | |
354 */ | |
355 extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, | |
356 SDL_AudioFormat format, | |
357 Uint32 len, int volume); | |
358 | |
359 /* | |
257 * The lock manipulated by these functions protects the callback function. | 360 * The lock manipulated by these functions protects the callback function. |
258 * During a LockAudio/UnlockAudio pair, you can be guaranteed that the | 361 * During a LockAudio/UnlockAudio pair, you can be guaranteed that the |
259 * callback function is not running. Do not call these from the callback | 362 * callback function is not running. Do not call these from the callback |
260 * function or you will cause deadlock. | 363 * function or you will cause deadlock. |
261 */ | 364 */ |
262 extern DECLSPEC void SDLCALL SDL_LockAudio(void); | 365 extern DECLSPEC void SDLCALL SDL_LockAudio(void); |
366 extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); | |
263 extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); | 367 extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); |
368 extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); | |
264 | 369 |
265 /* | 370 /* |
266 * This function shuts down audio processing and closes the audio device. | 371 * This function shuts down audio processing and closes the audio device. |
267 */ | 372 */ |
268 extern DECLSPEC void SDLCALL SDL_CloseAudio(void); | 373 extern DECLSPEC void SDLCALL SDL_CloseAudio(void); |
374 extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); | |
375 | |
376 /* | |
377 * Returns 1 if audio device is still functioning, zero if not, -1 on error. | |
378 */ | |
379 extern DECLSPEC int SDLCALL SDL_AudioDeviceConnected(SDL_AudioDeviceID dev); | |
269 | 380 |
270 | 381 |
271 /* Ends C function definitions when using C++ */ | 382 /* Ends C function definitions when using C++ */ |
272 #ifdef __cplusplus | 383 #ifdef __cplusplus |
273 /* *INDENT-OFF* */ | 384 /* *INDENT-OFF* */ |