[Scummvm-cvs-logs] CVS: scummvm/scumm resource.cpp,1.165,1.166
Jamieson Christian
jamieson630 at users.sourceforge.net
Sat Oct 11 08:19:03 CEST 2003
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/dists/msvc6 queen.dsp,1.2,1.3
- Next message: [Scummvm-cvs-logs] CVS: tools descumm.h,1.6,1.7 descumm-common.cpp,1.6,1.7 descumm.cpp,1.79,1.80 descumm6.cpp,1.119,1.120
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv16795/scummvm/scumm
Modified Files:
resource.cpp
Log Message:
Some Mac0 conversion tweaks
Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource.cpp,v
retrieving revision 1.165
retrieving revision 1.166
diff -u -d -r1.165 -r1.166
--- resource.cpp 10 Oct 2003 21:40:25 -0000 1.165
+++ resource.cpp 11 Oct 2003 15:18:49 -0000 1.166
@@ -1016,22 +1016,23 @@
return ptr;
}
-static inline byte Mac0ToGMInstrument(uint32 type) {
+static inline byte Mac0ToGMInstrument(uint32 type, int &transpose) {
+ transpose = 0;
switch (type) {
- case MKID('MARI'): return 13;
- case MKID('PLUC'): return 46;
- case MKID('HARM'): return 23;
- case MKID('PIPE'): return 110; // 20 or 74 or 110 ?
- case MKID('TROM'): return 58;
- case MKID('STRI'): return 49; // 49 or 50
- case MKID('HORN'): return 61; // 61 or 70
- case MKID('VIBE'): return 12;
- case MKID('SHAK'): return 78;
- case MKID('PANP'): return 76;
- case MKID('WHIS'): return 79;
- case MKID('ORGA'): return 17; // 17-21
- case MKID('BONG'): return 116;
- case MKID('BASS'): return 33; // 33-40
+ case MKID('MARI'): return 12;
+ case MKID('PLUC'): return 45;
+ case MKID('HARM'): return 22;
+ case MKID('PIPE'): return 19;
+ case MKID('TROM'): transpose = -12; return 57;
+ case MKID('STRI'): return 48;
+ case MKID('HORN'): return 60;
+ case MKID('VIBE'): return 11;
+ case MKID('SHAK'): return 77;
+ case MKID('PANP'): return 75;
+ case MKID('WHIS'): return 76;
+ case MKID('ORGA'): return 17;
+ case MKID('BONG'): return 115;
+ case MKID('BASS'): transpose = -24; return 35;
default:
error("Unknown Mac0 instrument %c%c%c%c found",
(byte)type,
@@ -1071,20 +1072,20 @@
---
Instruments (General Midi):
- "MARI" - Marimba (13)
- "PLUC" - Pizzicato Strings (46)
- "HARM" - Harmonica (23)
- "PIPE" - Church Organ? (20) or Flute? (74) or Bag Pipe (110)
- "TROM" - Trombone (58)
- "STRI" - String Ensemble (49 or 50)
- "HORN" - French Horn? (61) or English Horn? (70)
- "VIBE" - Vibraphone (12)
- "SHAK" - Shakuhachi? (78)
- "PANP" - Pan Flute (76)
- "WHIS" - Whistle (79) / Bottle (77)
- "ORGA" - Drawbar Organ (17; but could also be 18-21)
- "BONG" - Woodblock? (116)
- "BASS" - Bass (33-40)
+ "MARI" - Marimba (12)
+ "PLUC" - Pizzicato Strings (45)
+ "HARM" - Harmonica (22)
+ "PIPE" - Church Organ? (19) or Flute? (73) or Bag Pipe (109)
+ "TROM" - Trombone (57)
+ "STRI" - String Ensemble (48 or 49)
+ "HORN" - French Horn? (60) or English Horn? (69)
+ "VIBE" - Vibraphone (11)
+ "SHAK" - Shakuhachi? (77)
+ "PANP" - Pan Flute (75)
+ "WHIS" - Whistle (78) / Bottle (76)
+ "ORGA" - Drawbar Organ (16; but could also be 17-20)
+ "BONG" - Woodblock? (115)
+ "BASS" - Bass (32-39)
Now the task could be to convert this into MIDI, to be fed into iMuse.
@@ -1111,17 +1112,19 @@
byte track_instr[3];
byte *track_data[3];
int track_len[3];
+ int track_transpose[3];
bool looped = false;
+ src_ptr += 8;
// TODO: Decipher the unknown bytes in the header. For now, skip 'em
- src_ptr += 36;
+ src_ptr += 28;
// Parse the three channels
for (i = 0; i < 3; i++) {
assert(*((uint32*)src_ptr) == MKID('Chan'));
len = READ_BE_UINT32(src_ptr + 4);
track_len[i] = len - 24;
- track_instr[i] = Mac0ToGMInstrument(*(uint32*)(src_ptr + 8));
+ track_instr[i] = Mac0ToGMInstrument(*(uint32*)(src_ptr + 8), track_transpose[i]);
track_data[i] = src_ptr + 12;
src_ptr += len;
looped = (*((uint32*)(src_ptr - 8)) == MKID('Loop'));
@@ -1180,7 +1183,7 @@
// Note On
ptr = writeVLQ(ptr, nextTime[best]);
*ptr++ = 0x90 | best;
- *ptr++ = track_data[best][2];
+ *ptr++ = track_data[best][2] + track_transpose[best];
*ptr++ = track_data[best][3] * 127 / 100; // Scale velocity
for (i = 0; i < 3; ++i)
nextTime[i] -= bestTime;
@@ -1193,7 +1196,7 @@
// There was a Note On, so do a Note Off
ptr = writeVLQ(ptr, nextTime[best]);
*ptr++ = 0x80 | best;
- *ptr++ = track_data[best][2];
+ *ptr++ = track_data[best][2] + track_transpose[best];
*ptr++ = track_data[best][3] * 127 / 100; // Scale velocity
for (i = 0; i < 3; ++i)
nextTime[i] -= bestTime;
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/dists/msvc6 queen.dsp,1.2,1.3
- Next message: [Scummvm-cvs-logs] CVS: tools descumm.h,1.6,1.7 descumm-common.cpp,1.6,1.7 descumm.cpp,1.79,1.80 descumm6.cpp,1.119,1.120
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list