[Scummvm-cvs-logs] SF.net SVN: scummvm:[33835] scummvm/branches/gsoc2008-tfmx/sound/mods

marwanhilmi at users.sourceforge.net marwanhilmi at users.sourceforge.net
Wed Aug 13 20:14:53 CEST 2008


Revision: 33835
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33835&view=rev
Author:   marwanhilmi
Date:     2008-08-13 18:14:51 +0000 (Wed, 13 Aug 2008)

Log Message:
-----------
Added statement to distinguish between note types.

Modified Paths:
--------------
    scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp
    scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.h

Modified: scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp
===================================================================
--- scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp	2008-08-13 17:49:31 UTC (rev 33834)
+++ scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp	2008-08-13 18:14:51 UTC (rev 33835)
@@ -379,11 +379,21 @@
 		if (!_tracks[trackNumber].macroOn) {
 			_tracks[trackNumber].macroNumber = byte2;
 			loadMacro( trackNumber, (_tracks[trackNumber].macroNumber) );
+			if (byte1 < 0x80) {
+				_tracks[trackNumber].activeMacro.noteType = 1; 		//byte4 = finetune
+				_tracks[trackNumber].activeMacro.noteFineTune = byte4;
+			}
+			else if (byte1 < 0xC0) {
+				_tracks[trackNumber].activeMacro.noteType = 2;      //byte4 = wait
+				_tracks[trackNumber].activeMacro.noteWait = byte4;
+			}
+			else {
+				_tracks[trackNumber].activeMacro.noteType = 3;      //byte4 = portamento rate
+			}
 			_tracks[trackNumber].macroOn = true; //set to false again when macro terminates
 			_tracks[trackNumber].activeMacro.noteNumber = byte1;
 			_tracks[trackNumber].activeMacro.noteVelocity = (byte3 & 0xF0) >> 4;
 			_tracks[trackNumber].activeMacro.noteChannel = (byte3 & 0x0F);
-		//	_tracks[trackNumber].activePattern.patternWait += byte4; 	
 			_tracks[trackNumber].activeMacro.notePeriod = periods[(_tracks[trackNumber].activeMacro.noteNumber + _tracks[trackNumber].activePattern.patternTranspose) & 0x3F];
 		}
 
@@ -392,7 +402,6 @@
 				doMacro(trackNumber);
 			}
 		}
-
 		if (_tracks[trackNumber].activeMacro.macroWait != 0) {
 		_tracks[trackNumber].activeMacro.macroWait--;
 		}
@@ -403,6 +412,9 @@
 	if (!_tracks[trackNumber].macroOn) {
 		_tracks[trackNumber].activePattern.data++;
 		_tracks[trackNumber].activePattern.patternCount++;
+		if (_tracks[trackNumber].activeMacro.noteType == 2) {
+			_tracks[trackNumber].activePattern.patternWait += _tracks[trackNumber].activeMacro.noteWait;
+		}
 	}
 	//IF THE END IS REACHED, TURN PATTERN OFF
 	if (_tracks[trackNumber].activePattern.patternCount == _tracks[trackNumber].activePattern.patternLength) {
@@ -419,7 +431,9 @@
 
 	_tracks[trackNumber].activeMacro.macroCount = 0;
 	_tracks[trackNumber].activeMacro.macroLength = numCommands;
-
+	_tracks[trackNumber].activeMacro.noteType = 0;
+	_tracks[trackNumber].activeMacro.noteFineTune = 0;
+	
 	Common::MemoryReadStream dataStream(_data, _dataSize);
 	Common::SeekableSubReadStream macroSubStream(&dataStream, startPosition, endPosition);
 
@@ -494,7 +508,7 @@
 	case 0x8: //add note
 		tunedPeriod = (periods[(byte2 + currentPeriod) & (0x3F)]);
 		_tracks[trackNumber].activeMacro.fineTune = sbyte3 / 0x100;
-		//_tracks[trackNumber].activeMacro.fineTune += (_tracks[trackNumber].activeMacro.noteFineTune / 0x100);
+		_tracks[trackNumber].activeMacro.fineTune += (_tracks[trackNumber].activeMacro.noteFineTune / 0x100);
 		_tracks[trackNumber].activeMacro.fineTune += 1;
 		_tracks[trackNumber].activeMacro.notePeriod = (int)(tunedPeriod * _tracks[trackNumber].activeMacro.fineTune);
 		_tracks[trackNumber].activeMacro.macroWait = 1;
@@ -502,7 +516,7 @@
 	case 0x9: //set note
 		tunedPeriod = (periods[(byte2) & (0x3F)]);
 		_tracks[trackNumber].activeMacro.fineTune = sbyte3 / 0x100;
-		//_tracks[trackNumber].activeMacro.fineTune += (_tracks[trackNumber].activeMacro.noteFineTune / 0x100);
+		_tracks[trackNumber].activeMacro.fineTune += (_tracks[trackNumber].activeMacro.noteFineTune / 0x100);
 		_tracks[trackNumber].activeMacro.fineTune += 1;
 		_tracks[trackNumber].activeMacro.notePeriod = (int)(tunedPeriod * _tracks[trackNumber].activeMacro.fineTune);
 		_tracks[trackNumber].activeMacro.macroWait = 1;

Modified: scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.h
===================================================================
--- scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.h	2008-08-13 17:49:31 UTC (rev 33834)
+++ scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.h	2008-08-13 18:14:51 UTC (rev 33835)
@@ -121,6 +121,7 @@
 			uint8 noteChannel;
 			uint8 noteType;
 			uint8 noteWait;  //external wait
+			int8 noteFineTune;
 			float fineTune;
 		};
 


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