aboutsummaryrefslogtreecommitdiff
path: root/scumm/resource.cpp
diff options
context:
space:
mode:
authorJamieson Christian2003-10-11 15:18:49 +0000
committerJamieson Christian2003-10-11 15:18:49 +0000
commit487c2c51c308ec4e48632ce45c72faf2393399c8 (patch)
treed1737251160b1cbc34217a50b3d305f4e0ca610c /scumm/resource.cpp
parent0aefc625615254236d2cb82dbe50304c22d42e98 (diff)
downloadscummvm-rg350-487c2c51c308ec4e48632ce45c72faf2393399c8.tar.gz
scummvm-rg350-487c2c51c308ec4e48632ce45c72faf2393399c8.tar.bz2
scummvm-rg350-487c2c51c308ec4e48632ce45c72faf2393399c8.zip
Some Mac0 conversion tweaks
svn-id: r10737
Diffstat (limited to 'scumm/resource.cpp')
-rw-r--r--scumm/resource.cpp69
1 files changed, 36 insertions, 33 deletions
diff --git a/scumm/resource.cpp b/scumm/resource.cpp
index b7b37b7349..9cf1919537 100644
--- a/scumm/resource.cpp
+++ b/scumm/resource.cpp
@@ -1016,22 +1016,23 @@ static inline byte *writeVLQ(byte *ptr, int value) {
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 @@ void ScummEngine::convertMac0Resource(int type, int idx, byte *src_ptr, int size
---
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 @@ void ScummEngine::convertMac0Resource(int type, int idx, byte *src_ptr, int size
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 @@ void ScummEngine::convertMac0Resource(int type, int idx, byte *src_ptr, int size
// 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 @@ void ScummEngine::convertMac0Resource(int type, int idx, byte *src_ptr, int size
// 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;