Mercurial > SDL_sound_CoreAudio
annotate decoders/midi.c @ 575:e587ba9d1c87 stable-1.0
Don't force quit in signal handler, since we might double-free things.
Instead we set a flag and clean up normally.
(transplanted from 7815c90ba55221f47a042339f872207904da0f5c)
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Sun, 24 Jan 2010 13:45:18 -0500 |
parents | 45ee760a6f5a |
children |
rev | line source |
---|---|
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
1 /* |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
2 * SDL_sound -- An abstract sound format decoding API. |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
3 * Copyright (C) 2001 Ryan C. Gordon. |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
4 * |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
5 * This library is free software; you can redistribute it and/or |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
6 * modify it under the terms of the GNU Lesser General Public |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
7 * License as published by the Free Software Foundation; either |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
8 * version 2.1 of the License, or (at your option) any later version. |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
9 * |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
10 * This library is distributed in the hope that it will be useful, |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
13 * Lesser General Public License for more details. |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
14 * |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU Lesser General Public |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
16 * License along with this library; if not, write to the Free Software |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
18 */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
19 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
20 /* |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
21 * MIDI decoder for SDL_sound. |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
22 * |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
23 * This driver handles MIDI data through a stripped-down version of TiMidity. |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
24 * See the documentation in the timidity subdirectory. |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
25 * |
184
47cc2de2ae36
Changed reference to "LICENSE" file to "COPYING".
Ryan C. Gordon <icculus@icculus.org>
parents:
149
diff
changeset
|
26 * Please see the file COPYING in the source's root directory. |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
27 * |
535
45ee760a6f5a
Converted all text encoding from ISO-8859-1 to UTF-8.
Ryan C. Gordon <icculus@icculus.org>
parents:
377
diff
changeset
|
28 * This file written by Torbjörn Andersson. (d91tan@Update.UU.SE) |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
29 */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
30 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
31 #if HAVE_CONFIG_H |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
32 # include <config.h> |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
33 #endif |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
34 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
35 #ifdef SOUND_SUPPORTS_MIDI |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
36 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
37 #include <stdio.h> |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
38 #include <stdlib.h> |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
39 #include <string.h> |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
40 |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
41 #include "SDL_sound.h" |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
42 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
43 #define __SDL_SOUND_INTERNAL__ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
44 #include "SDL_sound_internal.h" |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
45 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
46 #include "timidity.h" |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
47 |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
48 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
49 static int MIDI_init(void); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
50 static void MIDI_quit(void); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
51 static int MIDI_open(Sound_Sample *sample, const char *ext); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
52 static void MIDI_close(Sound_Sample *sample); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
53 static Uint32 MIDI_read(Sound_Sample *sample); |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
54 static int MIDI_rewind(Sound_Sample *sample); |
306
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
231
diff
changeset
|
55 static int MIDI_seek(Sound_Sample *sample, Uint32 ms); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
56 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
57 static const char *extensions_midi[] = { "MIDI", "MID", NULL }; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
58 const Sound_DecoderFunctions __Sound_DecoderFunctions_MIDI = |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
59 { |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
60 { |
149
1df5c106504e
Decoders can now list multiple file extensions.
Ryan C. Gordon <icculus@icculus.org>
parents:
138
diff
changeset
|
61 extensions_midi, |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
62 "MIDI decoder, using a subset of TiMidity", |
535
45ee760a6f5a
Converted all text encoding from ISO-8859-1 to UTF-8.
Ryan C. Gordon <icculus@icculus.org>
parents:
377
diff
changeset
|
63 "Torbjörn Andersson <d91tan@Update.UU.SE>", |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
64 "http://www.icculus.org/SDL_sound/" |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
65 }, |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
66 |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
67 MIDI_init, /* init() method */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
68 MIDI_quit, /* quit() method */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
69 MIDI_open, /* open() method */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
70 MIDI_close, /* close() method */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
71 MIDI_read, /* read() method */ |
306
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
231
diff
changeset
|
72 MIDI_rewind, /* rewind() method */ |
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
231
diff
changeset
|
73 MIDI_seek /* seek() method */ |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
74 }; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
75 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
76 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
77 static int MIDI_init(void) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
78 { |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
79 BAIL_IF_MACRO(Timidity_Init() < 0, "MIDI: Could not initialise", 0); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
80 return(1); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
81 } /* MIDI_init */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
82 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
83 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
84 static void MIDI_quit(void) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
85 { |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
86 Timidity_Exit(); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
87 } /* MIDI_quit */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
88 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
89 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
90 static int MIDI_open(Sound_Sample *sample, const char *ext) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
91 { |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
92 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
93 SDL_RWops *rw = internal->rw; |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
94 SDL_AudioSpec spec; |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
95 MidiSong *song; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
96 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
97 spec.channels = 2; |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
98 spec.format = AUDIO_S16SYS; |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
99 spec.freq = 44100; |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
100 spec.samples = 4096; |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
101 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
102 song = Timidity_LoadSong(rw, &spec); |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
103 BAIL_IF_MACRO(song == NULL, "MIDI: Not a MIDI file.", 0); |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
104 Timidity_SetVolume(song, 100); |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
105 Timidity_Start(song); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
106 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
107 SNDDBG(("MIDI: Accepting data stream.\n")); |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
108 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
109 internal->decoder_private = (void *) song; |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
110 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
111 sample->actual.channels = 2; |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
112 sample->actual.rate = 44100; |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
113 sample->actual.format = AUDIO_S16SYS; |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
114 |
312 | 115 sample->flags = SOUND_SAMPLEFLAG_CANSEEK; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
116 return(1); /* we'll handle this data. */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
117 } /* MIDI_open */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
118 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
119 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
120 static void MIDI_close(Sound_Sample *sample) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
121 { |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
122 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
123 MidiSong *song = (MidiSong *) internal->decoder_private; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
124 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
125 Timidity_FreeSong(song); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
126 } /* MIDI_close */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
127 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
128 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
129 static Uint32 MIDI_read(Sound_Sample *sample) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
130 { |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
131 Uint32 retval; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
132 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
133 MidiSong *song = (MidiSong *) internal->decoder_private; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
134 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
135 retval = Timidity_PlaySome(song, internal->buffer, internal->buffer_size); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
136 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
137 /* Make sure the read went smoothly... */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
138 if (retval == 0) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
139 sample->flags |= SOUND_SAMPLEFLAG_EOF; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
140 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
141 else if (retval == -1) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
142 sample->flags |= SOUND_SAMPLEFLAG_ERROR; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
143 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
144 /* (next call this EAGAIN may turn into an EOF or error.) */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
145 else if (retval < internal->buffer_size) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
146 sample->flags |= SOUND_SAMPLEFLAG_EAGAIN; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
147 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
148 return(retval); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
149 } /* MIDI_read */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
150 |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
151 |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
152 static int MIDI_rewind(Sound_Sample *sample) |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
153 { |
231
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
154 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
155 MidiSong *song = (MidiSong *) internal->decoder_private; |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
156 |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
157 Timidity_Start(song); |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
158 return(1); |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
159 } /* MIDI_rewind */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
160 |
306
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
231
diff
changeset
|
161 |
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
231
diff
changeset
|
162 static int MIDI_seek(Sound_Sample *sample, Uint32 ms) |
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
231
diff
changeset
|
163 { |
312 | 164 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
165 MidiSong *song = (MidiSong *) internal->decoder_private; | |
166 | |
167 Timidity_Seek(song, ms); | |
168 return(1); | |
306
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
231
diff
changeset
|
169 } /* MIDI_seek */ |
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
231
diff
changeset
|
170 |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
171 #endif /* SOUND_SUPPORTS_MIDI */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
172 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
173 |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
174 /* end of midi.c ... */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
175 |