Mercurial > SDL_sound_CoreAudio
annotate decoders/mikmod.c @ 562:7e08477b0fc1
MP3 decoder upgrade work.
Ripped out SMPEG and mpglib support, replaced it with "mpg123.c" and libmpg123.
libmpg123 is a much better version of mpglib, so it should solve all the
problems about MP3's not seeking, or most modern MP3's not playing at all,
etc. Since you no longer have to make a tradeoff with SMPEG for features, and
SMPEG is basically rotting, I removed it from the project.
There is still work to be done with libmpg123...there are MMX, 3DNow, SSE,
Altivec, etc decoders which we don't have enabled at the moment, and the
build system could use some work to make this compile more cleanly, etc.
Still: huge win.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Fri, 30 Jan 2009 02:44:47 -0500 |
parents | 2e8907ff98e9 |
children |
rev | line source |
---|---|
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
1 /* |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
2 * SDL_sound -- An abstract sound format decoding API. |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
3 * Copyright (C) 2001 Ryan C. Gordon. |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
4 * |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
5 * This library is free software; you can redistribute it and/or |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
6 * modify it under the terms of the GNU Lesser General Public |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
7 * License as published by the Free Software Foundation; either |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
8 * version 2.1 of the License, or (at your option) any later version. |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
9 * |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
10 * This library is distributed in the hope that it will be useful, |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
13 * Lesser General Public License for more details. |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
14 * |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU Lesser General Public |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
16 * License along with this library; if not, write to the Free Software |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
18 */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
19 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
20 /* |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
21 * Module player for SDL_sound. This driver handles anything MikMod does, and |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
22 * is based on SDL_mixer. |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
23 * |
552
2e8907ff98e9
Replaced references to COPYING with references to LICENSE.txt ...
Ryan C. Gordon <icculus@icculus.org>
parents:
536
diff
changeset
|
24 * Please see the file LICENSE.txt in the source's root directory. |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
25 * |
536
8a814bbbedfa
Merged r544:545 from branches/stable-1.0: converted to UTF-8 encoding.
Ryan C. Gordon <icculus@icculus.org>
parents:
477
diff
changeset
|
26 * This file written by Torbjörn Andersson (d91tan@Update.UU.SE) |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
27 */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
28 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
29 #if HAVE_CONFIG_H |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
30 # include <config.h> |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
31 #endif |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
32 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
33 #ifdef SOUND_SUPPORTS_MIKMOD |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
34 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
35 #include <stdio.h> |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
36 #include <stdlib.h> |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
37 #include <string.h> |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
38 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
39 #include "SDL_sound.h" |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
40 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
41 #define __SDL_SOUND_INTERNAL__ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
42 #include "SDL_sound_internal.h" |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
43 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
44 #include "mikmod.h" |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
45 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
46 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
47 static int MIKMOD_init(void); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
48 static void MIKMOD_quit(void); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
49 static int MIKMOD_open(Sound_Sample *sample, const char *ext); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
50 static void MIKMOD_close(Sound_Sample *sample); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
51 static Uint32 MIKMOD_read(Sound_Sample *sample); |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
52 static int MIKMOD_rewind(Sound_Sample *sample); |
306
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
305
diff
changeset
|
53 static int MIKMOD_seek(Sound_Sample *sample, Uint32 ms); |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
54 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
55 static const char *extensions_mikmod[] = |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
56 { |
211
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
57 "669", /* Composer 669 */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
58 "AMF", /* DMP Advanced Module Format */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
59 "DSM", /* DSIK internal format */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
60 "FAR", /* Farandole module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
61 "GDM", /* General DigiMusic module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
62 "IMF", /* Imago Orpheus module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
63 "IT", /* Impulse tracker */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
64 "M15", /* 15 instrument MOD / Ultimate Sound Tracker (old M15 format) */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
65 "MED", /* Amiga MED module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
66 "MOD", /* Generic MOD (Protracker, StarTracker, FastTracker, etc) */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
67 "MTM", /* MTM module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
68 "OKT", /* Oktalyzer module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
69 "S3M", /* Screamtracker module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
70 "STM", /* Screamtracker 2 module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
71 "STX", /* STMIK 0.2 module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
72 "ULT", /* Ultratracker module */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
73 "UNI", /* UNIMOD - libmikmod's and APlayer's internal module format */ |
b35c04e4691e
Patched to select streams to handle more carefully.
Ryan C. Gordon <icculus@icculus.org>
parents:
207
diff
changeset
|
74 "XM", /* Fasttracker module */ |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
75 NULL |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
76 }; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
77 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
78 const Sound_DecoderFunctions __Sound_DecoderFunctions_MIKMOD = |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
79 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
80 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
81 extensions_mikmod, |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
82 "Play modules through MikMod", |
536
8a814bbbedfa
Merged r544:545 from branches/stable-1.0: converted to UTF-8 encoding.
Ryan C. Gordon <icculus@icculus.org>
parents:
477
diff
changeset
|
83 "Torbjörn Andersson <d91tan@Update.UU.SE>", |
473 | 84 "http://mikmod.raphnet.net/" |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
85 }, |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
86 |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
87 MIKMOD_init, /* init() method */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
88 MIKMOD_quit, /* quit() method */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
89 MIKMOD_open, /* open() method */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
90 MIKMOD_close, /* close() method */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
91 MIKMOD_read, /* read() method */ |
306
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
305
diff
changeset
|
92 MIKMOD_rewind, /* rewind() method */ |
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
305
diff
changeset
|
93 MIKMOD_seek /* seek() method */ |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
94 }; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
95 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
96 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
97 /* Make MikMod read from a RWops... */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
98 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
99 typedef struct MRWOPSREADER { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
100 MREADER core; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
101 Sound_Sample *sample; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
102 int end; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
103 } MRWOPSREADER; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
104 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
105 static BOOL _mm_RWopsReader_eof(MREADER *reader) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
106 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
107 MRWOPSREADER *rwops_reader = (MRWOPSREADER *) reader; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
108 Sound_Sample *sample = rwops_reader->sample; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
109 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
110 int pos = SDL_RWtell(internal->rw); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
111 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
112 if (rwops_reader->end == pos) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
113 return(1); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
114 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
115 return(0); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
116 } /* _mm_RWopsReader_eof */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
117 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
118 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
119 static BOOL _mm_RWopsReader_read(MREADER *reader, void *ptr, size_t size) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
120 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
121 MRWOPSREADER *rwops_reader = (MRWOPSREADER *) reader; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
122 Sound_Sample *sample = rwops_reader->sample; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
123 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
124 return(SDL_RWread(internal->rw, ptr, size, 1)); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
125 } /* _mm_RWopsReader_Read */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
126 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
127 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
128 static int _mm_RWopsReader_get(MREADER *reader) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
129 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
130 char buf; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
131 MRWOPSREADER *rwops_reader = (MRWOPSREADER *) reader; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
132 Sound_Sample *sample = rwops_reader->sample; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
133 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
134 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
135 if (SDL_RWread(internal->rw, &buf, 1, 1) != 1) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
136 return(EOF); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
137 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
138 return((int) buf); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
139 } /* _mm_RWopsReader_get */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
140 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
141 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
142 static BOOL _mm_RWopsReader_seek(MREADER *reader, long offset, int whence) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
143 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
144 MRWOPSREADER *rwops_reader = (MRWOPSREADER *) reader; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
145 Sound_Sample *sample = rwops_reader->sample; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
146 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
147 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
148 return(SDL_RWseek(internal->rw, offset, whence)); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
149 } /* _mm_RWopsReader_seek */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
150 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
151 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
152 static long _mm_RWopsReader_tell(MREADER *reader) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
153 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
154 MRWOPSREADER *rwops_reader = (MRWOPSREADER *) reader; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
155 Sound_Sample *sample = rwops_reader->sample; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
156 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
157 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
158 return(SDL_RWtell(internal->rw)); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
159 } /* _mm_RWopsReader_tell */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
160 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
161 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
162 static MREADER *_mm_new_rwops_reader(Sound_Sample *sample) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
163 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
164 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
165 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
166 MRWOPSREADER *reader = (MRWOPSREADER *) malloc(sizeof (MRWOPSREADER)); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
167 if (reader != NULL) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
168 { |
397 | 169 int failed_seek = 1; |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
170 int here; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
171 reader->core.Eof = _mm_RWopsReader_eof; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
172 reader->core.Read = _mm_RWopsReader_read; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
173 reader->core.Get = _mm_RWopsReader_get; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
174 reader->core.Seek = _mm_RWopsReader_seek; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
175 reader->core.Tell = _mm_RWopsReader_tell; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
176 reader->sample = sample; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
177 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
178 /* RWops does not explicitly support an eof check, so we shall find |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
179 the end manually - this requires seek support for the RWop */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
180 here = SDL_RWtell(internal->rw); |
397 | 181 if (here != -1) |
182 { | |
183 reader->end = SDL_RWseek(internal->rw, 0, SEEK_END); | |
184 if (reader->end != -1) | |
185 { | |
186 /* Move back */ | |
187 if (SDL_RWseek(internal->rw, here, SEEK_SET) != -1) | |
188 failed_seek = 0; | |
189 } /* if */ | |
190 } /* if */ | |
191 | |
192 if (failed_seek) | |
193 { | |
194 free(reader); | |
195 reader = NULL; | |
196 } /* if */ | |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
197 } /* if */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
198 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
199 return((MREADER *) reader); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
200 } /* _mm_new_rwops_reader */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
201 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
202 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
203 static void _mm_delete_rwops_reader(MREADER *reader) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
204 { |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
205 /* SDL_sound will delete the RWops and sample at a higher level... */ |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
206 if (reader != NULL) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
207 free(reader); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
208 } /* _mm_delete_rwops_reader */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
209 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
210 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
211 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
212 static int MIKMOD_init(void) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
213 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
214 MikMod_RegisterDriver(&drv_nos); |
434
c09cf7c046cd
Prevent a clash between SDL_mixer and SDL_sound in mikmod initialization.
Ryan C. Gordon <icculus@icculus.org>
parents:
397
diff
changeset
|
215 |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
216 /* |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
217 * Quick and dirty hack to prevent an infinite loop problem |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
218 * found when using SDL_mixer and SDL_sound together and |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
219 * both have MikMod compiled in. So, check to see if |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
220 * MikMod has already been registered first before calling |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
221 * RegisterAllLoaders() |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
222 */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
223 if (MikMod_InfoLoader() == NULL) |
434
c09cf7c046cd
Prevent a clash between SDL_mixer and SDL_sound in mikmod initialization.
Ryan C. Gordon <icculus@icculus.org>
parents:
397
diff
changeset
|
224 { |
c09cf7c046cd
Prevent a clash between SDL_mixer and SDL_sound in mikmod initialization.
Ryan C. Gordon <icculus@icculus.org>
parents:
397
diff
changeset
|
225 MikMod_RegisterAllLoaders(); |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
226 } /* if */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
227 |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
228 /* |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
229 * Both DMODE_SOFT_MUSIC and DMODE_16BITS should be set by default, |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
230 * so this is just for clarity. I haven't experimented with any of |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
231 * the other flags. There are a few which are said to give better |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
232 * sound quality. |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
233 */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
234 md_mode |= (DMODE_SOFT_MUSIC | DMODE_16BITS); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
235 md_mixfreq = 0; |
375
6095d0a52a20
Added a reverb setting, moved assert.h include out.
Ryan C. Gordon <icculus@icculus.org>
parents:
351
diff
changeset
|
236 md_reverb = 1; |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
237 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
238 BAIL_IF_MACRO(MikMod_Init(""), MikMod_strerror(MikMod_errno), 0); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
239 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
240 return(1); /* success. */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
241 } /* MIKMOD_init */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
242 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
243 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
244 static void MIKMOD_quit(void) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
245 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
246 MikMod_Exit(); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
247 md_mixfreq = 0; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
248 } /* MIKMOD_quit */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
249 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
250 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
251 static int MIKMOD_open(Sound_Sample *sample, const char *ext) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
252 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
253 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
254 MREADER *reader; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
255 MODULE *module; |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
256 Uint32 i; /* temp counter for time computation */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
257 double segment_time = 0.0; /* temp holder for time */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
258 |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
259 reader = _mm_new_rwops_reader(sample); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
260 BAIL_IF_MACRO(reader == NULL, ERR_OUT_OF_MEMORY, 0); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
261 module = Player_LoadGeneric(reader, 64, 0); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
262 _mm_delete_rwops_reader(reader); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
263 BAIL_IF_MACRO(module == NULL, "MIKMOD: Not a module file.", 0); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
264 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
265 module->extspd = 1; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
266 module->panflag = 1; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
267 module->wrap = 0; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
268 module->loop = 0; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
269 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
270 if (md_mixfreq == 0) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
271 md_mixfreq = (!sample->desired.rate) ? 44100 : sample->desired.rate; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
272 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
273 sample->actual.channels = 2; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
274 sample->actual.rate = md_mixfreq; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
275 sample->actual.format = AUDIO_S16SYS; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
276 internal->decoder_private = (void *) module; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
277 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
278 Player_Start(module); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
279 Player_SetPosition(0); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
280 |
312 | 281 sample->flags = SOUND_SAMPLEFLAG_NONE; |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
282 |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
283 /* |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
284 * module->sngtime = current song time in 2^-10 seconds |
477
3e705c9180e5
Fixed binary compatibility, added Sound_GetDuration().
Ryan C. Gordon <icculus@icculus.org>
parents:
474
diff
changeset
|
285 * internal->total_time = (module->sngtime * 1000) / (1<<10) |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
286 */ |
477
3e705c9180e5
Fixed binary compatibility, added Sound_GetDuration().
Ryan C. Gordon <icculus@icculus.org>
parents:
474
diff
changeset
|
287 internal->total_time = (module->sngtime * 1000) / (1<<10); |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
288 |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
289 SNDDBG(("MIKMOD: Name: %s\n", module->songname)); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
290 SNDDBG(("MIKMOD: Type: %s\n", module->modtype)); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
291 SNDDBG(("MIKMOD: Accepting data stream\n")); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
292 |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
293 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
294 /* |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
295 * This is a quick and dirty way for getting the play time |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
296 * of a file. This will often be wrong because the tracker format |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
297 * allows for so much. If you want a better one, use ModPlug, |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
298 * demand that the Mikmod people write better functionality, |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
299 * or write a more complicated version of the code below. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
300 * |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
301 * There are two dumb ways to compute the length. The really |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
302 * dumb way is to look at the header and take the initial |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
303 * speed/tempo values. However, speed values can change throughout |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
304 * the file. The slightly smarter way is to iterate through |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
305 * all the positions and add up each segment's time based |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
306 * on the idea that each segment will give us its own |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
307 * speed value. The hope is that this is more accurate. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
308 * However, this demands that the file be seekable |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
309 * and that we can change the position of the sample. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
310 * Depending on the assumptions of SDL_sound, this block |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
311 * of code should be enabled or disabled. If disabled, |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
312 * you still can make the computations doing the first method. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
313 * For now, we will assume it's acceptable to seek a Mod file |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
314 * since this is essentially how Modplug also does it. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
315 * |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
316 * Keep in mind that this will be incorrect for loops, jumps, short |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
317 * patterns and other features. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
318 */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
319 sample->flags |= SOUND_SAMPLEFLAG_CANSEEK; |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
320 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
321 /* |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
322 * For each position (which corresponds to a particular pattern), |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
323 * get the speed values and compute the time length of the segment |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
324 */ |
477
3e705c9180e5
Fixed binary compatibility, added Sound_GetDuration().
Ryan C. Gordon <icculus@icculus.org>
parents:
474
diff
changeset
|
325 internal->total_time = 0; |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
326 for (i = 0; i < module->numpos; i++) |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
327 { |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
328 Player_SetPosition(i); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
329 /* Must call update, or the speed values won't get reset */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
330 MikMod_Update(); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
331 /* Now the magic formula: |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
332 * Multiply the number of positions by the |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
333 * Number of rows (usually 64 but can be different) by the |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
334 * time it takes to read one row (1/50) |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
335 * by the speed by the |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
336 * magic reference beats per minute / the beats per minute |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
337 * |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
338 * We're using positions instead of patterns because in our |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
339 * test cases, this seems to be the correct value for the |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
340 * number of sections you hear during normal playback. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
341 * They typically map to a fewer number of patterns |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
342 * where some patterns get replayed multiple times |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
343 * in a song (think chorus). Since we're in a for-loop, |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
344 * the multiplication is implicit while we're adding |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
345 * all the segments. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
346 * |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
347 * From a tracker format spec, it seems that 64 rows |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
348 * is the normal (00-3F), but I've seen songs that |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
349 * either have less or are jumping positions in the |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
350 * middle of a pattern. It looks like Mikmod might |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
351 * reveal this number for us. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
352 * |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
353 * According to the spec, it seems that a speed of 1 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
354 * corresponds to reading 1 row in 50 ticks. However, |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
355 * I'm not sure if ticks are real seconds or this |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
356 * notion of second units: |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
357 * Assuming that it's just normal seconds, we get 1/50 = 0.02. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
358 * |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
359 * The current speed and current tempo (beats per minute) |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
360 * we can just grab. However, we need a magic number |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
361 * to figure out what the tempo is based on. Our primitive |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
362 * stopwatch results and intuition seem to imply 120-130bpm |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
363 * is the magic number. Looking at the majority of tracker |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
364 * files I have, 125 seems to be the common value. Furthermore |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
365 * most (if not all) of my Future Crew .S3M (Scream Tracker 3) |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
366 * files also use 125. Since they invented that format, |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
367 * I'll also assume that's the base number. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
368 */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
369 if(module->bpm == 0) |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
370 { |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
371 /* |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
372 * Should never get here, but I don't want any |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
373 * divide by zero errors |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
374 */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
375 continue; |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
376 } /* if */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
377 segment_time += (module->numrow * .02 * module->sngspd * |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
378 125.0 / module->bpm); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
379 } /* for */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
380 /* Now convert to milliseconds and store the value */ |
477
3e705c9180e5
Fixed binary compatibility, added Sound_GetDuration().
Ryan C. Gordon <icculus@icculus.org>
parents:
474
diff
changeset
|
381 internal->total_time = (Sint32)(segment_time * 1000); |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
382 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
383 /* Reset the sample to the beginning */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
384 Player_SetPosition(0); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
385 MikMod_Update(); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
386 |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
387 return(1); /* we'll handle this data. */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
388 } /* MIKMOD_open */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
389 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
390 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
391 static void MIKMOD_close(Sound_Sample *sample) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
392 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
393 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
394 MODULE *module = (MODULE *) internal->decoder_private; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
395 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
396 Player_Free(module); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
397 } /* MIKMOD_close */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
398 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
399 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
400 static Uint32 MIKMOD_read(Sound_Sample *sample) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
401 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
402 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
403 MODULE *module = (MODULE *) internal->decoder_private; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
404 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
405 /* Switch to the current module, stopping any previous one. */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
406 Player_Start(module); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
407 if (!Player_Active()) |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
408 { |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
409 sample->flags |= SOUND_SAMPLEFLAG_EOF; |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
410 return(0); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
411 } /* if */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
412 return((Uint32) VC_WriteBytes(internal->buffer, internal->buffer_size)); |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
413 } /* MIKMOD_read */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
414 |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
415 |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
416 static int MIKMOD_rewind(Sound_Sample *sample) |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
417 { |
231
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
418 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
419 MODULE *module = (MODULE *) internal->decoder_private; |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
420 |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
421 Player_Start(module); |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
422 Player_SetPosition(0); |
d3dc34315ac7
Rewind method implemented by Torbj�rn.
Ryan C. Gordon <icculus@icculus.org>
parents:
221
diff
changeset
|
423 return(1); |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
424 } /* MIKMOD_rewind */ |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
425 |
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
426 |
306
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
305
diff
changeset
|
427 static int MIKMOD_seek(Sound_Sample *sample, Uint32 ms) |
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
305
diff
changeset
|
428 { |
312 | 429 Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque; |
430 MODULE *module = (MODULE *) internal->decoder_private; | |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
431 double last_time = 0.0; |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
432 double current_time = 0.0; |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
433 double target_time; |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
434 Uint32 i; |
312 | 435 |
436 /* | |
437 * Heaven may know what the argument to Player_SetPosition() is. | |
438 * I, however, haven't the faintest idea. | |
439 */ | |
440 Player_Start(module); | |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
441 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
442 /* |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
443 * Mikmod only lets you seek to the beginning of a pattern. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
444 * This means we'll get very coarse grain seeks. The |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
445 * value we pass to SetPosition is a value between 0 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
446 * and the number of positions in the file. The |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
447 * dumb approach would be to take our total_time that |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
448 * we've already calculated and divide it up by the |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
449 * number of positions and seek to the position that results. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
450 * However, because songs can alter their speed/tempo during |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
451 * playback, different patterns in the song can take |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
452 * up different amounts of time. So the slightly |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
453 * smarter approach is to repeat what was done in the |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
454 * total_time computation and traverse through the file |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
455 * until we find the closest position. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
456 * The follwing is basically cut and paste from the |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
457 * open function. |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
458 */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
459 if (ms == 0) /* Check end conditions to simplify things */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
460 { |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
461 Player_SetPosition(0); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
462 return(1); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
463 } /* if */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
464 |
477
3e705c9180e5
Fixed binary compatibility, added Sound_GetDuration().
Ryan C. Gordon <icculus@icculus.org>
parents:
474
diff
changeset
|
465 if (ms >= internal->total_time) |
474
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
466 Player_SetPosition(module->numpos); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
467 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
468 /* Convert time to seconds (double) to make comparisons easier */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
469 target_time = ms / 1000.0; |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
470 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
471 for (i = 0; i < module->numpos; i++) |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
472 { |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
473 Player_SetPosition(i); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
474 /* Must call update, or the speed values won't get reset */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
475 MikMod_Update(); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
476 /* Divide by zero check */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
477 if(module->bpm == 0) |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
478 continue; |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
479 last_time = current_time; |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
480 /* See the notes in the open function about the formula */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
481 current_time += (module->numrow * .02 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
482 * module->sngspd * 125.0 / module->bpm); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
483 if(target_time <= current_time) |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
484 break; /* We now have our interval, so break out */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
485 } /* for */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
486 |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
487 if( (target_time-last_time) > (current_time-target_time) ) |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
488 { |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
489 /* The target time is closer to the higher position, so go there */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
490 Player_SetPosition(i+1); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
491 } /* if */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
492 else |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
493 { |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
494 /* The target time is closer to the lower position, so go there */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
495 Player_SetPosition(i); |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
496 } /* else */ |
c66080364dff
Most decoders now report total sample play time, now. Technically, this
Ryan C. Gordon <icculus@icculus.org>
parents:
473
diff
changeset
|
497 |
312 | 498 return(1); |
306
c97be6e1bd27
Added framework for Sound_Seek() support.
Ryan C. Gordon <icculus@icculus.org>
parents:
305
diff
changeset
|
499 } /* MIKMOD_seek */ |
221
c9772a9f5271
Initial implementation or stubs for rewind method. Other cleanups.
Ryan C. Gordon <icculus@icculus.org>
parents:
211
diff
changeset
|
500 |
207
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
501 #endif /* SOUND_SUPPORTS_MIKMOD */ |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
502 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
503 |
857e53c5a2da
Renamed from mod.c (see modplug.c for the OTHER mod decoder).
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
504 /* end of mikmod.c ... */ |