[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.55,1.56 dimuse.h,1.35,1.36 dimuse_sndmgr.h,1.19,1.20

Pawel Kolodziejski aquadran at users.sourceforge.net
Mon Apr 5 11:38:10 CEST 2004


Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16526/scumm/imuse_digi

Modified Files:
	dimuse.cpp dimuse.h dimuse_sndmgr.h 
Log Message:
added voice group volume to scumm engine for imuse digital and implemeted volume groups control

Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -d -r1.55 -r1.56
--- dimuse.cpp	28 Mar 2004 20:31:18 -0000	1.55
+++ dimuse.cpp	5 Apr 2004 18:24:36 -0000	1.56
@@ -20,6 +20,7 @@
 
 #include "stdafx.h"
 #include "common/timer.h"
+#include "common/config-manager.h"
 
 #include "scumm/actor.h"
 #include "scumm/scumm.h"
@@ -46,6 +47,9 @@
 	_mutex = g_system->createMutex();
 	_pause = false;
 	_sound = new ImuseDigiSndMgr(_vm);
+	_volVoice = 0;
+	_volSfx = 0;
+	_volMusic = 0;
 	resetState();
 	_vm->_timer->installTimerProc(timer_handler, 1000000 / 25, this);
 }
@@ -60,6 +64,28 @@
 	g_system->deleteMutex(_mutex);
 }
 
+void IMuseDigital::resetState() {
+	_curMusicState = 0;
+	_curMusicSeq = 0;
+	_curMusicCue = 0;
+	memset(_attributes, 0, sizeof(_attributes));
+	_curSeqAtribPos = 0;
+}
+
+static const Common::String &kTransientDomain = Common::ConfigManager::kTransientDomain;
+
+void IMuseDigital::setGroupVoiceVolume(int volume) {
+	_volVoice = volume;
+}
+
+void IMuseDigital::setGroupMusicVolume(int volume) {
+	_volMusic = volume;
+}
+
+void IMuseDigital::setGroupSfxVolume(int volume) {
+	_volSfx = volume;
+}
+
 void IMuseDigital::callback() {
 	Common::StackLock lock(_mutex, "IMuseDigital::callback()");
 	int l = 0;
@@ -113,14 +139,22 @@
 			}
 
 			int pan = (_track[l].pan != 64) ? 2 * _track[l].pan - 127 : 0;
