comparison src/adplug/core/adtrack.cxx @ 955:4709ce4e209e trunk

[svn] Run indent -ts4 -nut -bli0 -cdw on this messy lot. Upstream is not consistent with whitespace anyway, no loss there.
author chainsaw
date Sat, 14 Apr 2007 15:23:50 -0700
parents cae46214b8bf
children fa9f85cebade
comparison
equal deleted inserted replaced
954:d7a6fd179cd2 955:4709ce4e209e
35 #include "adtrack.h" 35 #include "adtrack.h"
36 #include "debug.h" 36 #include "debug.h"
37 37
38 /*** Public methods ***/ 38 /*** Public methods ***/
39 39
40 CPlayer *CadtrackLoader::factory(Copl *newopl) 40 CPlayer *
41 { 41 CadtrackLoader::factory (Copl * newopl)
42 return new CadtrackLoader(newopl); 42 {
43 } 43 return new CadtrackLoader (newopl);
44 44 }
45 bool CadtrackLoader::load(VFSFile *fd, const CFileProvider &fp) 45
46 { 46 bool
47 binistream *f = fp.open(fd); if(!f) return false; 47 CadtrackLoader::load (VFSFile * fd, const CFileProvider & fp)
48 {
49 binistream *f = fp.open (fd);
50 if (!f)
51 return false;
48 binistream *instf; 52 binistream *instf;
49 char note[2]; 53 char note[2];
50 unsigned short rwp; 54 unsigned short rwp;
51 unsigned char chp, octave, pnote = 0; 55 unsigned char chp, octave, pnote = 0;
52 int i,j; 56 int i, j;
53 AdTrackInst myinst; 57 AdTrackInst myinst;
54 std::string filename(fd->uri); 58 std::string filename (fd->uri);
55 59
56 // file validation 60 // file validation
57 if(!fp.extension(filename, ".sng") || fp.filesize(f) != 36000) 61 if (!fp.extension (filename, ".sng") || fp.filesize (f) != 36000)
58 { fp.close(f); return false; } 62 {
63 fp.close (f);
64 return false;
65 }
59 66
60 // check for instruments file 67 // check for instruments file
61 std::string instfilename(filename, 0, filename.find_last_of('.')); 68 std::string instfilename (filename, 0, filename.find_last_of ('.'));
62 instfilename += ".ins"; 69 instfilename += ".ins";
63 AdPlug_LogWrite("CadtrackLoader::load(,\"%s\"): Checking for \"%s\"...\n", 70 AdPlug_LogWrite ("CadtrackLoader::load(,\"%s\"): Checking for \"%s\"...\n",
64 filename.c_str(), instfilename.c_str()); 71 filename.c_str (), instfilename.c_str ());
65 72
66 VFSFile *instfd = vfs_fopen(instfilename.c_str(), "rb"); 73 VFSFile *instfd = vfs_fopen (instfilename.c_str (), "rb");
67 instf = fp.open(instfd); 74 instf = fp.open (instfd);
68 if(!instf || fp.filesize(instf) != 468) { fp.close(f); vfs_fclose(instfd); return false; } 75 if (!instf || fp.filesize (instf) != 468)
76 {
77 fp.close (f);
78 vfs_fclose (instfd);
79 return false;
80 }
69 81
70 // give CmodPlayer a hint on what we're up to 82 // give CmodPlayer a hint on what we're up to
71 realloc_patterns(1,1000,9); realloc_instruments(9); realloc_order(1); 83 realloc_patterns (1, 1000, 9);
72 init_trackord(); flags = NoKeyOn; 84 realloc_instruments (9);
73 (*order) = 0; length = 1; restartpos = 0; bpm = 120; initspeed = 3; 85 realloc_order (1);
86 init_trackord ();
87 flags = NoKeyOn;
88 (*order) = 0;
89 length = 1;
90 restartpos = 0;
91 bpm = 120;
92 initspeed = 3;
74 93
75 // load instruments from instruments file 94 // load instruments from instruments file
76 for(i=0;i<9;i++) { 95 for (i = 0; i < 9; i++)
77 for(j=0;j<2;j++) { 96 {
78 myinst.op[j].appampmod = instf->readInt(2); 97 for (j = 0; j < 2; j++)
79 myinst.op[j].appvib = instf->readInt(2); 98 {
80 myinst.op[j].maintsuslvl = instf->readInt(2); 99 myinst.op[j].appampmod = instf->readInt (2);
81 myinst.op[j].keybscale = instf->readInt(2); 100 myinst.op[j].appvib = instf->readInt (2);
82 myinst.op[j].octave = instf->readInt(2); 101 myinst.op[j].maintsuslvl = instf->readInt (2);
83 myinst.op[j].freqrisevollvldn = instf->readInt(2); 102 myinst.op[j].keybscale = instf->readInt (2);
84 myinst.op[j].softness = instf->readInt(2); 103 myinst.op[j].octave = instf->readInt (2);
85 myinst.op[j].attack = instf->readInt(2); 104 myinst.op[j].freqrisevollvldn = instf->readInt (2);
86 myinst.op[j].decay = instf->readInt(2); 105 myinst.op[j].softness = instf->readInt (2);
87 myinst.op[j].release = instf->readInt(2); 106 myinst.op[j].attack = instf->readInt (2);
88 myinst.op[j].sustain = instf->readInt(2); 107 myinst.op[j].decay = instf->readInt (2);
89 myinst.op[j].feedback = instf->readInt(2); 108 myinst.op[j].release = instf->readInt (2);
90 myinst.op[j].waveform = instf->readInt(2); 109 myinst.op[j].sustain = instf->readInt (2);
110 myinst.op[j].feedback = instf->readInt (2);
111 myinst.op[j].waveform = instf->readInt (2);
91 } 112 }
92 convert_instrument(i, &myinst); 113 convert_instrument (i, &myinst);
93 } 114 }
94 fp.close(instf); 115 fp.close (instf);
95 116
96 // load file 117 // load file
97 for(rwp=0;rwp<1000;rwp++) 118 for (rwp = 0; rwp < 1000; rwp++)
98 for(chp=0;chp<9;chp++) { 119 for (chp = 0; chp < 9; chp++)
120 {
99 // read next record 121 // read next record
100 f->readString(note, 2); octave = f->readInt(1); f->ignore(); 122 f->readString (note, 2);
101 switch(*note) { 123 octave = f->readInt (1);
102 case 'C': if(note[1] == '#') pnote = 2; else pnote = 1; break; 124 f->ignore ();
103 case 'D': if(note[1] == '#') pnote = 4; else pnote = 3; break; 125 switch (*note)
104 case 'E': pnote = 5; break; 126 {
105 case 'F': if(note[1] == '#') pnote = 7; else pnote = 6; break; 127 case 'C':
106 case 'G': if(note[1] == '#') pnote = 9; else pnote = 8; break; 128 if (note[1] == '#')
107 case 'A': if(note[1] == '#') pnote = 11; else pnote = 10; break; 129 pnote = 2;
108 case 'B': pnote = 12; break; 130 else
131 pnote = 1;
132 break;
133 case 'D':
134 if (note[1] == '#')
135 pnote = 4;
136 else
137 pnote = 3;
138 break;
139 case 'E':
140 pnote = 5;
141 break;
142 case 'F':
143 if (note[1] == '#')
144 pnote = 7;
145 else
146 pnote = 6;
147 break;
148 case 'G':
149 if (note[1] == '#')
150 pnote = 9;
151 else
152 pnote = 8;
153 break;
154 case 'A':
155 if (note[1] == '#')
156 pnote = 11;
157 else
158 pnote = 10;
159 break;
160 case 'B':
161 pnote = 12;
162 break;
109 case '\0': 163 case '\0':
110 if(note[1] == '\0') 164 if (note[1] == '\0')
111 tracks[chp][rwp].note = 127; 165 tracks[chp][rwp].note = 127;
112 else { 166 else
113 fp.close(f); 167 {
114 return false; 168 fp.close (f);
115 } 169 return false;
116 break; 170 }
117 default: fp.close(f); return false; 171 break;
172 default:
173 fp.close (f);
174 return false;
118 } 175 }
119 if((*note) != '\0') { 176 if ((*note) != '\0')
120 tracks[chp][rwp].note = pnote + (octave * 12); 177 {
121 tracks[chp][rwp].inst = chp + 1; 178 tracks[chp][rwp].note = pnote + (octave * 12);
179 tracks[chp][rwp].inst = chp + 1;
122 } 180 }
123 } 181 }
124 182
125 fp.close(f); 183 fp.close (f);
126 rewind(0); 184 rewind (0);
127 return true; 185 return true;
128 } 186 }
129 187
130 float CadtrackLoader::getrefresh() 188 float
189 CadtrackLoader::getrefresh ()
131 { 190 {
132 return 18.2f; 191 return 18.2f;
133 } 192 }
134 193
135 /*** Private methods ***/ 194 /*** Private methods ***/
136 195
137 void CadtrackLoader::convert_instrument(unsigned int n, AdTrackInst *i) 196 void
197 CadtrackLoader::convert_instrument (unsigned int n, AdTrackInst * i)
138 { 198 {
139 // Carrier "Amp Mod / Vib / Env Type / KSR / Multiple" register 199 // Carrier "Amp Mod / Vib / Env Type / KSR / Multiple" register
140 inst[n].data[2] = i->op[Carrier].appampmod ? 1 << 7 : 0; 200 inst[n].data[2] = i->op[Carrier].appampmod ? 1 << 7 : 0;
141 inst[n].data[2] += i->op[Carrier].appvib ? 1 << 6 : 0; 201 inst[n].data[2] += i->op[Carrier].appvib ? 1 << 6 : 0;
142 inst[n].data[2] += i->op[Carrier].maintsuslvl ? 1 << 5 : 0; 202 inst[n].data[2] += i->op[Carrier].maintsuslvl ? 1 << 5 : 0;
143 inst[n].data[2] += i->op[Carrier].keybscale ? 1 << 4 : 0; 203 inst[n].data[2] += i->op[Carrier].keybscale ? 1 << 4 : 0;
144 inst[n].data[2] += (i->op[Carrier].octave + 1) & 0xffff; // Bug in original tracker 204 inst[n].data[2] += (i->op[Carrier].octave + 1) & 0xffff; // Bug in original tracker
145 // Modulator... 205 // Modulator...
146 inst[n].data[1] = i->op[Modulator].appampmod ? 1 << 7 : 0; 206 inst[n].data[1] = i->op[Modulator].appampmod ? 1 << 7 : 0;
147 inst[n].data[1] += i->op[Modulator].appvib ? 1 << 6 : 0; 207 inst[n].data[1] += i->op[Modulator].appvib ? 1 << 6 : 0;
148 inst[n].data[1] += i->op[Modulator].maintsuslvl ? 1 << 5 : 0; 208 inst[n].data[1] += i->op[Modulator].maintsuslvl ? 1 << 5 : 0;
149 inst[n].data[1] += i->op[Modulator].keybscale ? 1 << 4 : 0; 209 inst[n].data[1] += i->op[Modulator].keybscale ? 1 << 4 : 0;
150 inst[n].data[1] += (i->op[Modulator].octave + 1) & 0xffff; // Bug in original tracker 210 inst[n].data[1] += (i->op[Modulator].octave + 1) & 0xffff; // Bug in original tracker
151 211
152 // Carrier "Key Scaling / Level" register 212 // Carrier "Key Scaling / Level" register
153 inst[n].data[10] = (i->op[Carrier].freqrisevollvldn & 3) << 6; 213 inst[n].data[10] = (i->op[Carrier].freqrisevollvldn & 3) << 6;
154 inst[n].data[10] += i->op[Carrier].softness & 63; 214 inst[n].data[10] += i->op[Carrier].softness & 63;
155 // Modulator... 215 // Modulator...