Mercurial > SDL_sound_CoreAudio
annotate decoders/midi.c @ 278:dfe4a46f88f7
Updated.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Thu, 14 Mar 2002 16:38:32 +0000 |
parents | d3dc34315ac7 |
children | c97be6e1bd27 |
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 * |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
28 * This file written by Torbjörn Andersson. (d91tan@Update.UU.SE) |
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> |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
40 #include <assert.h> |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
41 |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
42 #include "SDL_sound.h" |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
43 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
44 #define __SDL_SOUND_INTERNAL__ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
45 #include "SDL_sound_internal.h" |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
46 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
47 #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
|
48 |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
49 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
50 static int MIDI_init(void); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
51 static void MIDI_quit(void); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
52 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
|
53 static void MIDI_close(Sound_Sample *sample); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
54 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
|
55 static int MIDI_rewind(Sound_Sample *sample); |
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", |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
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 */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
72 MIDI_rewind /* rewind() method */ |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
73 }; |
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 static int MIDI_init(void) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
77 { |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
78 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
|
79 return(1); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
80 } /* MIDI_init */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
81 |
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 static void MIDI_quit(void) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
84 { |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
85 Timidity_Exit(); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
86 } /* MIDI_quit */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
87 |
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 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
|
90 { |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
91 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
92 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
|
93 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
|
94 MidiSong *song; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
95 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
96 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
|
97 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
|
98 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
|
99 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
|
100 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
101 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
|
102 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
|
103 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
|
104 Timidity_Start(song); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
105 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
106 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
|
107 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
108 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
|
109 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
110 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
|
111 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
|
112 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
|
113 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
114 sample->flags = SOUND_SAMPLEFLAG_NONE; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
115 return(1); /* we'll handle this data. */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
116 } /* MIDI_open */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
117 |
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 static void MIDI_close(Sound_Sample *sample) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
120 { |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
121 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
|
122 MidiSong *song = (MidiSong *) internal->decoder_private; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
123 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
124 Timidity_FreeSong(song); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
125 } /* MIDI_close */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
126 |
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 static Uint32 MIDI_read(Sound_Sample *sample) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
129 { |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
130 Uint32 retval; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
131 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
|
132 MidiSong *song = (MidiSong *) internal->decoder_private; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
133 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
134 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
|
135 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
136 /* Make sure the read went smoothly... */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
137 if (retval == 0) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
138 sample->flags |= SOUND_SAMPLEFLAG_EOF; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
139 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
140 else if (retval == -1) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
141 sample->flags |= SOUND_SAMPLEFLAG_ERROR; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
142 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
143 /* (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
|
144 else if (retval < internal->buffer_size) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
145 sample->flags |= SOUND_SAMPLEFLAG_EAGAIN; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
146 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
147 return(retval); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
148 } /* MIDI_read */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
149 |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
150 |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
151 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
|
152 { |
231
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
153 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
154 MidiSong *song = (MidiSong *) internal->decoder_private; |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
155 |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
156 Timidity_Start(song); |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
157 return(1); |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
158 } /* MIDI_rewind */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
200
diff
changeset
|
159 |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
160 #endif /* SOUND_SUPPORTS_MIDI */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
161 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
162 |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
163 /* end of midi.c ... */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
164 |