Skip to content

Latest commit

 

History

History
221 lines (181 loc) · 7.76 KB

mixer.h

File metadata and controls

221 lines (181 loc) · 7.76 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
/*
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_
Dec 21, 1999
Dec 21, 1999
28
29
30
#include "SDL_types.h"
#include "SDL_rwops.h"
#include "SDL_audio.h"
Oct 21, 1999
Oct 21, 1999
31
32
33
#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
/* Free an audio chunk previously loaded */
extern void Mix_FreeChunk(Mix_Chunk *chunk);
extern void Mix_FreeMusic(Mix_Music *music);
Dec 26, 1999
Dec 26, 1999
96
97
98
99
100
101
102
/* Set a function that is called after all mixing is performed.
This can be used to provide real-time visual display of the audio stream
or add a custom mixer filter for the stream data.
*/
extern void Mix_SetPostMix(void (*mix_func)
(void *udata, Uint8 *stream, int len), void *arg);
Oct 21, 1999
Oct 21, 1999
103
104
105
/* Add your own music player or additional mixer function.
If 'mix_func' is NULL, the default music player is re-enabled.
*/
Dec 26, 1999
Dec 26, 1999
106
107
extern void Mix_HookMusic(void (*mix_func)
(void *udata, Uint8 *stream, int len), void *arg);
Oct 21, 1999
Oct 21, 1999
108
109
110
111
112
113
114
115
116
117
/* 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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* 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
135
136
137
138
/* 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
139
Oct 21, 1999
Oct 21, 1999
140
141
142
143
144
145
/* 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
146
147
148
#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
149
150
extern int Mix_PlayMusic(Mix_Music *music, int loops);
Oct 23, 1999
Oct 23, 1999
151
152
/* 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
153
154
#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
155
Oct 21, 1999
Oct 21, 1999
156
157
158
159
160
161
162
163
164
165
166
/* 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
167
extern int Mix_HaltGroup(int tag);
Oct 21, 1999
Oct 21, 1999
168
169
extern int Mix_HaltMusic(void);
Oct 26, 1999
Oct 26, 1999
170
171
172
173
174
175
/* 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
176
177
178
179
180
/* 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
181
extern int Mix_FadeOutGroup(int tag, int ms);
Oct 23, 1999
Oct 23, 1999
182
183
184
185
186
187
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
188
189
190
/* Pause/Resume a particular channel */
extern void Mix_Pause(int channel);
extern void Mix_Resume(int channel);
Nov 1, 1999
Nov 1, 1999
191
extern int Mix_Paused(int channel);
Oct 21, 1999
Oct 21, 1999
192
193
194
195
196
/* Pause/Resume the music stream */
extern void Mix_PauseMusic(void);
extern void Mix_ResumeMusic(void);
extern void Mix_RewindMusic(void);
Nov 1, 1999
Nov 1, 1999
197
extern int Mix_PausedMusic(void);
Oct 21, 1999
Oct 21, 1999
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
/* 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
215
216
217
218
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
};
#endif
Oct 21, 1999
Oct 21, 1999
219
220
221
#include <SDL/close_code.h>
#endif /* _MIXER_H_ */