[Scummvm-cvs-logs] SF.net SVN: scummvm:[45954] scummvm/trunk/engines/sci/sfx/soundcmd.cpp

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Tue Nov 17 16:01:17 CET 2009


Revision: 45954
          http://scummvm.svn.sourceforge.net/scummvm/?rev=45954&view=rev
Author:   thebluegr
Date:     2009-11-17 15:01:16 +0000 (Tue, 17 Nov 2009)

Log Message:
-----------
Some more work on the sound command parser

Modified Paths:
--------------
    scummvm/trunk/engines/sci/sfx/soundcmd.cpp

Modified: scummvm/trunk/engines/sci/sfx/soundcmd.cpp
===================================================================
--- scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2009-11-17 14:27:11 UTC (rev 45953)
+++ scummvm/trunk/engines/sci/sfx/soundcmd.cpp	2009-11-17 15:01:16 UTC (rev 45954)
@@ -147,7 +147,7 @@
 		SOUNDCOMMAND(cmdSuspendHandle);
 		SOUNDCOMMAND(cmdResumeHandle);
 		SOUNDCOMMAND(cmdVolume);
-		SOUNDCOMMAND(cmdHandlePriority);
+		SOUNDCOMMAND(cmdUpdateVolumePriority);
 		SOUNDCOMMAND(cmdFadeHandle);
 		SOUNDCOMMAND(cmdGetPolyphony);
 		SOUNDCOMMAND(cmdGetPlayNext);
@@ -219,6 +219,7 @@
 	}
 
 	if (command < _soundCommands.size()) {
+		printf("%s\n", _soundCommands[command]->desc);
 		debugC(2, kDebugLevelSound, "%s", _soundCommands[command]->desc);
 		(this->*(_soundCommands[command]->sndCmd))(obj, handle, value);
 	} else {
@@ -413,25 +414,23 @@
 }
 
 void SoundCommandParser::cmdHandlePriority(reg_t obj, SongHandle handle, int value) {
-	if (obj.segment) {
-		_state->sfx_song_set_loops(handle, GET_SEL32V(_segMan, obj, loop));
+	if (obj.segment)
 		script_set_priority(_resMan, _segMan, _state, obj, GET_SEL32V(_segMan, obj, pri));
-	}
 }
 
 void SoundCommandParser::cmdFadeHandle(reg_t obj, SongHandle handle, int value) {
 	if (!obj.segment)
 		return;
 
-	/*s->sound_server->command(s, SOUND_COMMAND_FADE_HANDLE, obj, 120);*/ /* Fade out in 2 secs */
-	/* FIXME: The next couple of lines actually STOP the handle, rather
-	** than fading it! */
-	_state->sfx_song_set_status(handle, SOUND_STATUS_STOPPED);
-	if (!_hasNodePtr)
-		PUT_SEL32V(_segMan, obj, state, SOUND_STATUS_STOPPED);
-	PUT_SEL32V(_segMan, obj, signal, SIGNAL_OFFSET);
-
-	if (_doSoundVersion == SCI_VERSION_1_LATE) {
+	if (_doSoundVersion != SCI_VERSION_1_LATE) {
+		/*s->sound_server->command(s, SOUND_COMMAND_FADE_HANDLE, obj, 120);*/ /* Fade out in 2 secs */
+		/* FIXME: The next couple of lines actually STOP the handle, rather
+		** than fading it! */
+		_state->sfx_song_set_status(handle, SOUND_STATUS_STOPPED);
+		if (!_hasNodePtr)
+			PUT_SEL32V(_segMan, obj, state, SOUND_STATUS_STOPPED);
+		PUT_SEL32V(_segMan, obj, signal, SIGNAL_OFFSET);
+	} else {
 		fade_params_t fade;
 		fade.final_volume = _argv[2].toUint16();
 		fade.ticks_per_step = _argv[3].toUint16();
@@ -490,14 +489,12 @@
 	int sec = 0;
 	int frame = 0;
 	int result = SI_LOOP; // small hack
-	int cue = 0;
 
 	while (result == SI_LOOP)
-		result = _state->sfx_poll_specific(handle, &cue);
+		result = _state->sfx_poll_specific(handle, &signal);
 
 	switch (result) {
 	case SI_ABSOLUTE_CUE:
-		signal = cue;
 		debugC(2, kDebugLevelSound, "---    [CUE] %04x:%04x Absolute Cue: %d\n",
 		          PRINT_REG(obj), signal);
 
@@ -505,15 +502,17 @@
 		break;
 
 	case SI_RELATIVE_CUE:
-		signal = cue;
 		debugC(2, kDebugLevelSound, "---    [CUE] %04x:%04x Relative Cue: %d\n",
-		          PRINT_REG(obj), cue);
+		          PRINT_REG(obj), signal);
 
 		/* FIXME to match commented-out semantics
 		 * below, with proper storage of dataInc and
 		 * signal in the iterator code. */
 		PUT_SEL32V(_segMan, obj, dataInc, signal);
-		PUT_SEL32V(_segMan, obj, signal, signal);
+		if (_doSoundVersion == SCI_VERSION_1_EARLY)
+			PUT_SEL32V(_segMan, obj, signal, signal);
+		else
+			PUT_SEL32V(_segMan, obj, signal, signal + 127);
 		break;
 
 	case SI_FINISHED:
@@ -547,9 +546,11 @@
 	//	break;
 	//}
 
-	PUT_SEL32V(_segMan, obj, min, min);
-	PUT_SEL32V(_segMan, obj, sec, sec);
-	PUT_SEL32V(_segMan, obj, frame, frame);
+	if (_doSoundVersion == SCI_VERSION_1_EARLY) {
+		PUT_SEL32V(_segMan, obj, min, min);
+		PUT_SEL32V(_segMan, obj, sec, sec);
+		PUT_SEL32V(_segMan, obj, frame, frame);
+	}
 }
 
 void SoundCommandParser::cmdSendMidi(reg_t obj, SongHandle handle, int value) {
@@ -583,11 +584,7 @@
 
 void SoundCommandParser::cmdSetHandleLoop(reg_t obj, SongHandle handle, int value) {
 	if (!GET_SEL32(_segMan, obj, nodePtr).isNull()) {
-		uint16 looping = value;
-
-		if (looping < 65535)
-			looping = 1;
-
+		uint16 looping = (value == -1) ? 1 : 0xFFFF;
 		_state->sfx_song_set_loops(handle, looping);
 		PUT_SEL32V(_segMan, obj, loop, looping);
 	}
@@ -598,7 +595,10 @@
 }
 
 void SoundCommandParser::cmdUpdateVolumePriority(reg_t obj, SongHandle handle, int value) {
-	// TODO
+	if (_doSoundVersion == SCI_VERSION_0_EARLY && obj.segment) {
+ 		_state->sfx_song_set_loops(handle, GET_SEL32V(_segMan, obj, loop));
+ 		script_set_priority(_resMan, _segMan, _state, obj, GET_SEL32V(_segMan, obj, pri));
+ 	}
 }
 
 } // End of namespace Sci


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