Skip to content

Latest commit

 

History

History
212 lines (173 loc) · 7.42 KB

mixer.h

File metadata and controls

212 lines (173 loc) · 7.42 KB
 
Oct 21, 1999
Oct 21, 1999
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
MIXERLIB: An audio mixer library based on the SDL library
Copyright (C) 1997-1999 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Sam Lantinga
5635-34 Springhouse Dr.
Pleasanton, CA 94588 (USA)
slouken@devolution.com
*/
#ifndef _MIXER_H_
#define _MIXER_H_
#include <SDL/SDL_types.h>
#include <SDL/SDL_rwops.h>
#include <SDL/SDL_audio.h>
#include <SDL/begin_code.h>
Oct 27, 1999
Oct 27, 1999
34
35
36
37
38
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif
Oct 21, 1999
Oct 21, 1999
39
40
41
42
43
44
45
46
47
48
49
50
51
/* The default mixer has 8 simultaneous mixing channels */
#ifndef MIX_CHANNELS
#define MIX_CHANNELS 8
#endif
/* Good default values for a PC soundcard */
#define MIX_DEFAULT_FREQUENCY 22050
#define MIX_DEFAULT_FORMAT AUDIO_S16
#define MIX_DEFAULT_CHANNELS 2
#define MIX_MAX_VOLUME 128 /* Volume of a chunk */
/* The internal format for an audio chunk */
typedef struct {
Oct 21, 1999
Oct 21, 1999
52
int allocated;
Oct 21, 1999
Oct 21, 1999
53
54
55
56
57
Uint8 *abuf;
Uint32 alen;
Uint8 volume; /* Per-sample volume, 0-128 */
} Mix_Chunk;
Oct 23, 1999
Oct 23, 1999
58
59
60
61
62
63
64
/* The different fading types supported */
typedef enum {
MIX_NO_FADING,
MIX_FADING_OUT,
MIX_FADING_IN
} Mix_Fading;
Oct 21, 1999
Oct 21, 1999
65
66
67
68
69
70
71
/* The internal format for a music chunk interpreted via mikmod */
typedef struct _Mix_Music Mix_Music;
/* Open the mixer with a certain audio format */
extern int Mix_OpenAudio(int frequency, Uint16 format, int channels,
int chunksize);
Oct 26, 1999
Oct 26, 1999
72
73
74
75
76
77
78
/* Dynamically change the number of channels managed by the mixer.
If decreasing the number of channels, the upper channels are
stopped.
This function returns the new number of allocated channels.
*/
extern int Mix_AllocateChannels(int numchans);
Oct 21, 1999
Oct 21, 1999
79
80
81
82
83
/* Find out what the actual audio device parameters are.
This function returns 1 if the audio has been opened, 0 otherwise.
*/
extern int Mix_QuerySpec(int *frequency, Uint16 *format, int *channels);
Oct 21, 1999
Oct 21, 1999
84
/* Load a wave file or a music (.mod .s3m .it .xm) file */
Oct 21, 1999
Oct 21, 1999
85
86
87
88
extern Mix_Chunk *Mix_LoadWAV_RW(SDL_RWops *src, int freesrc);
#define Mix_LoadWAV(file) Mix_LoadWAV_RW(SDL_RWFromFile(file, "rb"), 1)
extern Mix_Music *Mix_LoadMUS(const char *file);
Oct 21, 1999
Oct 21, 1999
89
90
91
/* Load a wave file of the mixer format from a memory buffer */
extern Mix_Chunk *Mix_QuickLoad_WAV(Uint8 *mem);
Oct 21, 1999
Oct 21, 1999
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/* Free an audio chunk previously loaded */
extern void Mix_FreeChunk(Mix_Chunk *chunk);
extern void Mix_FreeMusic(Mix_Music *music);
/* Add your own music player or additional mixer function.
If 'mix_func' is NULL, the default music player is re-enabled.
*/
extern void Mix_HookMusic(void (*mix_func)(void *udata, Uint8 *stream, int len),
void *arg);
/* Get a pointer to the user data for the current music hook */
extern void *Mix_GetMusicHookData(void);
/* Reserve the first channels (0 -> n-1) for the application, i.e. don't allocate
them dynamically to the next sample if requested with a -1 value below.
Returns the number of reserved channels.
*/
extern int Mix_ReserveChannels(int num);
Oct 26, 1999
Oct 26, 1999
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/* Channel grouping functions */
/* Attach a tag to a channel. A tag can be assigned to several mixer
channels, to form groups of channels.
If 'tag' is -1, the tag is removed (actually -1 is the tag used to
represent the group of all the channels).
Returns true if everything was OK.
*/
extern int Mix_GroupChannel(int which, int tag);
/* Assign several consecutive channels to a group */
extern int Mix_GroupChannels(int from, int to, int tag);
/* Finds the first available channel in a group of channels */
extern int Mix_GroupAvailable(int tag);
/* Returns the number of channels in a group. This is also a subtle
way to get the total number of channels when 'tag' is -1
*/
extern int Mix_GroupCount(int tag);
Oct 27, 1999
Oct 27, 1999
128
129
130
131
/* Finds the "oldest" sample playing in a group of channels */
extern int Mix_GroupOldest(int tag);
/* Finds the "most recent" (i.e. last) sample playing in a group of channels */
extern int Mix_GroupNewer(int tag);
Oct 26, 1999
Oct 26, 1999
132
Oct 21, 1999
Oct 21, 1999
133
134
135
136
137
138
/* Play an audio chunk on a specific channel.
If the specified channel is -1, play on the first free channel.
If 'loops' is greater than zero, loop the sound that many times.
If 'loops' is -1, loop inifinitely (~65000 times).
Returns which channel was used to play the sound.
*/
Oct 26, 1999
Oct 26, 1999
139
140
141
#define Mix_PlayChannel(channel,chunk,loops) Mix_PlayChannelTimed(channel,chunk,loops,-1)
/* The same as above, but the sound is played at most 'ticks' milliseconds */
extern int Mix_PlayChannelTimed(int channel, Mix_Chunk *chunk, int loops, int ticks);
Oct 21, 1999
Oct 21, 1999
142
143
extern int Mix_PlayMusic(Mix_Music *music, int loops);
Oct 23, 1999
Oct 23, 1999
144
145
/* Fade in music or a channel over "ms" milliseconds, same semantics as the "Play" functions */
extern int Mix_FadeInMusic(Mix_Music *music, int loops, int ms);
Oct 26, 1999
Oct 26, 1999
146
147
#define Mix_FadeInChannel(channel,chunk,loops,ms) Mix_FadeInChannelTimed(channel,chunk,loops,ms,-1)
extern int Mix_FadeInChannelTimed(int channel, Mix_Chunk *chunk, int loops, int ms, int ticks);
Oct 23, 1999
Oct 23, 1999
148
Oct 21, 1999
Oct 21, 1999
149
150
151
152
153
154
155
156
157
158
159
/* Set the volume in the range of 0-128 of a specific channel or chunk.
If the specified channel is -1, set volume for all channels.
Returns the original volume.
If the specified volume is -1, just return the current volume.
*/
extern int Mix_Volume(int channel, int volume);
extern int Mix_VolumeChunk(Mix_Chunk *chunk, int volume);
extern int Mix_VolumeMusic(int volume);
/* Halt playing of a particular channel */
extern int Mix_HaltChannel(int channel);
Oct 26, 1999
Oct 26, 1999
160
extern int Mix_HaltGroup(int tag);
Oct 21, 1999
Oct 21, 1999
161
162
extern int Mix_HaltMusic(void);
Oct 26, 1999
Oct 26, 1999
163
164
165
166
167
168
/* Change the expiration delay for a particular channel.
The sample will stop playing after the 'ticks' milliseconds have elapsed,
or remove the expiration if 'ticks' is -1
*/
extern int Mix_ExpireChannel(int channel, int ticks);
Oct 23, 1999
Oct 23, 1999
169
170
171
172
173
/* Halt a channel, fading it out progressively till it's silent
The ms parameter indicates the number of milliseconds the fading
will take.
*/
extern int Mix_FadeOutChannel(int which, int ms);
Oct 26, 1999
Oct 26, 1999
174
extern int Mix_FadeOutGroup(int tag, int ms);
Oct 23, 1999
Oct 23, 1999
175
176
177
178
179
180
extern int Mix_FadeOutMusic(int ms);
/* Query the fading status of a channel */
extern Mix_Fading Mix_FadingMusic(void);
extern Mix_Fading Mix_FadingChannel(int which);
Oct 21, 1999
Oct 21, 1999
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/* Pause/Resume a particular channel */
extern void Mix_Pause(int channel);
extern void Mix_Resume(int channel);
/* Pause/Resume the music stream */
extern void Mix_PauseMusic(void);
extern void Mix_ResumeMusic(void);
extern void Mix_RewindMusic(void);
/* Check the status of a specific channel.
If the specified channel is -1, check all channels.
*/
extern int Mix_Playing(int channel);
extern int Mix_PlayingMusic(void);
/* Stop music and set external music playback command */
extern int Mix_SetMusicCMD(const char *command);
/* Close the mixer, halting all playing audio */
extern void Mix_CloseAudio(void);
/* We'll use SDL for reporting errors */
#define Mix_SetError SDL_SetError
#define Mix_GetError SDL_GetError
Oct 27, 1999
Oct 27, 1999
206
207
208
209
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
};
#endif
Oct 21, 1999
Oct 21, 1999
210
211
212
#include <SDL/close_code.h>
#endif /* _MIXER_H_ */