[Scummvm-cvs-logs] SF.net SVN: scummvm:[46972] scummvm/trunk/engines/sci

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Mon Jan 4 16:17:46 CET 2010


Revision: 46972
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46972&view=rev
Author:   m_kiewitz
Date:     2010-01-04 15:17:46 +0000 (Mon, 04 Jan 2010)

Log Message:
-----------
SCI/newmusic: fadeout in sci0 (not stopping music yet), revert of SoundResource changes

Modified Paths:
--------------
    scummvm/trunk/engines/sci/resource.cpp
    scummvm/trunk/engines/sci/sfx/midiparser.cpp
    scummvm/trunk/engines/sci/sfx/midiparser.h
    scummvm/trunk/engines/sci/sfx/music.cpp
    scummvm/trunk/engines/sci/sfx/soundcmd.cpp

Modified: scummvm/trunk/engines/sci/resource.cpp
===================================================================
--- scummvm/trunk/engines/sci/resource.cpp	2010-01-04 14:43:14 UTC (rev 46971)
+++ scummvm/trunk/engines/sci/resource.cpp	2010-01-04 15:17:46 UTC (rev 46972)
@@ -1894,7 +1894,7 @@
 		_tracks = new Track[_trackCount];
 		_tracks->digitalChannelNr = -1;
 		_tracks->type = TRACKTYPE_NONE;
-		_tracks->channelCount = 16;
+		_tracks->channelCount = 1;
 		// Digital sample data included? -> Add an additional channel
 		if (resource->data[0] == 2)
 			_tracks->channelCount++;
@@ -1908,17 +1908,10 @@
 			channel->data = resource->data + 0x21;
 			channel->size = resource->size - 0x21;
 		}
-		data = resource->data + 1;
-		for (channelNr = 0; channelNr < 16; channelNr++) {
-			channel = &_tracks->channels[channelNr];
-			channel->number = channelNr;
-			channel->poly = *data >> 4;
-			data++;
-		}
-		if (_tracks->channelCount == 17) {
+		if (_tracks->channelCount == 2) {
 			// Digital sample data included
-			_tracks->digitalChannelNr = 16;
-			sampleChannel = &_tracks->channels[16];
+			_tracks->digitalChannelNr = 1;
+			sampleChannel = &_tracks->channels[1];
 			// we need to find 0xFC (channel terminator) within the data
 			data = channel->data;
 			dataEnd = channel->data + channel->size;

Modified: scummvm/trunk/engines/sci/sfx/midiparser.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/midiparser.cpp	2010-01-04 14:43:14 UTC (rev 46971)
+++ scummvm/trunk/engines/sci/sfx/midiparser.cpp	2010-01-04 15:17:46 UTC (rev 46972)
@@ -26,6 +26,7 @@
 #include "sci/engine/kernel.h"
 #include "sci/engine/state.h"
 #include "sci/sfx/midiparser.h"
+#include "sci/sfx/softseq/mididriver.h"
 
 namespace Sci {
 
@@ -41,8 +42,9 @@
 
 //  MidiParser_SCI
 //
-MidiParser_SCI::MidiParser_SCI() :
+MidiParser_SCI::MidiParser_SCI(SciVersion soundVersion) :
 	MidiParser() {
+	_soundVersion = soundVersion;
 	_mixedData = NULL;
 	// mididata contains delta in 1/60th second
 	// values of ppqn and tempo are found experimentally and may be wrong
@@ -476,10 +478,26 @@
 	if (_volume != bVolume) {
 		_volume = bVolume;
 
-		// sending volume change to all active channels
-		for (int i = 0; i < _track->channelCount; i++)
-			if (_track->channels[i].number <= 0xF)
-				_driver->send(0xB0 + _track->channels[i].number, 7, _volume);
+		switch (_soundVersion) {
+		case SCI_VERSION_0_EARLY:
+		case SCI_VERSION_0_LATE: {
+			MidiPlayer *SCIDriver = (MidiPlayer *)_driver;
+			int16 globalVolume = _volume * 15 / 127;
+			SCIDriver->setVolume(globalVolume);
+			break;
+		}
+
+		case SCI_VERSION_1_EARLY:
+		case SCI_VERSION_1_LATE:
+			// sending volume change to all active channels
+			for (int i = 0; i < _track->channelCount; i++)
+				if (_track->channels[i].number <= 0xF)
+					_driver->send(0xB0 + _track->channels[i].number, 7, _volume);
+			break;
+
+		default:
+			error("MidiParser_SCI::setVolume: Unsupported soundVersion");
+		}
 	}
 }
 

Modified: scummvm/trunk/engines/sci/sfx/midiparser.h
===================================================================
--- scummvm/trunk/engines/sci/sfx/midiparser.h	2010-01-04 14:43:14 UTC (rev 46971)
+++ scummvm/trunk/engines/sci/sfx/midiparser.h	2010-01-04 15:17:46 UTC (rev 46972)
@@ -47,7 +47,7 @@
 
 class MidiParser_SCI : public MidiParser {
 public:
-	MidiParser_SCI();
+	MidiParser_SCI(SciVersion soundVersion);
 	~MidiParser_SCI();
 	bool loadMusic(SoundResource::Track *track, MusicEntry *psnd, int channelFilterMask, SciVersion soundVersion);
 	bool loadMusic(byte *, uint32) {

Modified: scummvm/trunk/engines/sci/sfx/music.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/music.cpp	2010-01-04 14:43:14 UTC (rev 46971)
+++ scummvm/trunk/engines/sci/sfx/music.cpp	2010-01-04 15:17:46 UTC (rev 46972)
@@ -333,7 +333,7 @@
 			_mutex.lock();
 			pSnd->soundType = Audio::Mixer::kMusicSoundType;
 			if (pSnd->pMidiParser == NULL) {
-				pSnd->pMidiParser = new MidiParser_SCI();
+				pSnd->pMidiParser = new MidiParser_SCI(_soundVersion);
 				pSnd->pMidiParser->setMidiDriver(_pMidiDrv);
 				pSnd->pMidiParser->setTimerRate(_dwTempo);
 				pSnd->pMidiParser->property(MidiParser::mpCenterPitchWheelOnUnload, 1);

Modified: scummvm/trunk/engines/sci/sfx/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2010-01-04 14:43:14 UTC (rev 46971)
+++ scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2010-01-04 15:17:46 UTC (rev 46972)
@@ -666,9 +666,10 @@
 
 	switch (_argc) {
 	case 2: // SCI0
+		// SCI0 fades out all the time and when fadeout is done it will also stop the music from playing
 		musicSlot->fadeTo = 0;
 		musicSlot->fadeStep = -5;
-		musicSlot->fadeTickerStep = 0x10 * 16667 / _music->soundGetTempo();
+		musicSlot->fadeTickerStep = 10 * 16667 / _music->soundGetTempo();
 		musicSlot->fadeTicker = 0;
 		break;
 
@@ -845,7 +846,11 @@
 
 	if (musicSlot->fadeCompleted) {
 		musicSlot->fadeCompleted = false;
-		PUT_SEL32V(_segMan, obj, signal, SIGNAL_OFFSET);
+		if (_soundVersion <= SCI_VERSION_0_LATE) {
+			cmdStopSound(obj, 0);
+		} else {
+			PUT_SEL32V(_segMan, obj, signal, SIGNAL_OFFSET);
+		}
 	}
 
 	// Sync loop selector for SCI0


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list