+			int vol = _track[l].vol / 1000;
+
+			if (_track[l].soundGroup == 1)
+				vol = (vol * _volVoice) / 128;
+			if (_track[l].soundGroup == 2)
+				vol = (vol * _volSfx) / 128;
+			if (_track[l].soundGroup == 3)
+				vol = (vol * _volMusic) / 128;
 
 			if (_vm->_mixer->isReady()) {
 				if (_track[l].stream2) {
 					if (!_track[l].started) {
 						_track[l].started = true;
-						_vm->_mixer->playInputStream(&_track[l].handle, _track[l].stream2, true, _track[l].vol / 1000, _track[l].pan, -1, false);
+						_vm->_mixer->playInputStream(&_track[l].handle, _track[l].stream2, false, _track[l].vol / 1000, _track[l].pan, -1, false);
 					} else {
-						_vm->_mixer->setChannelVolume(_track[l].handle, _track[l].vol / 1000);
+						_vm->_mixer->setChannelVolume(_track[l].handle, vol);
 						_vm->_mixer->setChannelBalance(_track[l].handle, pan);
 					}
 					continue;
@@ -174,7 +208,7 @@
 						result = mixer_size;
 
 					if (_vm->_mixer->isReady()) {
-						_vm->_mixer->setChannelVolume(_track[l].handle, _track[l].vol / 1000);
+						_vm->_mixer->setChannelVolume(_track[l].handle, vol);
 						_vm->_mixer->setChannelBalance(_track[l].handle, pan);
 						_track[l].stream->append(data, result);
 						_track[l].regionOffset += result;
@@ -345,7 +379,7 @@
 			} else {
 				_track[l].stream2 = NULL;
 				_track[l].stream = makeAppendableAudioStream(freq, mixerFlags, 100000);
-				_vm->_mixer->playInputStream(&_track[l].handle, _track[l].stream, true, _track[l].vol / 1000, _track[l].pan, -1);
+				_vm->_mixer->playInputStream(&_track[l].handle, _track[l].stream, false, _track[l].vol / 1000, _track[l].pan, -1);
 			}
 
 			_track[l].used = true;
@@ -373,7 +407,7 @@
 
 void IMuseDigital::setPriority(int soundId, int priority) {
 	Common::StackLock lock(_mutex, "IMuseDigital::setPriority()");
-	debug(5, "IMuseDigital::setPrioritySound(%d, %d)", soundId, priority);
+	debug(5, "IMuseDigital::setPriority(%d, %d)", soundId, priority);
 
 	assert ((priority >= 0) && (priority <= 127));
 
@@ -386,7 +420,7 @@
 
 void IMuseDigital::setVolume(int soundId, int volume) {
 	Common::StackLock lock(_mutex, "IMuseDigital::setVolume()");
-	debug(5, "IMuseDigital::setVolumeSound(%d, %d)", soundId, volume);
+	debug(5, "IMuseDigital::setVolume(%d, %d)", soundId, volume);
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		if ((_track[l].soundId == soundId) && _track[l].used) {
 			_track[l].vol = volume * 1000;
@@ -396,7 +430,7 @@
 
 void IMuseDigital::setPan(int soundId, int pan) {
 	Common::StackLock lock(_mutex, "IMuseDigital::setPan()");
-	debug(5, "IMuseDigital::setVolumeSound(%d, %d)", soundId, pan);
+	debug(5, "IMuseDigital::setPan(%d, %d)", soundId, pan);
 	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
 		if ((_track[l].soundId == soundId) && _track[l].used) {
 			_track[l].pan = pan;
@@ -404,6 +438,17 @@
 	}
 }
 
+void IMuseDigital::selectGroupVolume(int soundId, int groupId) {
+	Common::StackLock lock(_mutex, "IMuseDigital::setGroupVolume()");
+	debug(5, "IMuseDigital::setGroupVolume(%d, %d)", soundId, groupId);
+	assert((groupId >= 1) && (groupId <= 3));
+	for (int l = 0; l < MAX_DIGITAL_TRACKS; l++) {
+		if ((_track[l].soundId == soundId) && _track[l].used) {
+			_track[l].soundGroup = groupId;
+		}
+	}
+}
+
 void IMuseDigital::setFade(int soundId, int destVolume, int delay60HzTicks) {
 	Common::StackLock lock(_mutex, "IMuseDigital::setFade()");
 	debug(5, "IMuseDigital::setFade(%d, %d, %d)", soundId, destVolume, delay60HzTicks);
@@ -497,8 +542,8 @@
 		break;
 	case 12: // ImuseSetParam
 		switch (sub_cmd) {
-		case 0x400: // set group volume
-			debug(5, "set group volume (0x400), soundId(%d), group volume(%d)", soundId, d);
+		case 0x400: // select group volume
+			selectGroupVolume(soundId, d);
 			break;
 		case 0x500: // set priority
 			setPriority(soundId, d);
@@ -593,17 +638,17 @@
 			_attributes[b] = c;
 		}
 		break;
-	case 0x2000: // ImuseSetMasterSFXVolume
-		debug(5, "ImuseSetMasterSFXVolume (%d)", b);
-		// TODO
+	case 0x2000: // ImuseSetGroupSfxVolume
+		debug(5, "ImuseSetGroupSFXVolume (%d)", b);
+//		setGroupSfxVolume(b);
 		break;
-	case 0x2001: // ImuseSetMasterVoiceVolume
-		debug(5, "ImuseSetMasterVoiceVolume (%d)", b);
-		// TODO
+	case 0x2001: // ImuseSetGroupVoiceVolume
+		debug(5, "ImuseSetGroupVoiceVolume (%d)", b);
+//		setGroupVoiceVolume(b);
 		break;
-	case 0x2002: // ImuseSetMasterMusicVolume
-		debug(5, "ImuseSetMasterMusicVolume (%d)", b);
-		// TODO
+	case 0x2002: // ImuseSetGroupMusicVolume
+		debug(5, "ImuseSetGroupMusicVolume (%d)", b);
+//		setGroupMusicVolume(b);
 		break;
 	default:
 		warning("IMuseDigital::doCommand DEFAULT command %d", cmd);

Index: dimuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- dimuse.h	27 Mar 2004 20:26:25 -0000	1.35
+++ dimuse.h	5 Apr 2004 18:24:36 -0000	1.36
@@ -76,6 +76,11 @@
 	OSystem::MutexRef _mutex;
 	ScummEngine *_vm;
 	ImuseDigiSndMgr *_sound;
+
+	int _volVoice;
+	int _volSfx;
+	int _volMusic;
+
 	bool _pause;
 
 	int _attributes[188];
@@ -125,18 +130,21 @@
 		{ debug(5, "startSfx(%d)", soundId); startSound(soundId, NULL, IMUSE_RESOURCE, IMUSE_SFX, NULL, 0, 127, priority); }
 	void startSound(int soundId)
 		{ error("MusicEngine::startSound() Should be never called"); }
-	void resetState() {
-		_curMusicState = 0;
-		_curMusicSeq = 0;
-		_curMusicCue = 0;
-		memset(_attributes, 0, sizeof(_attributes));
-		_curSeqAtribPos = 0;
-	}
+
+	void resetState();
+
+	void setGroupVoiceVolume(int volume);
+	void setGroupSfxVolume(int volume);
+	void setGroupMusicVolume(int volume);
+	int getGroupVoiceVolume() { return _volVoice; }
+	int getGroupSfxVolume() { return _volSfx; }
+	int getGroupMusicVolume() { return _volMusic; }
 
 	void setPriority(int soundId, int priority);
 	void setVolume(int soundId, int volume);
 	void setPan(int soundId, int pan);
 	void setFade(int soundId, int destVolume, int delay60HzTicks);
+	void selectGroupVolume(int soundId, int groupId);
 	void setMasterVolume(int vol) {}
 	void stopSound(int soundId);
 	void stopAllSounds() { stopAllSounds(false); }

Index: dimuse_sndmgr.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- dimuse_sndmgr.h	22 Jan 2004 19:43:36 -0000	1.19
+++ dimuse_sndmgr.h	5 Apr 2004 18:24:36 -0000	1.20
@@ -41,6 +41,7 @@
 
 #define IMUSE_RESOURCE 1
 #define IMUSE_BUNDLE 2
+
 #define IMUSE_VOICE 1
 #define IMUSE_SFX 2
 #define IMUSE_MUSIC 3





More information about the Scummvm-git-logs mailing list