diff options
| -rw-r--r-- | engines/mortevielle/sound.cpp | 12 | ||||
| -rw-r--r-- | engines/mortevielle/sound.h | 2 | ||||
| -rw-r--r-- | engines/mortevielle/utils.cpp | 4 | 
3 files changed, 14 insertions, 4 deletions
| diff --git a/engines/mortevielle/sound.cpp b/engines/mortevielle/sound.cpp index 76495c6658..3cb5284494 100644 --- a/engines/mortevielle/sound.cpp +++ b/engines/mortevielle/sound.cpp @@ -148,11 +148,13 @@ SoundManager::~SoundManager() {  /**   * Decode music data   */ -void SoundManager::decodeMusic(const byte *PSrc, byte *PDest, int size) { +int SoundManager::decodeMusic(const byte *PSrc, byte *PDest, int size) {  	static const int tab[16] = { -96, -72, -48, -32, -20, -12, -8, -4, 0, 4, 8, 12, 20, 32, 48, 72 };  	uint seed = 128;  	int v; +	int decompSize = 0; +	int skipSize = 0;  	for (int idx1 = 0; idx1 < size; ++idx1) {  		byte srcByte = *PSrc++; @@ -163,7 +165,15 @@ void SoundManager::decodeMusic(const byte *PSrc, byte *PDest, int size) {  		v = tab[srcByte & 0xf];  		seed += v;  		*PDest++ = seed & 0xff; + +		if (srcByte == 0) +			skipSize += 2; +		else { +			decompSize += skipSize + 2; +			skipSize = 0; +		}  	} +	return decompSize;  }  void SoundManager::litph(tablint &t, int typ, int tempo) { diff --git a/engines/mortevielle/sound.h b/engines/mortevielle/sound.h index c1df98e937..313859dacf 100644 --- a/engines/mortevielle/sound.h +++ b/engines/mortevielle/sound.h @@ -105,7 +105,7 @@ public:  	void setParent(MortevielleEngine *vm);  	void playNote(int frequency, int32 length); -	void decodeMusic(const byte *PSrc, byte *PDest, int size); +	int decodeMusic(const byte *PSrc, byte *PDest, int size);  	void playSong(const byte *buf, int size);  	void litph(tablint &t, int typ, int tempo); diff --git a/engines/mortevielle/utils.cpp b/engines/mortevielle/utils.cpp index b729d5951e..d5dc678a72 100644 --- a/engines/mortevielle/utils.cpp +++ b/engines/mortevielle/utils.cpp @@ -2207,7 +2207,7 @@ void MortevielleEngine::music() {  	f.read(compMusicBuf, size);  	f.close(); -	_soundManager.decodeMusic(compMusicBuf, musicBuf, size); +	int musicSize = _soundManager.decodeMusic(compMusicBuf, musicBuf, size);  	free(compMusicBuf);  	_addFix = (float)((kTempoMusic - 8)) / 256; @@ -2217,7 +2217,7 @@ void MortevielleEngine::music() {  	int k = 0;  	do {  		fin = keyPressed(); -		_soundManager.playSong(musicBuf, size * 2); +		_soundManager.playSong(musicBuf, musicSize);  		++k;  		fin = fin | keyPressed() | (k >= 5);  	} while (!fin); | 
