[Scummvm-cvs-logs] CVS: residual/imuse imuse.cpp,1.11,1.12 imuse.h,1.11,1.12 imuse_music.cpp,1.7,1.8 imuse_track.cpp,1.9,1.10

Pawel Kolodziejski aquadran at users.sourceforge.net
Mon Jan 3 08:29:14 CET 2005


Update of /cvsroot/scummvm/residual/imuse
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22377/imuse

Modified Files:
	imuse.cpp imuse.h imuse_music.cpp imuse_track.cpp 
Log Message:
fixes to imuse

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/residual/imuse/imuse.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- imuse.cpp	2 Jan 2005 19:08:44 -0000	1.11
+++ imuse.cpp	3 Jan 2005 16:27:57 -0000	1.12
@@ -120,7 +120,28 @@
 				}
 			}
 
-			int pan = (track->pan != 64) ? 2 * track->pan - 127 : 0;
+			if (track->panFadeUsed) {
+				if (track->panFadeStep < 0) {
+					if (track->pan > track->panFadeDest) {
+						track->pan += track->panFadeStep;
+						if (track->pan < track->panFadeDest) {
+							track->pan = track->panFadeDest;
+							track->panFadeUsed = false;
+						}
+					}
+				} else if (track->panFadeStep > 0) {
+					if (track->pan < track->panFadeDest) {
+						track->pan += track->panFadeStep;
+						if (track->pan > track->panFadeDest) {
+							track->pan = track->panFadeDest;
+							track->panFadeUsed = false;
+						}
+					}
+				}
+			}
+
+			int pan = track->pan / 1000;
+			pan = (pan != 64) ? 2 * pan - 127 : 0;
 			int vol = track->vol / 1000;
 
 			if (track->volGroupId == 1)

Index: imuse.h
===================================================================
RCS file: /cvsroot/scummvm/residual/imuse/imuse.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- imuse.h	2 Jan 2005 22:51:50 -0000	1.11
+++ imuse.h	3 Jan 2005 16:27:57 -0000	1.12
@@ -50,7 +50,11 @@
 	struct Track {
 		int trackId;
 
-		int8 pan;
+		int32 pan;
+		int32 panFadeDest;
+		int32 panFadeStep;
+		int32 panFadeDelay;
+		bool panFadeUsed;
 		int32 vol;
 		int32 volFadeDest;
 		int32 volFadeStep;
@@ -132,7 +136,8 @@
 	void setVolume(const char *soundName, int volume);
 	int getVolume(const char *soundName);
 	void setPan(const char *soundName, int pan);
-	void setFade(const char *soundName, int destVolume, int delay60HzTicks);
+	void setFadePan(const char *soundName, int destPan, int duration);
+	void setFadeVolume(const char *soundName, int destVolume, int duration);
 	void setHookId(const char *soundName, int hookId);
 	int getCountPlayedTracks();
 	void stopSound(const char *soundName);
@@ -143,6 +148,7 @@
 	void refreshScripts();
 	void flushTracks();
 	bool isVoicePlaying();
+	char *getCurMusicSoundName();
 	bool getSoundStatus(const char *soundName) const;
 	int32 getPosIn60HzTicks(const char *soundName);
 };

Index: imuse_music.cpp
===================================================================
RCS file: /cvsroot/scummvm/residual/imuse/imuse_music.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- imuse_music.cpp	2 Jan 2005 23:01:54 -0000	1.7
+++ imuse_music.cpp	3 Jan 2005 16:27:57 -0000	1.8
@@ -80,12 +80,12 @@
 			atribPos = table->atribPos;
 		hookId = _attributes[atribPos];
 		if (table->hookId != 0) {
-			if ((hookId != 0) && (table->hookId <= 1)) {
+			if ((hookId == 0) && (table->hookId > 1)) {
+				_attributes[atribPos] = 2;
+			} else {
 				_attributes[atribPos] = hookId + 1;
 				if (table->hookId < hookId + 1)
 					_attributes[atribPos] = 1;
-			} else {
-				_attributes[atribPos] = 2;
 			}
 		}
 	}
@@ -98,15 +98,21 @@
 		if (table->filename[0] == 0) {
 			fadeOutMusic(60);
 		} else {
-			fadeOutMusic(table->fadeOut60TicksDelay);
-			if ((table->opcode == 3) && (!sequence) &&
+			char *soundName = getCurMusicSoundName();
+			int pan;
+			if (table->pan == 0)
+				pan = 64;
+			else
+				pan = table->pan;
+			if ((table->opcode == 3) && (!sequence) && (strcmp(soundName, table->filename) == 0) &&
 					(table->atribPos != 0) && (table->atribPos == _stateMusicTable[_curMusicState].atribPos)) {
-				if (hookId == 100)
-					hookId = 0;
-				else
-					hookId = 100;
+				setFadeVolume(soundName, table->volume, table->fadeOut60TicksDelay);
+				setFadePan(soundName, pan, table->fadeOut60TicksDelay);
+				setHookId(soundName, hookId);
+			} else {
+				fadeOutMusic(table->fadeOut60TicksDelay);
+				startMusic(table->filename, hookId, table->volume, pan);
 			}
-			startMusic(table->filename, hookId, table->volume, 64/*table->pan*/);
 		}
 	}
 }

