Mercurial > audlegacy
annotate Plugins/Input/adplug/core/mid.cpp @ 412:451d2dc68ba8 trunk
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
author | chainsaw |
---|---|
date | Mon, 09 Jan 2006 13:15:02 -0800 |
parents | |
children | 15ca2ea93a30 |
rev | line source |
---|---|
412
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1 /* |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
2 * Adplug - Replayer for many OPL2/OPL3 audio file formats. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
3 * Copyright (C) 1999 - 2003 Simon Peter, <dn.tlp@gmx.net>, et al. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
4 * |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
5 * This library is free software; you can redistribute it and/or |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
6 * modify it under the terms of the GNU Lesser General Public |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
7 * License as published by the Free Software Foundation; either |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
8 * version 2.1 of the License, or (at your option) any later version. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
9 * |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
10 * This library is distributed in the hope that it will be useful, |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
13 * Lesser General Public License for more details. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
14 * |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
15 * You should have received a copy of the GNU Lesser General Public |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
16 * License along with this library; if not, write to the Free Software |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
18 * |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
19 * |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
20 * MIDI & MIDI-like file player - Last Update: 8/16/2000 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
21 * by Phil Hassey - www.imitationpickles.org |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
22 * philhassey@hotmail.com |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
23 * |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
24 * Can play the following |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
25 * .LAA - a raw save of a Lucas Arts Adlib music |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
26 * or |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
27 * a raw save of a LucasFilm Adlib music |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
28 * .CMF - Creative Music Format |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
29 * .SCI - the sierra "midi" format. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
30 * Files must be in the form |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
31 * xxxNAME.sci |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
32 * So that the loader can load the right patch file: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
33 * xxxPATCH.003 (patch.003 must be saved from the |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
34 * sierra resource from each game.) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
35 * |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
36 * 1/9/2006: audacious libadplug |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
37 * Status: MID not as fine as originally thought. Removing general MIDI detector so timidity handles these files instead. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
38 * |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
39 * 6/2/2000: v1.0 relased by phil hassey |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
40 * Status: LAA is almost perfect |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
41 * - some volumes are a bit off (intrument too quiet) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
42 * MID is fine (who wants to listen to MIDI vid adlib anyway) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
43 * CMF is okay (still needs the adlib rythm mode implemented |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
44 * for real) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
45 * 6/6/2000: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
46 * Status: SCI: there are two SCI formats, orginal and advanced. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
47 * original: (Found in SCI/EGA Sierra Adventures) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
48 * played almost perfectly, I believe |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
49 * there is one mistake in the instrument |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
50 * loader that causes some sounds to |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
51 * not be quite right. Most sounds are fine. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
52 * advanced: (Found in SCI/VGA Sierra Adventures) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
53 * These are multi-track files. (Thus the |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
54 * player had to be modified to work with |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
55 * them.) This works fine. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
56 * There are also multiple tunes in each file. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
57 * I think some of them are supposed to be |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
58 * played at the same time, but I'm not sure |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
59 * when. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
60 * 8/16/200: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
61 * Status: LAA: now EGA and VGA lucas games work pretty well |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
62 * |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
63 * Other acknowledgements: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
64 * Allegro - for the midi instruments and the midi volume table |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
65 * SCUMM Revisited - for getting the .LAA / .MIDs out of those |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
66 * LucasArts files. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
67 * FreeSCI - for some information on the sci music files |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
68 * SD - the SCI Decoder (to get all .sci out of the Sierra files) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
69 */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
70 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
71 #include <stdlib.h> |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
72 #include <stdio.h> |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
73 #include <math.h> |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
74 #include <string.h> |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
75 #include "mid.h" |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
76 #include "mididata.h" |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
77 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
78 void CmidPlayer::midiprintf(char *format, ...) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
79 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
80 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
81 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
82 CPlayer *CmidPlayer::factory(Copl *newopl) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
83 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
84 return new CmidPlayer(newopl); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
85 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
86 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
87 unsigned char CmidPlayer::datalook(long pos) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
88 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
89 if (pos<0 || pos >= flen) return(0); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
90 return(data[pos]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
91 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
92 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
93 unsigned long CmidPlayer::getnexti(unsigned long num) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
94 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
95 unsigned long v=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
96 unsigned long i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
97 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
98 for (i=0; i<num; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
99 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
100 v+=(datalook(pos)<<(8*i)); pos++; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
101 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
102 return(v); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
103 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
104 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
105 unsigned long CmidPlayer::getnext(unsigned long num) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
106 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
107 unsigned long v=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
108 unsigned long i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
109 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
110 for (i=0; i<num; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
111 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
112 v<<=8; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
113 v+=datalook(pos); pos++; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
114 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
115 return(v); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
116 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
117 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
118 unsigned long CmidPlayer::getval() |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
119 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
120 int v=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
121 unsigned char b; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
122 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
123 b=(unsigned char)getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
124 v=b&0x7f; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
125 while ((b&0x80) !=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
126 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
127 b=(unsigned char)getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
128 v = (v << 7) + (b & 0x7F); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
129 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
130 return(v); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
131 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
132 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
133 #define LUCAS_STYLE 1 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
134 #define CMF_STYLE 2 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
135 #define MIDI_STYLE 4 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
136 #define SIERRA_STYLE 8 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
137 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
138 #define ADLIB_MELODIC 0 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
139 #define ADLIB_RYTHM 1 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
140 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
141 bool CmidPlayer::load_sierra_ins(const std::string &fname, const CFileProvider &fp) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
142 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
143 long i,j,k,l; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
144 unsigned char ins[28]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
145 char *pfilename; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
146 binistream *f; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
147 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
148 pfilename = (char *)malloc(fname.length()+9); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
149 strcpy(pfilename,fname.c_str()); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
150 j=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
151 for(i=strlen(pfilename)-1; i >= 0; i--) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
152 if(pfilename[i] == '/' || pfilename[i] == '\\') { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
153 j = i+1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
154 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
155 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
156 sprintf(pfilename+j+3,"patch.003"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
157 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
158 f = fp.open(pfilename); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
159 free(pfilename); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
160 if(!f) return false; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
161 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
162 f->ignore(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
163 stins = 0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
164 for (i=0; i<2; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
165 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
166 for (k=0; k<48; k++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
167 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
168 l=i*48+k; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
169 midiprintf ("\n%2d: ",l); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
170 for (j=0; j<28; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
171 ins[j] = f->readInt(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
172 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
173 myinsbank[l][0]= |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
174 (ins[9]*0x80) + (ins[10]*0x40) + |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
175 (ins[5]*0x20) + (ins[11]*0x10) + |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
176 ins[1]; //1=ins5 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
177 myinsbank[l][1]= |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
178 (ins[22]*0x80) + (ins[23]*0x40) + |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
179 (ins[18]*0x20) + (ins[24]*0x10) + |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
180 ins[14]; //1=ins18 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
181 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
182 myinsbank[l][2]=(ins[0]<<6)+ins[8]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
183 myinsbank[l][3]=(ins[13]<<6)+ins[21]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
184 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
185 myinsbank[l][4]=(ins[3]<<4)+ins[6]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
186 myinsbank[l][5]=(ins[16]<<4)+ins[19]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
187 myinsbank[l][6]=(ins[4]<<4)+ins[7]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
188 myinsbank[l][7]=(ins[17]<<4)+ins[20]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
189 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
190 myinsbank[l][8]=ins[26]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
191 myinsbank[l][9]=ins[27]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
192 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
193 myinsbank[l][10]=((ins[2]<<1))+(1-(ins[12]&1)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
194 //(ins[12] ? 0:1)+((ins[2]<<1)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
195 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
196 for (j=0; j<11; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
197 midiprintf ("%02X ",myinsbank[l][j]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
198 stins++; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
199 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
200 f->ignore(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
201 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
202 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
203 fp.close(f); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
204 memcpy(smyinsbank, myinsbank, 128 * 16); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
205 return true; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
206 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
207 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
208 void CmidPlayer::sierra_next_section() |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
209 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
210 int i,j; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
211 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
212 for (i=0; i<16; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
213 track[i].on=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
214 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
215 midiprintf("\n\nnext adv sierra section:\n"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
216 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
217 pos=sierra_pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
218 i=0;j=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
219 while (i!=0xff) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
220 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
221 getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
222 curtrack=j; j++; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
223 track[curtrack].on=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
224 track[curtrack].spos = getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
225 track[curtrack].spos += (getnext(1) << 8) + 4; //4 best usually +3? not 0,1,2 or 5 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
226 // track[curtrack].spos=getnext(1)+(getnext(1)<<8)+4; // dynamite!: doesn't optimize correctly!! |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
227 track[curtrack].tend=flen; //0xFC will kill it |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
228 track[curtrack].iwait=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
229 track[curtrack].pv=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
230 midiprintf ("track %d starts at %lx\n",curtrack,track[curtrack].spos); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
231 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
232 getnext(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
233 i=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
234 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
235 getnext(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
236 deltas=0x20; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
237 sierra_pos=pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
238 //getch(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
239 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
240 fwait=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
241 doing=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
242 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
243 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
244 #define FILE_LUCAS 1 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
245 #define FILE_MIDI 2 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
246 #define FILE_CMF 3 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
247 #define FILE_SIERRA 4 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
248 #define FILE_ADVSIERRA 5 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
249 #define FILE_OLDLUCAS 6 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
250 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
251 bool CmidPlayer::load(const std::string &filename, const CFileProvider &fp) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
252 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
253 binistream *f = fp.open(filename); if(!f) return false; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
254 int good; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
255 unsigned char s[6]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
256 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
257 f->readString((char *)s, 6); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
258 good=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
259 subsongs=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
260 switch(s[0]) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
261 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
262 case 'A': |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
263 if (s[1]=='D' && s[2]=='L') good=FILE_LUCAS; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
264 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
265 case 'C': |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
266 if (s[1]=='T' && s[2]=='M' && s[3]=='F') good=FILE_CMF; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
267 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
268 case 0x84: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
269 if (s[1]==0x00 && load_sierra_ins(filename, fp)) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
270 if (s[2]==0xf0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
271 good=FILE_ADVSIERRA; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
272 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
273 good=FILE_SIERRA; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
274 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
275 default: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
276 if (s[4]=='A' && s[5]=='D') good=FILE_OLDLUCAS; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
277 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
278 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
279 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
280 if (good!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
281 subsongs=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
282 else { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
283 fp.close(f); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
284 return false; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
285 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
286 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
287 type=good; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
288 f->seek(0); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
289 flen = fp.filesize(f); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
290 data = new unsigned char [flen]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
291 f->readString((char *)data, flen); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
292 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
293 fp.close(f); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
294 rewind(0); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
295 return true; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
296 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
297 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
298 void CmidPlayer::midi_write_adlib(unsigned int r, unsigned char v) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
299 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
300 opl->write(r,v); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
301 adlib_data[r]=v; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
302 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
303 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
304 unsigned char adlib_opadd[] = {0x00 ,0x01 ,0x02 ,0x08 ,0x09 ,0x0A ,0x10 ,0x11 ,0x12}; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
305 int ops[] = {0x20,0x20,0x40,0x40,0x60,0x60,0x80,0x80,0xe0,0xe0,0xc0}; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
306 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
307 void CmidPlayer::midi_fm_instrument(int voice, unsigned char *inst) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
308 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
309 if ((adlib_style&SIERRA_STYLE)!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
310 midi_write_adlib(0xbd,0); //just gotta make sure this happens.. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
311 //'cause who knows when it'll be |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
312 //reset otherwise. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
313 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
314 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
315 midi_write_adlib(0x20+adlib_opadd[voice],inst[0]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
316 midi_write_adlib(0x23+adlib_opadd[voice],inst[1]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
317 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
318 if ((adlib_style&LUCAS_STYLE)!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
319 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
320 midi_write_adlib(0x43+adlib_opadd[voice],0x3f); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
321 if ((inst[10] & 1)==0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
322 midi_write_adlib(0x40+adlib_opadd[voice],inst[2]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
323 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
324 midi_write_adlib(0x40+adlib_opadd[voice],0x3f); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
325 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
326 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
327 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
328 if ((adlib_style&SIERRA_STYLE)!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
329 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
330 midi_write_adlib(0x40+adlib_opadd[voice],inst[2]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
331 midi_write_adlib(0x43+adlib_opadd[voice],inst[3]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
332 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
333 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
334 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
335 midi_write_adlib(0x40+adlib_opadd[voice],inst[2]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
336 if ((inst[10] & 1)==0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
337 midi_write_adlib(0x43+adlib_opadd[voice],inst[3]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
338 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
339 midi_write_adlib(0x43+adlib_opadd[voice],0); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
340 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
341 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
342 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
343 midi_write_adlib(0x60+adlib_opadd[voice],inst[4]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
344 midi_write_adlib(0x63+adlib_opadd[voice],inst[5]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
345 midi_write_adlib(0x80+adlib_opadd[voice],inst[6]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
346 midi_write_adlib(0x83+adlib_opadd[voice],inst[7]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
347 midi_write_adlib(0xe0+adlib_opadd[voice],inst[8]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
348 midi_write_adlib(0xe3+adlib_opadd[voice],inst[9]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
349 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
350 midi_write_adlib(0xc0+voice,inst[10]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
351 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
352 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
353 void CmidPlayer::midi_fm_volume(int voice, int volume) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
354 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
355 int vol; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
356 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
357 if ((adlib_style&SIERRA_STYLE)==0) //sierra likes it loud! |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
358 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
359 vol=volume>>2; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
360 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
361 if ((adlib_style&LUCAS_STYLE)!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
362 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
363 if ((adlib_data[0xc0+voice]&1)==1) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
364 midi_write_adlib(0x40+adlib_opadd[voice], (unsigned |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
365 char)((63-vol) | |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
366 (adlib_data[0x40+adlib_opadd[voice]]&0xc0))); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
367 midi_write_adlib(0x43+adlib_opadd[voice], (unsigned char)((63-vol) | |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
368 (adlib_data[0x43+adlib_opadd[voice]]&0xc0))); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
369 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
370 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
371 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
372 if ((adlib_data[0xc0+voice]&1)==1) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
373 midi_write_adlib(0x40+adlib_opadd[voice], (unsigned |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
374 char)((63-vol) | |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
375 (adlib_data[0x40+adlib_opadd[voice]]&0xc0))); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
376 midi_write_adlib(0x43+adlib_opadd[voice], (unsigned char)((63-vol) | |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
377 (adlib_data[0x43+adlib_opadd[voice]]&0xc0))); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
378 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
379 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
380 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
381 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
382 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
383 int fnums[] = { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
384 0x16b,0x181,0x198,0x1b0,0x1ca,0x1e5,0x202,0x220,0x241,0x263,0x287,0x2ae |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
385 }; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
386 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
387 void CmidPlayer::midi_fm_playnote(int voice, int note, int volume) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
388 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
389 int freq=fnums[note%12]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
390 int oct=note/12; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
391 int c; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
392 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
393 midi_fm_volume(voice,volume); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
394 midi_write_adlib(0xa0+voice,(unsigned char)(freq&0xff)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
395 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
396 c=((freq&0x300) >> 8)+(oct<<2) + (1<<5); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
397 midi_write_adlib(0xb0+voice,(unsigned char)c); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
398 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
399 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
400 void CmidPlayer::midi_fm_endnote(int voice) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
401 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
402 //midi_fm_volume(voice,0); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
403 //midi_write_adlib(0xb0+voice,0); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
404 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
405 midi_write_adlib(0xb0+voice,(unsigned char)(adlib_data[0xb0+voice]&(255-32))); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
406 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
407 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
408 void CmidPlayer::midi_fm_reset() |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
409 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
410 int i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
411 for (i=0; i<256; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
412 midi_write_adlib(i,0); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
413 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
414 midi_write_adlib(0x01, 0x20); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
415 midi_write_adlib(0xBD,0xc0); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
416 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
417 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
418 bool CmidPlayer::update() |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
419 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
420 long w,v,note,vel,ctrl,nv,x,l,lnum; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
421 int i=0,j,c; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
422 int on,onl; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
423 unsigned char ins[11]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
424 int ret; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
425 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
426 if (doing == 1) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
427 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
428 // just get the first wait and ignore it :> |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
429 for (curtrack=0; curtrack<16; curtrack++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
430 if (track[curtrack].on) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
431 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
432 pos=track[curtrack].pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
433 if (type != FILE_SIERRA && type !=FILE_ADVSIERRA) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
434 track[curtrack].iwait+=getval(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
435 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
436 track[curtrack].iwait+=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
437 track[curtrack].pos=pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
438 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
439 doing=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
440 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
441 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
442 iwait=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
443 ret=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
444 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
445 while (iwait==0 && ret==1) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
446 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
447 for (curtrack=0; curtrack<16; curtrack++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
448 if (track[curtrack].on && track[curtrack].iwait==0 && |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
449 track[curtrack].pos < track[curtrack].tend) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
450 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
451 pos=track[curtrack].pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
452 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
453 v=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
454 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
455 // This is to do implied MIDI events. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
456 if (v<0x80) {v=track[curtrack].pv; pos--;} |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
457 track[curtrack].pv=(unsigned char)v; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
458 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
459 c=v&0x0f; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
460 midiprintf ("[%2X]",v); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
461 switch(v&0xf0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
462 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
463 case 0x80: /*note off*/ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
464 note=getnext(1); vel=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
465 for (i=0; i<9; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
466 if (chp[i][0]==c && chp[i][1]==note) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
467 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
468 midi_fm_endnote(i); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
469 chp[i][0]=-1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
470 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
471 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
472 case 0x90: /*note on*/ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
473 // doing=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
474 note=getnext(1); vel=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
475 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
476 if (ch[c].on!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
477 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
478 for (i=0; i<9; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
479 chp[i][2]++; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
480 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
481 j=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
482 on=-1;onl=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
483 for (i=0; i<9; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
484 if (chp[i][0]==-1 && chp[i][2]>onl) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
485 { onl=chp[i][2]; on=i; j=1; } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
486 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
487 if (on==-1) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
488 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
489 onl=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
490 for (i=0; i<9; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
491 if (chp[i][2]>onl) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
492 { onl=chp[i][2]; on=i; } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
493 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
494 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
495 if (j==0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
496 midi_fm_endnote(on); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
497 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
498 if (vel!=0 && ch[c].inum>=0 && ch[c].inum<128) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
499 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
500 if (adlib_mode == ADLIB_MELODIC || c < 12) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
501 midi_fm_instrument(on,ch[c].ins); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
502 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
503 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
504 //the following fails to be effective |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
505 //at doing rythm sounds .. (cmf blah) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
506 ins[0]=ins[1]=ch[c].ins[0]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
507 ins[2]=ins[3]=ch[c].ins[2]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
508 ins[4]=ins[5]=ch[c].ins[4]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
509 ins[6]=ins[7]=ch[c].ins[6]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
510 ins[8]=ins[9]=ch[c].ins[8]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
511 ins[10]=ch[c].ins[10]|1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
512 midi_fm_instrument(on,ins); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
513 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
514 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
515 if ((adlib_style&MIDI_STYLE)!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
516 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
517 nv=((ch[c].vol*vel)/128); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
518 if ((adlib_style&LUCAS_STYLE)!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
519 nv*=2; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
520 if (nv>127) nv=127; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
521 nv=my_midi_fm_vol_table[nv]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
522 if ((adlib_style&LUCAS_STYLE)!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
523 nv=(int)((float)sqrt((float)nv)*11); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
524 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
525 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
526 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
527 nv=vel; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
528 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
529 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
530 midi_fm_playnote(on,note+ch[c].nshift,nv*2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
531 chp[on][0]=c; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
532 chp[on][1]=note; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
533 chp[on][2]=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
534 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
535 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
536 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
537 if (vel==0) //same code as end note |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
538 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
539 for (i=0; i<9; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
540 if (chp[i][0]==c && chp[i][1]==note) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
541 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
542 // midi_fm_volume(i,0); // really end the note |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
543 midi_fm_endnote(i); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
544 chp[i][0]=-1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
545 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
546 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
547 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
548 { // i forget what this is for. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
549 chp[on][0]=-1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
550 chp[on][2]=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
551 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
552 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
553 midiprintf(" [%d:%d:%d:%d]\n",c,ch[c].inum,note,vel); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
554 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
555 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
556 midiprintf ("off"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
557 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
558 case 0xa0: /*key after touch */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
559 note=getnext(1); vel=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
560 /* //this might all be good |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
561 for (i=0; i<9; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
562 if (chp[i][0]==c & chp[i][1]==note) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
563 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
564 midi_fm_playnote(i,note+cnote[c],my_midi_fm_vol_table[(cvols[c]*vel)/128]*2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
565 */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
566 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
567 case 0xb0: /*control change .. pitch bend? */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
568 ctrl=getnext(1); vel=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
569 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
570 switch(ctrl) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
571 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
572 case 0x07: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
573 midiprintf ("(pb:%d: %d %d)",c,ctrl,vel); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
574 ch[c].vol=vel; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
575 midiprintf("vol"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
576 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
577 case 0x67: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
578 midiprintf ("\n\nhere:%d\n\n",vel); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
579 if ((adlib_style&CMF_STYLE)!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
580 adlib_mode=vel; // this gets faked - no mode change |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
581 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
582 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
583 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
584 case 0xc0: /*patch change*/ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
585 x=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
586 ch[c].inum=x; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
587 for (j=0; j<11; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
588 ch[c].ins[j]=myinsbank[ch[c].inum][j]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
589 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
590 case 0xd0: /*chanel touch*/ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
591 x=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
592 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
593 case 0xe0: /*pitch wheel*/ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
594 x=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
595 x=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
596 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
597 case 0xf0: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
598 switch(v) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
599 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
600 case 0xf0: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
601 case 0xf7: /*sysex*/ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
602 l=getval(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
603 if (datalook(pos+l)==0xf7) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
604 i=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
605 midiprintf("{%d}",l); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
606 midiprintf("\n"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
607 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
608 if (datalook(pos)==0x7d && |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
609 datalook(pos+1)==0x10 && |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
610 datalook(pos+2)<16) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
611 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
612 adlib_style=LUCAS_STYLE|MIDI_STYLE; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
613 for (i=0; i<l; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
614 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
615 midiprintf ("%x ",datalook(pos+i)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
616 if ((i-3)%10 == 0) midiprintf("\n"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
617 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
618 midiprintf ("\n"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
619 getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
620 getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
621 c=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
622 getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
623 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
624 // getnext(22); //temp |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
625 ch[c].ins[0]=(unsigned char)((getnext(1)<<4)+getnext(1)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
626 ch[c].ins[2]=(unsigned char)(0xff-(((getnext(1)<<4)+getnext(1))&0x3f)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
627 ch[c].ins[4]=(unsigned char)(0xff-((getnext(1)<<4)+getnext(1))); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
628 ch[c].ins[6]=(unsigned char)(0xff-((getnext(1)<<4)+getnext(1))); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
629 ch[c].ins[8]=(unsigned char)((getnext(1)<<4)+getnext(1)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
630 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
631 ch[c].ins[1]=(unsigned char)((getnext(1)<<4)+getnext(1)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
632 ch[c].ins[3]=(unsigned char)(0xff-(((getnext(1)<<4)+getnext(1))&0x3f)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
633 ch[c].ins[5]=(unsigned char)(0xff-((getnext(1)<<4)+getnext(1))); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
634 ch[c].ins[7]=(unsigned char)(0xff-((getnext(1)<<4)+getnext(1))); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
635 ch[c].ins[9]=(unsigned char)((getnext(1)<<4)+getnext(1)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
636 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
637 i=(getnext(1)<<4)+getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
638 ch[c].ins[10]=i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
639 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
640 //if ((i&1)==1) ch[c].ins[10]=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
641 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
642 midiprintf ("\n%d: ",c); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
643 for (i=0; i<11; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
644 midiprintf ("%2X ",ch[c].ins[i]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
645 getnext(l-26); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
646 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
647 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
648 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
649 midiprintf("\n"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
650 for (j=0; j<l; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
651 midiprintf ("%2X ",getnext(1)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
652 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
653 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
654 midiprintf("\n"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
655 if(i==1) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
656 getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
657 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
658 case 0xf1: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
659 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
660 case 0xf2: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
661 getnext(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
662 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
663 case 0xf3: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
664 getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
665 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
666 case 0xf4: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
667 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
668 case 0xf5: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
669 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
670 case 0xf6: /*something*/ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
671 case 0xf8: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
672 case 0xfa: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
673 case 0xfb: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
674 case 0xfc: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
675 //this ends the track for sierra. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
676 if (type == FILE_SIERRA || |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
677 type == FILE_ADVSIERRA) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
678 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
679 track[curtrack].tend=pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
680 midiprintf ("endmark: %ld -- %lx\n",pos,pos); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
681 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
682 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
683 case 0xfe: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
684 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
685 case 0xfd: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
686 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
687 case 0xff: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
688 v=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
689 l=getval(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
690 midiprintf ("\n"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
691 midiprintf("{%X_%X}",v,l); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
692 if (v==0x51) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
693 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
694 lnum=getnext(l); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
695 msqtr=lnum; /*set tempo*/ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
696 midiprintf ("(qtr=%ld)",msqtr); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
697 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
698 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
699 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
700 for (i=0; i<l; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
701 midiprintf ("%2X ",getnext(1)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
702 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
703 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
704 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
705 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
706 default: midiprintf("!",v); /* if we get down here, a error occurred */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
707 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
708 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
709 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
710 if (pos < track[curtrack].tend) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
711 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
712 if (type != FILE_SIERRA && type !=FILE_ADVSIERRA) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
713 w=getval(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
714 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
715 w=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
716 track[curtrack].iwait=w; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
717 /* |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
718 if (w!=0) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
719 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
720 midiprintf("\n<%d>",w); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
721 f = |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
722 ((float)w/(float)deltas)*((float)msqtr/(float)1000000); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
723 if (doing==1) f=0; //not playing yet. don't wait yet |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
724 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
725 */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
726 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
727 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
728 track[curtrack].iwait=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
729 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
730 track[curtrack].pos=pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
731 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
732 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
733 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
734 ret=0; //end of song. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
735 iwait=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
736 for (curtrack=0; curtrack<16; curtrack++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
737 if (track[curtrack].on == 1 && |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
738 track[curtrack].pos < track[curtrack].tend) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
739 ret=1; //not yet.. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
740 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
741 if (ret==1) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
742 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
743 iwait=0xffffff; // bigger than any wait can be! |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
744 for (curtrack=0; curtrack<16; curtrack++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
745 if (track[curtrack].on == 1 && |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
746 track[curtrack].pos < track[curtrack].tend && |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
747 track[curtrack].iwait < iwait) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
748 iwait=track[curtrack].iwait; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
749 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
750 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
751 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
752 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
753 if (iwait !=0 && ret==1) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
754 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
755 for (curtrack=0; curtrack<16; curtrack++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
756 if (track[curtrack].on) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
757 track[curtrack].iwait-=iwait; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
758 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
759 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
760 fwait=1.0f/(((float)iwait/(float)deltas)*((float)msqtr/(float)1000000)); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
761 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
762 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
763 fwait=50; // 1/50th of a second |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
764 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
765 midiprintf ("\n"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
766 for (i=0; i<16; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
767 if (track[i].on) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
768 if (track[i].pos < track[i].tend) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
769 midiprintf ("<%d>",track[i].iwait); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
770 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
771 midiprintf("stop"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
772 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
773 /* |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
774 if (ret==0 && type==FILE_ADVSIERRA) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
775 if (datalook(sierra_pos-2)!=0xff) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
776 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
777 midiprintf ("next sectoin!"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
778 sierra_next_section(p); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
779 fwait=50; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
780 ret=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
781 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
782 */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
783 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
784 if(ret) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
785 return true; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
786 else |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
787 return false; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
788 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
789 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
790 float CmidPlayer::getrefresh() |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
791 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
792 return (fwait > 0.01f ? fwait : 0.01f); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
793 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
794 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
795 void CmidPlayer::rewind(int subsong) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
796 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
797 long i,j,n,m,l; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
798 long o_sierra_pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
799 unsigned char ins[16]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
800 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
801 pos=0; tins=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
802 adlib_style=MIDI_STYLE|CMF_STYLE; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
803 adlib_mode=ADLIB_MELODIC; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
804 for (i=0; i<128; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
805 for (j=0; j<16; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
806 myinsbank[i][j]=midi_fm_instruments[i][j]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
807 for (i=0; i<16; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
808 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
809 ch[i].inum=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
810 for (j=0; j<11; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
811 ch[i].ins[j]=myinsbank[ch[i].inum][j]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
812 ch[i].vol=127; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
813 ch[i].nshift=-25; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
814 ch[i].on=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
815 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
816 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
817 /* General init */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
818 for (i=0; i<9; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
819 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
820 chp[i][0]=-1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
821 chp[i][2]=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
822 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
823 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
824 deltas=250; // just a number, not a standard |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
825 msqtr=500000; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
826 fwait=123; // gotta be a small thing.. sorta like nothing |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
827 iwait=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
828 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
829 subsongs=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
830 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
831 for (i=0; i<16; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
832 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
833 track[i].tend=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
834 track[i].spos=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
835 track[i].pos=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
836 track[i].iwait=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
837 track[i].on=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
838 track[i].pv=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
839 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
840 curtrack=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
841 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
842 /* specific to file-type init */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
843 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
844 pos=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
845 i=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
846 switch(type) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
847 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
848 case FILE_LUCAS: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
849 getnext(24); //skip junk and get to the midi. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
850 adlib_style=LUCAS_STYLE|MIDI_STYLE; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
851 //note: no break, we go right into midi headers... |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
852 case FILE_MIDI: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
853 if (type != FILE_LUCAS) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
854 tins=128; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
855 getnext(11); /*skip header*/ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
856 deltas=getnext(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
857 midiprintf ("deltas:%ld\n",deltas); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
858 getnext(4); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
859 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
860 curtrack=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
861 track[curtrack].on=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
862 track[curtrack].tend=getnext(4); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
863 track[curtrack].spos=pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
864 midiprintf ("tracklen:%ld\n",track[curtrack].tend); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
865 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
866 case FILE_CMF: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
867 getnext(3); // ctmf |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
868 getnexti(2); //version |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
869 n=getnexti(2); // instrument offset |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
870 m=getnexti(2); // music offset |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
871 deltas=getnexti(2); //ticks/qtr note |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
872 msqtr=1000000/getnexti(2)*deltas; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
873 //the stuff in the cmf is click ticks per second.. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
874 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
875 i=getnexti(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
876 if(i) title = (char *)data+i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
877 i=getnexti(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
878 if(i) author = (char *)data+i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
879 i=getnexti(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
880 if(i) remarks = (char *)data+i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
881 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
882 getnext(16); // channel in use table .. |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
883 i=getnexti(2); // num instr |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
884 if (i>128) i=128; // to ward of bad numbers... |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
885 getnexti(2); //basic tempo |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
886 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
887 midiprintf("\nioff:%d\nmoff%d\ndeltas:%ld\nmsqtr:%ld\nnumi:%d\n", |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
888 n,m,deltas,msqtr,i); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
889 pos=n; // jump to instruments |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
890 tins=i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
891 for (j=0; j<i; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
892 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
893 midiprintf ("\n%d: ",j); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
894 for (l=0; l<16; l++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
895 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
896 myinsbank[j][l]=(unsigned char)getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
897 midiprintf ("%2X ",myinsbank[j][l]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
898 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
899 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
900 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
901 for (i=0; i<16; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
902 ch[i].nshift=-13; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
903 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
904 adlib_style=CMF_STYLE; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
905 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
906 curtrack=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
907 track[curtrack].on=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
908 track[curtrack].tend=flen; // music until the end of the file |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
909 track[curtrack].spos=m; //jump to midi music |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
910 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
911 case FILE_OLDLUCAS: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
912 msqtr=250000; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
913 pos=9; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
914 deltas=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
915 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
916 i=8; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
917 pos=0x19; // jump to instruments |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
918 tins=i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
919 for (j=0; j<i; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
920 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
921 midiprintf ("\n%d: ",j); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
922 for (l=0; l<16; l++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
923 ins[l]=(unsigned char)getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
924 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
925 myinsbank[j][10]=ins[2]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
926 myinsbank[j][0]=ins[3]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
927 myinsbank[j][2]=ins[4]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
928 myinsbank[j][4]=ins[5]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
929 myinsbank[j][6]=ins[6]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
930 myinsbank[j][8]=ins[7]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
931 myinsbank[j][1]=ins[8]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
932 myinsbank[j][3]=ins[9]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
933 myinsbank[j][5]=ins[10]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
934 myinsbank[j][7]=ins[11]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
935 myinsbank[j][9]=ins[12]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
936 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
937 for (l=0; l<11; l++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
938 midiprintf ("%2X ",myinsbank[j][l]); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
939 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
940 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
941 for (i=0; i<16; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
942 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
943 if (i<tins) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
944 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
945 ch[i].inum=i; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
946 for (j=0; j<11; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
947 ch[i].ins[j]=myinsbank[ch[i].inum][j]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
948 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
949 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
950 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
951 adlib_style=LUCAS_STYLE|MIDI_STYLE; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
952 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
953 curtrack=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
954 track[curtrack].on=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
955 track[curtrack].tend=flen; // music until the end of the file |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
956 track[curtrack].spos=0x98; //jump to midi music |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
957 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
958 case FILE_ADVSIERRA: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
959 memcpy(myinsbank, smyinsbank, 128 * 16); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
960 tins = stins; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
961 deltas=0x20; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
962 getnext(11); //worthless empty space and "stuff" :) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
963 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
964 o_sierra_pos=sierra_pos=pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
965 sierra_next_section(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
966 while (datalook(sierra_pos-2)!=0xff) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
967 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
968 sierra_next_section(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
969 subsongs++; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
970 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
971 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
972 if (subsong < 0 || subsong >= subsongs) subsong=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
973 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
974 sierra_pos=o_sierra_pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
975 sierra_next_section(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
976 i=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
977 while (i != subsong) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
978 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
979 sierra_next_section(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
980 i++; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
981 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
982 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
983 adlib_style=SIERRA_STYLE|MIDI_STYLE; //advanced sierra tunes use volume |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
984 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
985 case FILE_SIERRA: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
986 memcpy(myinsbank, smyinsbank, 128 * 16); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
987 tins = stins; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
988 getnext(2); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
989 deltas=0x20; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
990 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
991 curtrack=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
992 track[curtrack].on=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
993 track[curtrack].tend=flen; // music until the end of the file |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
994 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
995 for (i=0; i<16; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
996 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
997 ch[i].nshift=-13; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
998 ch[i].on=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
999 ch[i].inum=getnext(1); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1000 for (j=0; j<11; j++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1001 ch[i].ins[j]=myinsbank[ch[i].inum][j]; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1002 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1003 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1004 track[curtrack].spos=pos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1005 adlib_style=SIERRA_STYLE|MIDI_STYLE; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1006 break; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1007 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1008 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1009 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1010 /* sprintf(info,"%s\r\nTicks/Quarter Note: %ld\r\n",info,deltas); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1011 sprintf(info,"%sms/Quarter Note: %ld",info,msqtr); */ |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1012 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1013 for (i=0; i<16; i++) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1014 if (track[i].on) |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1015 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1016 track[i].pos=track[i].spos; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1017 track[i].pv=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1018 track[i].iwait=0; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1019 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1020 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1021 doing=1; |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1022 opl->init(); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1023 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1024 |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1025 std::string CmidPlayer::gettype() |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1026 { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1027 switch(type) { |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1028 case FILE_LUCAS: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1029 return std::string("LucasArts AdLib MIDI"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1030 case FILE_MIDI: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1031 return std::string("General MIDI"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1032 case FILE_CMF: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1033 return std::string("Creative Music Format (CMF MIDI)"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1034 case FILE_OLDLUCAS: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1035 return std::string("Lucasfilm Adlib MIDI"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1036 case FILE_ADVSIERRA: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1037 return std::string("Sierra On-Line VGA MIDI"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1038 case FILE_SIERRA: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1039 return std::string("Sierra On-Line EGA MIDI"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1040 default: |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1041 return std::string("MIDI unknown"); |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1042 } |
451d2dc68ba8
[svn] Support .cmf .sci & .laa without stealing .mid from timidity.
chainsaw
parents:
diff
changeset
|
1043 } |