Skip to content

Latest commit

 

History

History
1375 lines (1279 loc) · 29.4 KB

music.c

File metadata and controls

1375 lines (1279 loc) · 29.4 KB
 
Oct 21, 1999
Oct 21, 1999
1
/*
Dec 14, 2001
Dec 14, 2001
2
SDL_mixer: An audio mixer library based on the SDL library
Dec 8, 2008
Dec 8, 2008
3
Copyright (C) 1997-2009 Sam Lantinga
Dec 26, 1999
Dec 26, 1999
4
Dec 14, 2001
Dec 14, 2001
5
6
7
8
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.
Dec 26, 1999
Dec 26, 1999
9
Dec 14, 2001
Dec 14, 2001
10
11
12
13
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.
Dec 26, 1999
Dec 26, 1999
14
Dec 14, 2001
Dec 14, 2001
15
16
17
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
Dec 26, 1999
Dec 26, 1999
18
Dec 14, 2001
Dec 14, 2001
19
20
Sam Lantinga
slouken@libsdl.org
Oct 21, 1999
Oct 21, 1999
21
22
*/
Dec 14, 2001
Dec 14, 2001
23
/* $Id$ */
Dec 14, 2001
Dec 14, 2001
24
Oct 23, 1999
Oct 23, 1999
25
26
#include <stdlib.h>
#include <string.h>
Oct 16, 2001
Oct 16, 2001
27
#include <ctype.h>
Nov 19, 2005
Nov 19, 2005
28
#include <assert.h>
Dec 21, 1999
Dec 21, 1999
29
30
#include "SDL_endian.h"
#include "SDL_audio.h"
Dec 27, 1999
Dec 27, 1999
31
#include "SDL_timer.h"
Oct 21, 1999
Oct 21, 1999
32
Jan 14, 2000
Jan 14, 2000
33
#include "SDL_mixer.h"
Oct 21, 1999
Oct 21, 1999
34
35
36
37
38
39
40
41
42
43
44
45
/* The music command hack is UNIX specific */
#ifndef unix
#undef CMD_MUSIC
#endif
#ifdef CMD_MUSIC
#include "music_cmd.h"
#endif
#ifdef WAV_MUSIC
#include "wavestream.h"
#endif
Oct 3, 2009
Oct 3, 2009
46
47
#ifdef MOD_MUSIC
#include "music_mod.h"
Oct 21, 1999
Oct 21, 1999
48
49
#endif
#ifdef MID_MUSIC
Sep 5, 2001
Sep 5, 2001
50
51
52
53
54
55
56
57
58
59
60
# ifdef USE_TIMIDITY_MIDI
# include "timidity.h"
# endif
# ifdef USE_NATIVE_MIDI
# include "native_midi.h"
# endif
# if defined(USE_TIMIDITY_MIDI) && defined(USE_NATIVE_MIDI)
# define MIDI_ELSE else
# else
# define MIDI_ELSE
# endif
Oct 21, 1999
Oct 21, 1999
61
#endif
Jul 3, 2000
Jul 3, 2000
62
63
64
#ifdef OGG_MUSIC
#include "music_ogg.h"
#endif
Oct 21, 1999
Oct 21, 1999
65
#ifdef MP3_MUSIC
May 12, 2006
May 12, 2006
66
#include "dynamic_mp3.h"
Jul 15, 2007
Jul 15, 2007
67
68
69
70
#endif
#ifdef MP3_MAD_MUSIC
#include "music_mad.h"
#endif
Feb 27, 2008
Feb 27, 2008
71
72
73
#ifdef FLAC_MUSIC
#include "music_flac.h"
#endif
Oct 21, 1999
Oct 21, 1999
74
Jul 15, 2007
Jul 15, 2007
75
#if defined(MP3_MUSIC) || defined(MP3_MAD_MUSIC)
Oct 21, 1999
Oct 21, 1999
76
77
78
static SDL_AudioSpec used_mixer;
#endif
Jul 15, 2007
Jul 15, 2007
79
Feb 1, 2000
Feb 1, 2000
80
81
int volatile music_active = 1;
static int volatile music_stopped = 0;
Oct 21, 1999
Oct 21, 1999
82
83
static int music_loops = 0;
static char *music_cmd = NULL;
Feb 1, 2000
Feb 1, 2000
84
static Mix_Music * volatile music_playing = NULL;
Nov 11, 1999
Nov 11, 1999
85
static int music_volume = MIX_MAX_VOLUME;
Oct 23, 1999
Oct 23, 1999
86
Oct 21, 1999
Oct 21, 1999
87
struct _Mix_Music {
May 19, 2002
May 19, 2002
88
Mix_MusicType type;
Oct 21, 1999
Oct 21, 1999
89
90
91
92
93
94
95
union {
#ifdef CMD_MUSIC
MusicCMD *cmd;
#endif
#ifdef WAV_MUSIC
WAVStream *wave;
#endif
Oct 3, 2009
Oct 3, 2009
96
97
#ifdef MOD_MUSIC
struct MODULE *module;
Oct 21, 1999
Oct 21, 1999
98
99
#endif
#ifdef MID_MUSIC
Sep 5, 2001
Sep 5, 2001
100
#ifdef USE_TIMIDITY_MIDI
Oct 21, 1999
Oct 21, 1999
101
MidiSong *midi;
Sep 5, 2001
Sep 5, 2001
102
#endif
Aug 19, 2001
Aug 19, 2001
103
104
105
#ifdef USE_NATIVE_MIDI
NativeMidiSong *nativemidi;
#endif
Oct 21, 1999
Oct 21, 1999
106
#endif
Jul 3, 2000
Jul 3, 2000
107
108
109
#ifdef OGG_MUSIC
OGG_music *ogg;
#endif
Oct 21, 1999
Oct 21, 1999
110
111
#ifdef MP3_MUSIC
SMPEG *mp3;
Jul 15, 2007
Jul 15, 2007
112
113
114
#endif
#ifdef MP3_MAD_MUSIC
mad_data *mp3_mad;
Feb 27, 2008
Feb 27, 2008
115
116
117
#endif
#ifdef FLAC_MUSIC
FLAC_music *flac;
Oct 21, 1999
Oct 21, 1999
118
119
#endif
} data;
Oct 23, 1999
Oct 23, 1999
120
Mix_Fading fading;
Nov 11, 1999
Nov 11, 1999
121
122
int fade_step;
int fade_steps;
Oct 21, 1999
Oct 21, 1999
123
124
int error;
};
Dec 27, 1999
Dec 27, 1999
125
#ifdef MID_MUSIC
Sep 5, 2001
Sep 5, 2001
126
#ifdef USE_TIMIDITY_MIDI
Oct 21, 1999
Oct 21, 1999
127
static int timidity_ok;
Dec 17, 2001
Dec 17, 2001
128
static int samplesize;
Sep 5, 2001
Sep 5, 2001
129
#endif
Aug 19, 2001
Aug 19, 2001
130
131
132
#ifdef USE_NATIVE_MIDI
static int native_midi_ok;
#endif
Dec 27, 1999
Dec 27, 1999
133
#endif
Oct 21, 1999
Oct 21, 1999
134
Nov 11, 1999
Nov 11, 1999
135
136
137
/* Used to calculate fading steps */
static int ms_per_step;
Jun 5, 2009
Jun 5, 2009
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/* rcg06042009 report available decoders at runtime. */
static const char **music_decoders = NULL;
static int num_decoders = 0;
int Mix_NumMusicDecoders(void)
{
return(num_decoders);
}
const char *Mix_GetMusicDecoder(int index)
{
if ((index < 0) || (index >= num_decoders)) {
return NULL;
}
return(music_decoders[index]);
}
static void add_music_decoder(const char *decoder)
{
Oct 3, 2009
Oct 3, 2009
157
void *ptr = realloc(music_decoders, (num_decoders + 1) * sizeof (const char **));
Jun 5, 2009
Jun 5, 2009
158
159
160
if (ptr == NULL) {
return; /* oh well, go on without it. */
}
Oct 3, 2009
Oct 3, 2009
161
music_decoders = (const char **) ptr;
Jun 5, 2009
Jun 5, 2009
162
163
164
music_decoders[num_decoders++] = decoder;
}
Oct 30, 1999
Oct 30, 1999
165
/* Local low-level functions prototypes */
Nov 9, 2003
Nov 9, 2003
166
static void music_internal_initialize_volume(void);
May 16, 2002
May 16, 2002
167
168
169
170
171
static void music_internal_volume(int volume);
static int music_internal_play(Mix_Music *music, double position);
static int music_internal_position(double position);
static int music_internal_playing();
static void music_internal_halt(void);
Oct 26, 1999
Oct 26, 1999
172
Dec 27, 1999
Dec 27, 1999
173
174
175
176
177
178
179
180
181
182
183
184
/* Support for hooking when the music has finished */
static void (*music_finished_hook)(void) = NULL;
void Mix_HookMusicFinished(void (*music_finished)(void))
{
SDL_LockAudio();
music_finished_hook = music_finished;
SDL_UnlockAudio();
}
Nov 19, 2005
Nov 19, 2005
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
/* If music isn't playing, halt it if no looping is required, restart it */
/* otherwhise. NOP if the music is playing */
static int music_halt_or_loop (void)
{
/* Restart music if it has to loop */
if (!music_internal_playing())
{
/* Restart music if it has to loop at a high level */
if (music_loops && --music_loops)
{
Mix_Fading current_fade = music_playing->fading;
music_internal_play(music_playing, 0.0);
music_playing->fading = current_fade;
}
else
{
music_internal_halt();
if (music_finished_hook)
music_finished_hook();
return 0;
}
}
return 1;
}
Oct 21, 1999
Oct 21, 1999
215
216
217
/* Mixing function */
void music_mixer(void *udata, Uint8 *stream, int len)
{
Oct 2, 2009
Oct 2, 2009
218
219
int left = 0;
May 16, 2002
May 16, 2002
220
if ( music_playing && music_active ) {
Nov 1, 1999
Nov 1, 1999
221
/* Handle fading */
Nov 11, 1999
Nov 11, 1999
222
223
if ( music_playing->fading != MIX_NO_FADING ) {
if ( music_playing->fade_step++ < music_playing->fade_steps ) {
May 16, 2002
May 16, 2002
224
int volume;
Dec 26, 1999
Dec 26, 1999
225
226
int fade_step = music_playing->fade_step;
int fade_steps = music_playing->fade_steps;
Nov 11, 1999
Nov 11, 1999
227
Oct 23, 1999
Oct 23, 1999
228
if ( music_playing->fading == MIX_FADING_OUT ) {
May 16, 2002
May 16, 2002
229
volume = (music_volume * (fade_steps-fade_step)) / fade_steps;
Nov 11, 1999
Nov 11, 1999
230
} else { /* Fading in */
May 16, 2002
May 16, 2002
231
volume = (music_volume * fade_step) / fade_steps;
Oct 23, 1999
Oct 23, 1999
232
}
May 16, 2002
May 16, 2002
233
music_internal_volume(volume);
Oct 23, 1999
Oct 23, 1999
234
235
} else {
if ( music_playing->fading == MIX_FADING_OUT ) {
May 16, 2002
May 16, 2002
236
237
238
239
music_internal_halt();
if ( music_finished_hook ) {
music_finished_hook();
}
Nov 11, 1999
Nov 11, 1999
240
return;
Oct 23, 1999
Oct 23, 1999
241
}
Nov 11, 1999
Nov 11, 1999
242
music_playing->fading = MIX_NO_FADING;
Oct 23, 1999
Oct 23, 1999
243
244
}
}
Nov 19, 2005
Nov 19, 2005
245
246
247
248
249
if (music_halt_or_loop() == 0)
return;
Oct 21, 1999
Oct 21, 1999
250
251
252
253
254
255
256
257
switch (music_playing->type) {
#ifdef CMD_MUSIC
case MUS_CMD:
/* The playing is done externally */
break;
#endif
#ifdef WAV_MUSIC
case MUS_WAV:
Oct 2, 2009
Oct 2, 2009
258
left = WAVStream_PlaySome(stream, len);
Oct 21, 1999
Oct 21, 1999
259
260
break;
#endif
Oct 3, 2009
Oct 3, 2009
261
#ifdef MOD_MUSIC
Oct 21, 1999
Oct 21, 1999
262
case MUS_MOD:
Oct 3, 2009
Oct 3, 2009
263
left = MOD_playAudio(music_playing->data.module, stream, len);
Oct 21, 1999
Oct 21, 1999
264
265
266
break;
#endif
#ifdef MID_MUSIC
Sep 5, 2001
Sep 5, 2001
267
#ifdef USE_TIMIDITY_MIDI
Oct 21, 1999
Oct 21, 1999
268
case MUS_MID:
Aug 19, 2001
Aug 19, 2001
269
270
271
272
if ( timidity_ok ) {
int samples = len / samplesize;
Timidity_PlaySome(stream, samples);
}
Oct 21, 1999
Oct 21, 1999
273
274
break;
#endif
Sep 5, 2001
Sep 5, 2001
275
#endif
Jul 3, 2000
Jul 3, 2000
276
277
#ifdef OGG_MUSIC
case MUS_OGG:
Nov 19, 2005
Nov 19, 2005
278
Oct 2, 2009
Oct 2, 2009
279
left = OGG_playAudio(music_playing->data.ogg, stream, len);
Jul 3, 2000
Jul 3, 2000
280
281
break;
#endif
Feb 27, 2008
Feb 27, 2008
282
283
#ifdef FLAC_MUSIC
case MUS_FLAC:
Oct 2, 2009
Oct 2, 2009
284
left = FLAC_playAudio(music_playing->data.flac, stream, len);
Feb 27, 2008
Feb 27, 2008
285
286
break;
#endif
Oct 21, 1999
Oct 21, 1999
287
#ifdef MP3_MUSIC
Dec 26, 1999
Dec 26, 1999
288
case MUS_MP3:
Oct 2, 2009
Oct 2, 2009
289
left = (len - smpeg.SMPEG_playAudio(music_playing->data.mp3, stream, len));
Oct 21, 1999
Oct 21, 1999
290
break;
Jul 15, 2007
Jul 15, 2007
291
292
293
#endif
#ifdef MP3_MAD_MUSIC
case MUS_MP3_MAD:
Oct 2, 2009
Oct 2, 2009
294
left = mad_getSamples(music_playing->data.mp3_mad, stream, len);
Jul 15, 2007
Jul 15, 2007
295
break;
Oct 21, 1999
Oct 21, 1999
296
297
298
299
300
301
#endif
default:
/* Unknown music type?? */
break;
}
}
Oct 2, 2009
Oct 2, 2009
302
303
304
305
306
/* Handle seamless music looping */
if (left > 0 && left < len && music_halt_or_loop()) {
music_mixer(udata, stream+(len-left), left);
}
Oct 21, 1999
Oct 21, 1999
307
308
309
310
311
}
/* Initialize the music players with a certain desired audio format */
int open_music(SDL_AudioSpec *mixer)
{
Oct 3, 2009
Oct 3, 2009
312
int music_error = 0;
Oct 21, 1999
Oct 21, 1999
313
314
315
316
#ifdef WAV_MUSIC
if ( WAVStream_Init(mixer) < 0 ) {
++music_error;
Jun 5, 2009
Jun 5, 2009
317
318
} else {
add_music_decoder("WAVE");
Oct 21, 1999
Oct 21, 1999
319
320
}
#endif
Oct 3, 2009
Oct 3, 2009
321
322
#ifdef MOD_MUSIC
if ( MOD_init(mixer) < 0 ) {
Oct 21, 1999
Oct 21, 1999
323
++music_error;
Oct 3, 2009
Oct 3, 2009
324
325
} else {
add_music_decoder("MIKMOD");
Oct 21, 1999
Oct 21, 1999
326
327
328
}
#endif
#ifdef MID_MUSIC
Sep 5, 2001
Sep 5, 2001
329
#ifdef USE_TIMIDITY_MIDI
Dec 17, 2001
Dec 17, 2001
330
samplesize = mixer->size / mixer->samples;
Aug 19, 2001
Aug 19, 2001
331
if ( Timidity_Init(mixer->freq, mixer->format,
Aug 20, 2001
Aug 20, 2001
332
mixer->channels, mixer->samples) == 0 ) {
Aug 19, 2001
Aug 19, 2001
333
timidity_ok = 1;
Jun 5, 2009
Jun 5, 2009
334
add_music_decoder("TIMIDITY");
Oct 21, 1999
Oct 21, 1999
335
336
337
} else {
timidity_ok = 0;
}
Sep 5, 2001
Sep 5, 2001
338
#endif
Aug 19, 2001
Aug 19, 2001
339
#ifdef USE_NATIVE_MIDI
Sep 5, 2001
Sep 5, 2001
340
#ifdef USE_TIMIDITY_MIDI
Aug 19, 2001
Aug 19, 2001
341
native_midi_ok = !timidity_ok;
Oct 3, 2009
Oct 3, 2009
342
343
344
if ( !native_midi_ok ) {
native_midi_ok = (getenv("SDL_NATIVE_MUSIC") != NULL);
}
Sep 5, 2001
Sep 5, 2001
345
346
if ( native_midi_ok )
#endif
Aug 19, 2001
Aug 19, 2001
347
native_midi_ok = native_midi_detect();
Jun 5, 2009
Jun 5, 2009
348
349
if ( native_midi_ok )
add_music_decoder("NATIVEMIDI");
Aug 19, 2001
Aug 19, 2001
350
#endif
Oct 21, 1999
Oct 21, 1999
351
#endif
Jul 3, 2000
Jul 3, 2000
352
353
354
#ifdef OGG_MUSIC
if ( OGG_init(mixer) < 0 ) {
++music_error;
Jun 5, 2009
Jun 5, 2009
355
356
} else {
add_music_decoder("OGG");
Jul 3, 2000
Jul 3, 2000
357
358
}
#endif
Feb 27, 2008
Feb 27, 2008
359
360
361
#ifdef FLAC_MUSIC
if ( FLAC_init(mixer) < 0 ) {
++music_error;
Jun 5, 2009
Jun 5, 2009
362
363
} else {
add_music_decoder("FLAC");
Feb 27, 2008
Feb 27, 2008
364
365
}
#endif
Jul 15, 2007
Jul 15, 2007
366
#if defined(MP3_MUSIC) || defined(MP3_MAD_MUSIC)
Oct 21, 1999
Oct 21, 1999
367
368
/* Keep a copy of the mixer */
used_mixer = *mixer;
Jun 5, 2009
Jun 5, 2009
369
add_music_decoder("MP3");
Oct 21, 1999
Oct 21, 1999
370
#endif
Jun 5, 2009
Jun 5, 2009
371
Feb 1, 2000
Feb 1, 2000
372
music_playing = NULL;
Oct 26, 1999
Oct 26, 1999
373
music_stopped = 0;
Oct 21, 1999
Oct 21, 1999
374
375
376
377
378
if ( music_error ) {
return(-1);
}
Mix_VolumeMusic(SDL_MIX_MAXVOLUME);
Dec 26, 1999
Dec 26, 1999
379
/* Calculate the number of ms for each callback */
Feb 2, 2000
Feb 2, 2000
380
ms_per_step = (int) (((float)mixer->samples * 1000.0) / mixer->freq);
Nov 11, 1999
Nov 11, 1999
381
Oct 21, 1999
Oct 21, 1999
382
383
384
return(0);
}
Oct 16, 2001
Oct 16, 2001
385
386
387
388
389
390
391
392
393
394
395
396
397
/* Portable case-insensitive string compare function */
int MIX_string_equals(const char *str1, const char *str2)
{
while ( *str1 && *str2 ) {
if ( toupper((unsigned char)*str1) !=
toupper((unsigned char)*str2) )
break;
++str1;
++str2;
}
return (!*str1 && !*str2);
}
Oct 21, 1999
Oct 21, 1999
398
399
400
401
/* Load a music file */
Mix_Music *Mix_LoadMUS(const char *file)
{
FILE *fp;
Oct 16, 2001
Oct 16, 2001
402
char *ext;
Aug 21, 2004
Aug 21, 2004
403
Uint8 magic[5], moremagic[9];
Oct 21, 1999
Oct 21, 1999
404
405
406
407
408
409
410
411
Mix_Music *music;
/* Figure out what kind of file this is */
fp = fopen(file, "rb");
if ( (fp == NULL) || !fread(magic, 4, 1, fp) ) {
if ( fp != NULL ) {
fclose(fp);
}
Dec 26, 1999
Dec 26, 1999
412
Mix_SetError("Couldn't read from '%s'", file);
Oct 21, 1999
Oct 21, 1999
413
414
return(NULL);
}
Aug 21, 2004
Aug 21, 2004
415
416
417
418
if (!fread(moremagic, 8, 1, fp)) {
Mix_SetError("Couldn't read from '%s'", file);
return(NULL);
}
Oct 21, 1999
Oct 21, 1999
419
magic[4] = '\0';
Aug 21, 2004
Aug 21, 2004
420
moremagic[8] = '\0';
Oct 21, 1999
Oct 21, 1999
421
422
fclose(fp);
Oct 16, 2001
Oct 16, 2001
423
424
425
426
/* Figure out the file extension, so we can determine the type */
ext = strrchr(file, '.');
if ( ext ) ++ext; /* skip the dot in the extension */
Oct 21, 1999
Oct 21, 1999
427
428
429
/* Allocate memory for the music structure */
music = (Mix_Music *)malloc(sizeof(Mix_Music));
if ( music == NULL ) {
Dec 26, 1999
Dec 26, 1999
430
Mix_SetError("Out of memory");
Oct 21, 1999
Oct 21, 1999
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
return(NULL);
}
music->error = 0;
#ifdef CMD_MUSIC
if ( music_cmd ) {
music->type = MUS_CMD;
music->data.cmd = MusicCMD_LoadSong(music_cmd, file);
if ( music->data.cmd == NULL ) {
music->error = 1;
}
} else
#endif
#ifdef WAV_MUSIC
/* WAVE files have the magic four bytes "RIFF"
AIFF files have the magic 12 bytes "FORM" XXXX "AIFF"
*/
Nov 30, 2001
Nov 30, 2001
448
if ( (ext && MIX_string_equals(ext, "WAV")) ||
Aug 21, 2004
Aug 21, 2004
449
((strcmp((char *)magic, "RIFF") == 0) && (strcmp((char *)(moremagic+4), "WAVE") == 0)) ||
Mar 4, 2000
Mar 4, 2000
450
(strcmp((char *)magic, "FORM") == 0) ) {
Oct 21, 1999
Oct 21, 1999
451
music->type = MUS_WAV;
Mar 4, 2000
Mar 4, 2000
452
music->data.wave = WAVStream_LoadSong(file, (char *)magic);
Oct 21, 1999
Oct 21, 1999
453
if ( music->data.wave == NULL ) {
Nov 30, 2001
Nov 30, 2001
454
Mix_SetError("Unable to load WAV file");
Oct 21, 1999
Oct 21, 1999
455
456
457
458
459
460
music->error = 1;
}
} else
#endif
#ifdef MID_MUSIC
/* MIDI files have the magic four bytes "MThd" */
Nov 30, 2001
Nov 30, 2001
461
462
if ( (ext && MIX_string_equals(ext, "MID")) ||
(ext && MIX_string_equals(ext, "MIDI")) ||
Aug 21, 2004
Aug 21, 2004
463
464
465
strcmp((char *)magic, "MThd") == 0 ||
( strcmp((char *)magic, "RIFF") == 0 &&
strcmp((char *)(moremagic+4), "RMID") == 0 ) ) {
Oct 21, 1999
Oct 21, 1999
466
music->type = MUS_MID;
Aug 19, 2001
Aug 19, 2001
467
468
#ifdef USE_NATIVE_MIDI
if ( native_midi_ok ) {
Sep 26, 2009
Sep 26, 2009
469
music->data.nativemidi = native_midi_loadsong(file);
Aug 19, 2001
Aug 19, 2001
470
471
472
473
if ( music->data.nativemidi == NULL ) {
Mix_SetError("%s", native_midi_error());
music->error = 1;
}
Sep 5, 2001
Sep 5, 2001
474
} MIDI_ELSE
Aug 19, 2001
Aug 19, 2001
475
#endif
Sep 5, 2001
Sep 5, 2001
476
#ifdef USE_TIMIDITY_MIDI
Oct 21, 1999
Oct 21, 1999
477
if ( timidity_ok ) {
Oct 10, 2009
Oct 10, 2009
478
music->data.midi = Timidity_LoadSong(file);
Oct 21, 1999
Oct 21, 1999
479
if ( music->data.midi == NULL ) {
Dec 26, 1999
Dec 26, 1999
480
Mix_SetError("%s", Timidity_Error());
Oct 21, 1999
Oct 21, 1999
481
482
music->error = 1;
}
Aug 19, 2001
Aug 19, 2001
483
} else {
Dec 26, 1999
Dec 26, 1999
484
Mix_SetError("%s", Timidity_Error());
Oct 21, 1999
Oct 21, 1999
485
486
music->error = 1;
}
Sep 5, 2001
Sep 5, 2001
487
#endif
Oct 21, 1999
Oct 21, 1999
488
489
} else
#endif
Jul 3, 2000
Jul 3, 2000
490
491
#ifdef OGG_MUSIC
/* Ogg Vorbis files have the magic four bytes "OggS" */
Nov 30, 2001
Nov 30, 2001
492
if ( (ext && MIX_string_equals(ext, "OGG")) ||
Nov 30, 2001
Nov 30, 2001
493
strcmp((char *)magic, "OggS") == 0 ) {
Jul 3, 2000
Jul 3, 2000
494
495
496
497
498
499
500
music->type = MUS_OGG;
music->data.ogg = OGG_new(file);
if ( music->data.ogg == NULL ) {
music->error = 1;
}
} else
#endif
Feb 27, 2008
Feb 27, 2008
501
502
503
504
505
506
507
508
509
510
511
#ifdef FLAC_MUSIC
/* FLAC files have the magic four bytes "fLaC" */
if ( (ext && MIX_string_equals(ext, "FLAC")) ||
strcmp((char *)magic, "fLaC") == 0 ) {
music->type = MUS_FLAC;
music->data.flac = FLAC_new(file);
if ( music->data.flac == NULL ) {
music->error = 1;
}
} else
#endif
Oct 21, 1999
Oct 21, 1999
512
#ifdef MP3_MUSIC
Nov 30, 2001
Nov 30, 2001
513
if ( (ext && MIX_string_equals(ext, "MPG")) ||
Jun 26, 2002
Jun 26, 2002
514
(ext && MIX_string_equals(ext, "MP3")) ||
Nov 30, 2001
Nov 30, 2001
515
(ext && MIX_string_equals(ext, "MPEG")) ||
Sep 26, 2009
Sep 26, 2009
516
517
(magic[0] == 0xFF && (magic[1] & 0xF0) == 0xF0) ||
(strncmp((char *)magic, "ID3", 3) == 0) ) {
May 12, 2006
May 12, 2006
518
519
520
521
522
523
524
525
526
527
if ( Mix_InitMP3() == 0 ) {
SMPEG_Info info;
music->type = MUS_MP3;
music->data.mp3 = smpeg.SMPEG_new(file, &info, 0);
if ( !info.has_audio ) {
Mix_SetError("MPEG file does not have any audio stream.");
music->error = 1;
} else {
smpeg.SMPEG_actualSpec(music->data.mp3, &used_mixer);
}
Dec 21, 2004
Dec 21, 2004
528
} else {
May 12, 2006
May 12, 2006
529
music->error = 1;
Oct 21, 1999
Oct 21, 1999
530
531
532
}
} else
#endif
Jul 15, 2007
Jul 15, 2007
533
534
535
536
537
#ifdef MP3_MAD_MUSIC
if ( (ext && MIX_string_equals(ext, "MPG")) ||
(ext && MIX_string_equals(ext, "MP3")) ||
(ext && MIX_string_equals(ext, "MPEG")) ||
(ext && MIX_string_equals(ext, "MAD")) ||
Sep 26, 2009
Sep 26, 2009
538
539
(magic[0] == 0xFF && (magic[1] & 0xF0) == 0xF0) ||
(strncmp((char *)magic, "ID3", 3) == 0) ) {
Jul 15, 2007
Jul 15, 2007
540
541
542
543
544
545
546
547
music->type = MUS_MP3_MAD;
music->data.mp3_mad = mad_openFile(file, &used_mixer);
if (music->data.mp3_mad == 0) {
Mix_SetError("Could not initialize MPEG stream.");
music->error = 1;
}
} else
#endif
Oct 3, 2009
Oct 3, 2009
548
#ifdef MOD_MUSIC
Oct 21, 1999
Oct 21, 1999
549
550
if ( 1 ) {
music->type = MUS_MOD;
Oct 3, 2009
Oct 3, 2009
551
music->data.module = MOD_new(file);
Oct 21, 1999
Oct 21, 1999
552
553
554
555
556
557
if ( music->data.module == NULL ) {
music->error = 1;
}
} else
#endif
{
Dec 26, 1999
Dec 26, 1999
558
Mix_SetError("Unrecognized music format");
Oct 21, 1999
Oct 21, 1999
559
560
561
562
563
564
565
566
567
568
569
570
571
music->error = 1;
}
if ( music->error ) {
free(music);
music = NULL;
}
return(music);
}
/* Free a music chunk previously loaded */
void Mix_FreeMusic(Mix_Music *music)
{
if ( music ) {
May 16, 2002
May 16, 2002
572
573
574
575
576
577
578
579
580
581
582
/* Stop the music if it's currently playing */
SDL_LockAudio();
if ( music == music_playing ) {
/* Wait for any fade out to finish */
while ( music->fading == MIX_FADING_OUT ) {
SDL_UnlockAudio();
SDL_Delay(100);
SDL_LockAudio();
}
if ( music == music_playing ) {
music_internal_halt();
Oct 23, 1999
Oct 23, 1999
583
}
Oct 21, 1999
Oct 21, 1999
584
}
May 16, 2002
May 16, 2002
585
SDL_UnlockAudio();
Oct 21, 1999
Oct 21, 1999
586
587
588
589
590
591
592
593
594
595
596
switch (music->type) {
#ifdef CMD_MUSIC
case MUS_CMD:
MusicCMD_FreeSong(music->data.cmd);
break;
#endif
#ifdef WAV_MUSIC
case MUS_WAV:
WAVStream_FreeSong(music->data.wave);
break;
#endif
Oct 3, 2009
Oct 3, 2009
597
#ifdef MOD_MUSIC
Oct 21, 1999
Oct 21, 1999
598
case MUS_MOD:
Oct 3, 2009
Oct 3, 2009
599
MOD_delete(music->data.module);
Oct 21, 1999
Oct 21, 1999
600
601
602
603
break;
#endif
#ifdef MID_MUSIC
case MUS_MID:
Aug 19, 2001
Aug 19, 2001
604
605
606
#ifdef USE_NATIVE_MIDI
if ( native_midi_ok ) {
native_midi_freesong(music->data.nativemidi);
Sep 5, 2001
Sep 5, 2001
607
} MIDI_ELSE
Aug 19, 2001
Aug 19, 2001
608
#endif
Sep 5, 2001
Sep 5, 2001
609
#ifdef USE_TIMIDITY_MIDI
Aug 19, 2001
Aug 19, 2001
610
611
612
if ( timidity_ok ) {
Timidity_FreeSong(music->data.midi);
}
Sep 5, 2001
Sep 5, 2001
613
#endif
Oct 21, 1999
Oct 21, 1999
614
615
break;
#endif
Jul 3, 2000
Jul 3, 2000
616
617
618
619
620
#ifdef OGG_MUSIC
case MUS_OGG:
OGG_delete(music->data.ogg);
break;
#endif
Feb 27, 2008
Feb 27, 2008
621
622
623
624
625
#ifdef FLAC_MUSIC
case MUS_FLAC:
FLAC_delete(music->data.flac);
break;
#endif
Oct 21, 1999
Oct 21, 1999
626
#ifdef MP3_MUSIC
Dec 26, 1999
Dec 26, 1999
627
case MUS_MP3:
May 12, 2006
May 12, 2006
628
629
smpeg.SMPEG_delete(music->data.mp3);
Mix_QuitMP3();
Oct 21, 1999
Oct 21, 1999
630
break;
Jul 15, 2007
Jul 15, 2007
631
632
633
634
635
#endif
#ifdef MP3_MAD_MUSIC
case MUS_MP3_MAD:
mad_closeFile(music->data.mp3_mad);
break;
Oct 21, 1999
Oct 21, 1999
636
637
638
639
640
641
642
643
644
#endif
default:
/* Unknown music type?? */
break;
}
free(music);
}
}
May 19, 2002
May 19, 2002
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
/* Find out the music format of a mixer music, or the currently playing
music, if 'music' is NULL.
*/
Mix_MusicType Mix_GetMusicType(const Mix_Music *music)
{
Mix_MusicType type = MUS_NONE;
if ( music ) {
type = music->type;
} else {
SDL_LockAudio();
if ( music_playing ) {
type = music_playing->type;
}
SDL_UnlockAudio();
}
return(type);
}
May 16, 2002
May 16, 2002
664
665
666
/* Play a music chunk. Returns 0, or -1 if there was an error.
*/
static int music_internal_play(Mix_Music *music, double position)
Oct 21, 1999
Oct 21, 1999
667
{
May 16, 2002
May 16, 2002
668
669
670
671
672
673
674
int retval = 0;
/* Note the music we're playing */
if ( music_playing ) {
music_internal_halt();
}
music_playing = music;
Oct 30, 1999
Oct 30, 1999
675
May 16, 2002
May 16, 2002
676
/* Set the initial volume */
Nov 9, 2003
Nov 9, 2003
677
678
if ( music->type != MUS_MOD ) {
music_internal_initialize_volume();
May 16, 2002
May 16, 2002
679
680
681
}
/* Set up for playback */
Oct 21, 1999
Oct 21, 1999
682
683
switch (music->type) {
#ifdef CMD_MUSIC
May 16, 2002
May 16, 2002
684
685
686
case MUS_CMD:
MusicCMD_Start(music->data.cmd);
break;
Oct 21, 1999
Oct 21, 1999
687
688
#endif
#ifdef WAV_MUSIC
May 16, 2002
May 16, 2002
689
690
691
case MUS_WAV:
WAVStream_Start(music->data.wave);
break;
Oct 21, 1999
Oct 21, 1999
692
#endif
Oct 3, 2009
Oct 3, 2009
693
#ifdef MOD_MUSIC
May 16, 2002
May 16, 2002
694
case MUS_MOD:
Oct 3, 2009
Oct 3, 2009
695
MOD_play(music->data.module);
Nov 9, 2003
Nov 9, 2003
696
697
/* Player_SetVolume() does nothing before Player_Start() */
music_internal_initialize_volume();
May 16, 2002
May 16, 2002
698
break;
Oct 21, 1999
Oct 21, 1999
699
700
#endif
#ifdef MID_MUSIC
May 16, 2002
May 16, 2002
701
case MUS_MID:
Aug 19, 2001
Aug 19, 2001
702
#ifdef USE_NATIVE_MIDI
May 16, 2002
May 16, 2002
703
704
705
if ( native_midi_ok ) {
native_midi_start(music->data.nativemidi);
} MIDI_ELSE
Aug 19, 2001
Aug 19, 2001
706
#endif
Sep 5, 2001
Sep 5, 2001
707
#ifdef USE_TIMIDITY_MIDI
May 16, 2002
May 16, 2002
708
709
710
if ( timidity_ok ) {
Timidity_Start(music->data.midi);
}
Sep 5, 2001
Sep 5, 2001
711
#endif
May 16, 2002
May 16, 2002
712
break;
Oct 21, 1999
Oct 21, 1999
713
#endif
Jul 3, 2000
Jul 3, 2000
714
#ifdef OGG_MUSIC
May 16, 2002
May 16, 2002
715
716
717
case MUS_OGG:
OGG_play(music->data.ogg);
break;
Jul 3, 2000
Jul 3, 2000
718
#endif
Feb 27, 2008
Feb 27, 2008
719
720
721
722
723
#ifdef FLAC_MUSIC
case MUS_FLAC:
FLAC_play(music->data.flac);
break;
#endif
Oct 21, 1999
Oct 21, 1999
724
#ifdef MP3_MUSIC
May 16, 2002
May 16, 2002
725
case MUS_MP3:
May 12, 2006
May 12, 2006
726
727
728
smpeg.SMPEG_enableaudio(music->data.mp3,1);
smpeg.SMPEG_enablevideo(music->data.mp3,0);
smpeg.SMPEG_play(music_playing->data.mp3);
May 16, 2002
May 16, 2002
729
break;
Jul 15, 2007
Jul 15, 2007
730
731
732
733
734
#endif
#ifdef MP3_MAD_MUSIC
case MUS_MP3_MAD:
mad_start(music->data.mp3_mad);
break;
Oct 21, 1999
Oct 21, 1999
735
#endif
May 16, 2002
May 16, 2002
736
737
738
739
default:
Mix_SetError("Can't play unknown music type");
retval = -1;
break;
Oct 21, 1999
Oct 21, 1999
740
}
Oct 30, 1999
Oct 30, 1999
741
May 16, 2002
May 16, 2002
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
/* Set the playback position, note any errors if an offset is used */
if ( retval == 0 ) {
if ( position > 0.0 ) {
if ( music_internal_position(position) < 0 ) {
Mix_SetError("Position not implemented for music type");
retval = -1;
}
} else {
music_internal_position(0.0);
}
}
/* If the setup failed, we're not playing any music anymore */
if ( retval < 0 ) {
music_playing = NULL;
}
return(retval);
}
int Mix_FadeInMusicPos(Mix_Music *music, int loops, int ms, double position)
Oct 30, 1999
Oct 30, 1999
761
{
May 16, 2002
May 16, 2002
762
763
int retval;
Oct 30, 1999
Oct 30, 1999
764
765
/* Don't play null pointers :-) */
if ( music == NULL ) {
May 16, 2002
May 16, 2002
766
Mix_SetError("music parameter was NULL");
Oct 30, 1999
Oct 30, 1999
767
768
return(-1);
}
May 16, 2002
May 16, 2002
769
770
771
772
773
774
/* Setup the data */
if ( ms ) {
music->fading = MIX_FADING_IN;
} else {
music->fading = MIX_NO_FADING;
Oct 30, 1999
Oct 30, 1999
775
}
May 16, 2002
May 16, 2002
776
777
music->fade_step = 0;
music->fade_steps = ms/ms_per_step;
Oct 30, 1999
Oct 30, 1999
778
May 16, 2002
May 16, 2002
779
780
781
782
783
784
785
/* Play the puppy */
SDL_LockAudio();
/* If the current music is fading out, wait for the fade to complete */
while ( music_playing && (music_playing->fading == MIX_FADING_OUT) ) {
SDL_UnlockAudio();
SDL_Delay(100);
SDL_LockAudio();
Dec 26, 1999
Dec 26, 1999
786
}
Oct 21, 1999
Oct 21, 1999
787
music_active = 1;
Oct 30, 1999
Oct 30, 1999
788
music_loops = loops;
May 16, 2002
May 16, 2002
789
790
791
792
793
794
795
796
797
798
799
800
retval = music_internal_play(music, position);
SDL_UnlockAudio();
return(retval);
}
int Mix_FadeInMusic(Mix_Music *music, int loops, int ms)
{
return Mix_FadeInMusicPos(music, loops, ms, 0.0);
}
int Mix_PlayMusic(Mix_Music *music, int loops)
{
return Mix_FadeInMusicPos(music, loops, 0, 0.0);
Oct 23, 1999
Oct 23, 1999
801
802
}
May 16, 2002
May 16, 2002
803
804
/* Set the playing music position */
int music_internal_position(double position)
Dec 19, 2001
Dec 19, 2001
805
{
May 16, 2002
May 16, 2002
806
807
808
int retval = 0;
switch (music_playing->type) {
Oct 3, 2009
Oct 3, 2009
809
#ifdef MOD_MUSIC
May 16, 2002
May 16, 2002
810
case MUS_MOD:
Oct 3, 2009
Oct 3, 2009
811
MOD_jump_to_time(music_playing->data.module, position);
May 16, 2002
May 16, 2002
812
break;
Dec 20, 2001
Dec 20, 2001
813
814
#endif
#ifdef OGG_MUSIC
May 16, 2002
May 16, 2002
815
816
817
case MUS_OGG:
OGG_jump_to_time(music_playing->data.ogg, position);
break;
Jan 14, 2002
Jan 14, 2002
818
#endif
Feb 27, 2008
Feb 27, 2008
819
820
821
822
823
#ifdef FLAC_MUSIC
case MUS_FLAC:
FLAC_jump_to_time(music_playing->data.flac, position);
break;
#endif
Jan 14, 2002
Jan 14, 2002
824
#ifdef MP3_MUSIC
May 16, 2002
May 16, 2002
825
case MUS_MP3:
May 19, 2002
May 19, 2002
826
if ( position > 0.0 ) {
May 12, 2006
May 12, 2006
827
smpeg.SMPEG_skip(music_playing->data.mp3, (float)position);
May 19, 2002
May 19, 2002
828
} else {
May 12, 2006
May 12, 2006
829
830
smpeg.SMPEG_rewind(music_playing->data.mp3);
smpeg.SMPEG_play(music_playing->data.mp3);
Dec 19, 2001
Dec 19, 2001
831
}
May 16, 2002
May 16, 2002
832
break;
Jul 15, 2007
Jul 15, 2007
833
834
835
836
837
#endif
#ifdef MP3_MAD_MUSIC
case MUS_MP3_MAD:
mad_seek(music_playing->data.mp3_mad, position);
break;
May 16, 2002
May 16, 2002
838
839
840
841
842
#endif
default:
/* TODO: Implement this for other music backends */
retval = -1;
break;
Dec 19, 2001
Dec 19, 2001
843
}
May 16, 2002
May 16, 2002
844
return(retval);
Dec 19, 2001
Dec 19, 2001
845
}
May 16, 2002
May 16, 2002
846
int Mix_SetMusicPosition(double position)
Oct 23, 1999
Oct 23, 1999
847
{
May 16, 2002
May 16, 2002
848
849
850
851
852
853
854
int retval;
SDL_LockAudio();
if ( music_playing ) {
retval = music_internal_position(position);
if ( retval < 0 ) {
Mix_SetError("Position not implemented for music type");
Dec 19, 2001
Dec 19, 2001
855
}
May 16, 2002
May 16, 2002
856
857
858
} else {
Mix_SetError("Music isn't playing");
retval = -1;
Oct 23, 1999
Oct 23, 1999
859
}
May 16, 2002
May 16, 2002
860
SDL_UnlockAudio();
Oct 21, 1999
Oct 21, 1999
861
May 16, 2002
May 16, 2002
862
return(retval);
Dec 19, 2001
Dec 19, 2001
863
864
}
Nov 9, 2003
Nov 9, 2003
865
866
867
868
869
870
871
872
873
874
/* Set the music's initial volume */
static void music_internal_initialize_volume(void)
{
if ( music_playing->fading == MIX_FADING_IN ) {
music_internal_volume(0);
} else {
music_internal_volume(music_volume);
}
}
Oct 21, 1999
Oct 21, 1999
875
/* Set the music volume */
May 16, 2002
May 16, 2002
876
static void music_internal_volume(int volume)
Oct 21, 1999
Oct 21, 1999
877
{
May 16, 2002
May 16, 2002
878
switch (music_playing->type) {
Oct 21, 1999
Oct 21, 1999
879
#ifdef CMD_MUSIC
May 16, 2002
May 16, 2002
880
881
882
case MUS_CMD:
MusicCMD_SetVolume(volume);
break;
Oct 21, 1999
Oct 21, 1999
883
884
#endif
#ifdef WAV_MUSIC
May 16, 2002
May 16, 2002
885
886
887
case MUS_WAV:
WAVStream_SetVolume(volume);
break;
Oct 21, 1999
Oct 21, 1999
888
#endif
Oct 3, 2009
Oct 3, 2009
889
#ifdef MOD_MUSIC
May 16, 2002
May 16, 2002
890
case MUS_MOD:
Oct 3, 2009
Oct 3, 2009
891
MOD_setvolume(music_playing->data.module, volume);
May 16, 2002
May 16, 2002
892
break;
Oct 21, 1999
Oct 21, 1999
893
894
#endif
#ifdef MID_MUSIC
May 16, 2002
May 16, 2002
895
case MUS_MID:
Aug 19, 2001
Aug 19, 2001
896
#ifdef USE_NATIVE_MIDI
May 16, 2002
May 16, 2002
897
898
899
if ( native_midi_ok ) {
native_midi_setvolume(volume);
} MIDI_ELSE
Aug 19, 2001
Aug 19, 2001
900
#endif
Sep 5, 2001
Sep 5, 2001
901
#ifdef USE_TIMIDITY_MIDI
May 16, 2002
May 16, 2002
902
903
904
if ( timidity_ok ) {
Timidity_SetVolume(volume);
}
Sep 5, 2001
Sep 5, 2001
905
#endif
May 16, 2002
May 16, 2002
906
break;
Oct 21, 1999
Oct 21, 1999
907
#endif
Jul 3, 2000
Jul 3, 2000
908
#ifdef OGG_MUSIC
May 16, 2002
May 16, 2002
909
910
911
case MUS_OGG:
OGG_setvolume(music_playing->data.ogg, volume);
break;
Jul 3, 2000
Jul 3, 2000
912
#endif
Feb 27, 2008
Feb 27, 2008
913
914
915
916
917
#ifdef FLAC_MUSIC
case MUS_FLAC:
FLAC_setvolume(music_playing->data.flac, volume);
break;
#endif
Oct 21, 1999
Oct 21, 1999
918
#ifdef MP3_MUSIC
May 16, 2002
May 16, 2002
919
case MUS_MP3:
May 12, 2006
May 12, 2006
920
smpeg.SMPEG_setvolume(music_playing->data.mp3,(int)(((float)volume/(float)MIX_MAX_VOLUME)*100.0));
May 16, 2002
May 16, 2002
921
break;
Jul 15, 2007
Jul 15, 2007
922
923
924
925
926
#endif
#ifdef MP3_MAD_MUSIC
case MUS_MP3_MAD:
mad_setVolume(music_playing->data.mp3_mad, volume);
break;
Oct 21, 1999
Oct 21, 1999
927
#endif
May 16, 2002
May 16, 2002
928
929
930
931
932
933
934
935
936
937
938
939
default:
/* Unknown music type?? */
break;
}
}
int Mix_VolumeMusic(int volume)
{
int prev_volume;
prev_volume = music_volume;
if ( volume < 0 ) {
return prev_volume;
Oct 21, 1999
Oct 21, 1999
940
}
May 16, 2002
May 16, 2002
941
942
943
944
945
946
947
948
949
if ( volume > SDL_MIX_MAXVOLUME ) {
volume = SDL_MIX_MAXVOLUME;
}
music_volume = volume;
SDL_LockAudio();
if ( music_playing ) {
music_internal_volume(music_volume);
}
SDL_UnlockAudio();
Oct 21, 1999
Oct 21, 1999
950
951
952
return(prev_volume);
}
May 16, 2002
May 16, 2002
953
954
/* Halt playing of music */
static void music_internal_halt(void)
Oct 21, 1999
Oct 21, 1999
955
{
Oct 26, 1999
Oct 26, 1999
956
switch (music_playing->type) {
Oct 21, 1999
Oct 21, 1999
957
#ifdef CMD_MUSIC
May 16, 2002
May 16, 2002
958
case MUS_CMD:
Oct 26, 1999
Oct 26, 1999
959
960
MusicCMD_Stop(music_playing->data.cmd);
break;
Oct 21, 1999
Oct 21, 1999
961
962
#endif
#ifdef WAV_MUSIC
May 16, 2002
May 16, 2002
963
case MUS_WAV:
Oct 26, 1999
Oct 26, 1999
964
965
WAVStream_Stop();
break;
Oct 21, 1999
Oct 21, 1999
966
#endif
Oct 3, 2009
Oct 3, 2009
967
#ifdef MOD_MUSIC
May 16, 2002
May 16, 2002
968
case MUS_MOD:
Oct 3, 2009
Oct 3, 2009
969
MOD_stop(music_playing->data.module);
Oct 26, 1999
Oct 26, 1999
970
break;
Oct 21, 1999
Oct 21, 1999
971
972
#endif
#ifdef MID_MUSIC
May 16, 2002
May 16, 2002
973
case MUS_MID:
Aug 19, 2001
Aug 19, 2001
974
975
976
#ifdef USE_NATIVE_MIDI
if ( native_midi_ok ) {
native_midi_stop();
Sep 5, 2001
Sep 5, 2001
977
} MIDI_ELSE
Aug 19, 2001
Aug 19, 2001
978
#endif
Sep 5, 2001
Sep 5, 2001
979
#ifdef USE_TIMIDITY_MIDI
Aug 19, 2001
Aug 19, 2001
980
981
982
if ( timidity_ok ) {
Timidity_Stop();
}
Sep 5, 2001
Sep 5, 2001
983
#endif
Oct 26, 1999
Oct 26, 1999
984
break;
Oct 21, 1999
Oct 21, 1999
985
#endif
Jul 3, 2000
Jul 3, 2000
986
#ifdef OGG_MUSIC
May 16, 2002
May 16, 2002
987
case MUS_OGG:
Jul 3, 2000
Jul 3, 2000
988
989
990
OGG_stop(music_playing->data.ogg);
break;
#endif
Feb 27, 2008
Feb 27, 2008
991
992
993
994
995
#ifdef FLAC_MUSIC
case MUS_FLAC:
FLAC_stop(music_playing->data.flac);
break;
#endif
Oct 21, 1999
Oct 21, 1999
996
#ifdef MP3_MUSIC
May 16, 2002
May 16, 2002
997
case MUS_MP3:
May 12, 2006
May 12, 2006
998
smpeg.SMPEG_stop(music_playing->data.mp3);
Oct 26, 1999
Oct 26, 1999
999
break;
Jul 15, 2007
Jul 15, 2007
1000
#endif