Index: imuse_track.cpp
===================================================================
RCS file: /cvsroot/scummvm/residual/imuse/imuse_track.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- imuse_track.cpp	2 Jan 2005 19:08:44 -0000	1.9
+++ imuse_track.cpp	3 Jan 2005 16:27:57 -0000	1.10
@@ -74,7 +74,11 @@
 		flushTracks();
 	}
 
-	track->pan = pan;
+	track->pan = pan * 1000;
+	track->panFadeDest = 0;
+	track->panFadeStep = 0;
+	track->panFadeDelay = 0;
+	track->panFadeUsed = false;
 	track->vol = volume * 1000;
 	track->volFadeDest = 0;
 	track->volFadeStep = 0;
@@ -123,7 +127,8 @@
 	if (channels == 2)
 		track->mixerFlags |= SoundMixer::FLAG_STEREO | SoundMixer::FLAG_REVERSE_STEREO;
 
-	pan = (track->pan != 64) ? 2 * track->pan - 127 : 0;
+	pan = track->pan / 1000;
+	pan = (pan != 64) ? 2 * pan - 127 : 0;
 	volume = track->vol / 1000;
 
 	if (track->volGroupId == 1)
@@ -223,25 +228,50 @@
 	}
 }
 
-void Imuse::setFade(const char *soundName, int destVolume, int delay60HzTicks) {
+void Imuse::setFadeVolume(const char *soundName, int destVolume, int duration) {
 	StackLock lock(_mutex);
 
 	for (int l = 0; l < MAX_IMUSE_TRACKS; l++) {
 		Track *track = _track[l];
 		if (track->used && !track->toBeRemoved && (strcmp(track->soundName, soundName) == 0)) {
-			track->volFadeDelay = delay60HzTicks;
+			track->volFadeDelay = duration;
 			track->volFadeDest = destVolume * 1000;
-			track->volFadeStep = (track->volFadeDest - track->vol) * 60 * (1000 / _callbackFps) / (1000 * delay60HzTicks);
+			track->volFadeStep = (track->volFadeDest - track->vol) * 60 * (1000 / _callbackFps) / (1000 * duration);
 			track->volFadeUsed = true;
 		}
 	}
 }
 
-void Imuse::fadeOutMusic(int fadeDelay) {
+void Imuse::setFadePan(const char *soundName, int destPan, int duration) {
+	StackLock lock(_mutex);
+
+	for (int l = 0; l < MAX_IMUSE_TRACKS; l++) {
+		Track *track = _track[l];
+		if (track->used && !track->toBeRemoved && (strcmp(track->soundName, soundName) == 0)) {
+			track->panFadeDelay = duration;
+			track->panFadeDest = destPan * 1000;
+			track->panFadeStep = (track->panFadeDest - track->pan) * 60 * (1000 / _callbackFps) / (1000 * duration);
+			track->panFadeUsed = true;
+		}
+	}
+}
+
+char *Imuse::getCurMusicSoundName() {
 	for (int l = 0; l < MAX_IMUSE_TRACKS; l++) {
 		Track *track = _track[l];
 		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
-			cloneToFadeOutTrack(track, fadeDelay);
+			return track->soundName;
+		}
+	}
+
+	return "";
+}
+
+void Imuse::fadeOutMusic(int duration) {
+	for (int l = 0; l < MAX_IMUSE_TRACKS; l++) {
+		Track *track = _track[l];
+		if (track->used && !track->toBeRemoved && (track->volGroupId == IMUSE_VOLGRP_MUSIC)) {
+			cloneToFadeOutTrack(track, duration);
 			track->toBeRemoved = true;
 		}
 	}
@@ -284,6 +314,10 @@
 		fadeTrack->volFadeDest = 0;
 		fadeTrack->volFadeStep = (fadeTrack->volFadeDest - fadeTrack->vol) * 60 * (1000 / _callbackFps) / (1000 * fadeDelay);
 		fadeTrack->volFadeUsed = true;
+		fadeTrack->panFadeDelay = 0;
+		fadeTrack->panFadeDest = 0;
+		fadeTrack->panFadeStep = 0;
+		fadeTrack->panFadeUsed = false;
 	}
 
 	// setup 1 second stream wrapped buffer





More information about the Scummvm-git-logs mailing list