aboutsummaryrefslogtreecommitdiff
path: root/engines/sky/music/mt32music.cpp
diff options
context:
space:
mode:
authorRobert Göffringmann2007-03-18 14:08:34 +0000
committerRobert Göffringmann2007-03-18 14:08:34 +0000
commit3f6745a2f43fc2e017a9268c06d11e6278b5bb2f (patch)
tree05e49a0dce8a552b4137e28adb75340668b00afb /engines/sky/music/mt32music.cpp
parent612e7a3eeb1b1e4b6c0500b8801544e19f2d7d55 (diff)
downloadscummvm-rg350-3f6745a2f43fc2e017a9268c06d11e6278b5bb2f.tar.gz
scummvm-rg350-3f6745a2f43fc2e017a9268c06d11e6278b5bb2f.tar.bz2
scummvm-rg350-3f6745a2f43fc2e017a9268c06d11e6278b5bb2f.zip
Applied eriktorbjorn's patch for bug #1657466:
"BASS: wrong music slider behavior" and did some cleanup. svn-id: r26208
Diffstat (limited to 'engines/sky/music/mt32music.cpp')
-rw-r--r--engines/sky/music/mt32music.cpp34
1 files changed, 21 insertions, 13 deletions
diff --git a/engines/sky/music/mt32music.cpp b/engines/sky/music/mt32music.cpp
index a6bcbf4d05..322e5e77fe 100644
--- a/engines/sky/music/mt32music.cpp
+++ b/engines/sky/music/mt32music.cpp
@@ -1,5 +1,5 @@
/* ScummVM - Scumm Interpreter
- * Copyright (C) 2003-2006 The ScummVM project
+ * Copyright (C) 2003-2007 The ScummVM project
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -24,6 +24,7 @@
#include "sky/music/gmchannel.h"
#include "common/util.h"
#include "common/system.h"
+#include "common/endian.h"
#include "sound/mididrv.h"
namespace Sky {
@@ -62,10 +63,10 @@ void MT32Music::timerCall(void) {
}
}
-void MT32Music::setVolume(uint8 volume) {
+void MT32Music::setVolume(uint16 volume) {
uint8 sysEx[10] = "\x41\x10\x16\x12\x10\x00\x16\x00\x00";
_musicVolume = volume;
- sysEx[7] = (volume > 100) ? 100 : volume;
+ sysEx[7] = (volume > 100) ? 100 : (uint8)volume;
sysEx[8] = 0x00;
for (uint8 cnt = 4; cnt < 8; cnt++)
sysEx[8] -= sysEx[cnt];
@@ -75,8 +76,8 @@ void MT32Music::setVolume(uint8 volume) {
void MT32Music::setupPointers(void) {
- _musicDataLoc = (_musicData[0x7DD] << 8) | _musicData[0x7DC];
- _sysExSequence = ((_musicData[0x7E1] << 8) | _musicData[0x7E0]) + _musicData;
+ _musicDataLoc = READ_LE_UINT16(_musicData + 0x7DC);
+ _sysExSequence = READ_LE_UINT16(_musicData + 0x7E0) + _musicData;
}
void MT32Music::setupChannels(uint8 *channelData) {
@@ -84,7 +85,7 @@ void MT32Music::setupChannels(uint8 *channelData) {
_numberOfChannels = channelData[0];
channelData++;
for (uint8 cnt = 0; cnt < _numberOfChannels; cnt++) {
- uint16 chDataStart = ((channelData[(cnt << 1) | 1] << 8) | channelData[cnt << 1]) + _musicDataLoc;
+ uint16 chDataStart = READ_LE_UINT16((uint16 *)channelData + cnt) + _musicDataLoc;
_channels[cnt] = new GmChannel(_musicData, chDataStart, _midiDrv, NULL, NULL);
_channels[cnt]->updateVolume(_musicVolume);
}
@@ -98,12 +99,16 @@ bool MT32Music::processPatchSysEx(uint8 *sysExData) {
return false;
// decompress data from stream
- sysExBuf[0] = 0x41; sysExBuf[1] = 0x10; sysExBuf[2] = 0x16; sysExBuf[3] = 0x12; sysExBuf[4] = 0x5;
- sysExBuf[5] = sysExData[0] >> 4; // patch offset part 1
- sysExBuf[6] = (sysExData[0] & 0xF) << 3; // patch offset part 2
- sysExBuf[7] = sysExData[1] >> 6; // timbre group
- sysExBuf[8] = sysExData[1] & 0x3F; // timbre num
- sysExBuf[9] = sysExData[2] & 0x3F; // key shift
+ sysExBuf[ 0] = 0x41;
+ sysExBuf[ 1] = 0x10;
+ sysExBuf[ 2] = 0x16;
+ sysExBuf[ 3] = 0x12;
+ sysExBuf[ 4] = 0x5;
+ sysExBuf[ 5] = sysExData[0] >> 4; // patch offset part 1
+ sysExBuf[ 6] = (sysExData[0] & 0xF) << 3; // patch offset part 2
+ sysExBuf[ 7] = sysExData[1] >> 6; // timbre group
+ sysExBuf[ 8] = sysExData[1] & 0x3F; // timbre num
+ sysExBuf[ 9] = sysExData[2] & 0x3F; // key shift
sysExBuf[10] = sysExData[3] & 0x7F; // fine tune
sysExBuf[11] = sysExData[4] & 0x7F; // bender range
sysExBuf[12] = sysExData[2] >> 6; // assign mode
@@ -125,7 +130,10 @@ void MT32Music::startDriver(void) {
sysExData++;
uint8 sendBuf[256];
uint8 len;
- sendBuf[0] = 0x41; sendBuf[1] = 0x10; sendBuf[2] = 0x16; sendBuf[3] = 0x12;
+ sendBuf[0] = 0x41;
+ sendBuf[1] = 0x10;
+ sendBuf[2] = 0x16;
+ sendBuf[3] = 0x12;
for (cnt = 0; cnt < timbreNum; cnt++) {
len = 7;
crc = 0;