Mercurial > SDL_sound_CoreAudio
annotate decoders/midi.c @ 214:e27b33a6d5fe
Now attempts to wait for SDL to finish playing the end of the buffered
data before closing the audio device.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Sun, 13 Jan 2002 19:50:02 +0000 |
parents | f75ed2d72238 |
children | c9772a9f5271 |
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); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
55 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
56 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
|
57 const Sound_DecoderFunctions __Sound_DecoderFunctions_MIDI = |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
58 { |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
59 { |
149
1df5c106504e
Decoders can now list multiple file extensions.
Ryan C. Gordon <icculus@icculus.org>
parents:
138
diff
changeset
|
60 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
|
61 "MIDI decoder, using a subset of TiMidity", |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
62 "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
|
63 "http://www.icculus.org/SDL_sound/" |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
64 }, |
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 MIDI_init, /* init() method */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
67 MIDI_quit, /* quit() method */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
68 MIDI_open, /* open() method */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
69 MIDI_close, /* close() method */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
70 MIDI_read /* read() method */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
71 }; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
72 |
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 static int MIDI_init(void) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
75 { |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
76 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
|
77 return(1); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
78 } /* MIDI_init */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
79 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
80 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
81 static void MIDI_quit(void) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
82 { |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
83 Timidity_Exit(); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
84 } /* MIDI_quit */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
85 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
86 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
87 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
|
88 { |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
89 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
90 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
|
91 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
|
92 MidiSong *song; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
93 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
94 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
|
95 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
|
96 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
|
97 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
|
98 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
99 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
|
100 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
|
101 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
|
102 Timidity_Start(song); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
103 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
104 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
|
105 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
106 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
|
107 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
108 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
|
109 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
|
110 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
|
111 |
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
112 sample->flags = SOUND_SAMPLEFLAG_NONE; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
113 return(1); /* we'll handle this data. */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
114 } /* MIDI_open */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
115 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
116 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
117 static void MIDI_close(Sound_Sample *sample) |
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 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
|
120 MidiSong *song = (MidiSong *) internal->decoder_private; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
121 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
122 Timidity_FreeSong(song); |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
123 } /* MIDI_close */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
124 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
125 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
126 static Uint32 MIDI_read(Sound_Sample *sample) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
127 { |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
128 Uint32 retval; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
129 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
|
130 MidiSong *song = (MidiSong *) internal->decoder_private; |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
131 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
132 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
|
133 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
134 /* Make sure the read went smoothly... */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
135 if (retval == 0) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
136 sample->flags |= SOUND_SAMPLEFLAG_EOF; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
137 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
138 else if (retval == -1) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
139 sample->flags |= SOUND_SAMPLEFLAG_ERROR; |
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 /* (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
|
142 else if (retval < internal->buffer_size) |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
143 sample->flags |= SOUND_SAMPLEFLAG_EAGAIN; |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
144 |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
145 return(retval); |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
146 } /* MIDI_read */ |
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 #endif /* SOUND_SUPPORTS_MIDI */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
149 |
200
f75ed2d72238
Rewrite to call an included, patched version of Timidity routines directly.
Ryan C. Gordon <icculus@icculus.org>
parents:
184
diff
changeset
|
150 |
108
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
151 /* end of midi.c ... */ |
803ba4dabbce
Initial add, from Torbj�rn Andersson.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
152 |