diff -rud gmod-3.1.orig/Sequencer.C gmod-3.1-hzfix/Sequencer.C
--- gmod-3.1.orig/Sequencer.C	2006-10-12 19:43:29.000000000 -0300
+++ gmod-3.1-hzfix/Sequencer.C	2006-10-12 19:42:10.000000000 -0300
@@ -329,7 +329,7 @@
 Sequencer::open()
 {
   SEQ_DECLAREBUF();
-  int i, n;
+  int i, n, hz;
   struct synth_info info;
   struct midi_info midi;
 
@@ -417,6 +417,8 @@
   force();
   ioctl(seqfd_, SNDCTL_SEQ_SYNC, 0);
   ioctl(seqfd_, SNDCTL_SEQ_RESET, 0);
+  hz = 0; ioctl(seqfd_, SNDCTL_SEQ_CTRLRATE, &hz);
+  seqRate = hz;
 
   return (seqfd_);
 }
diff -rud gmod-3.1.orig/defines.h gmod-3.1-hzfix/defines.h
--- gmod-3.1.orig/defines.h	1997-09-01 14:44:58.000000000 -0300
+++ gmod-3.1-hzfix/defines.h	2006-10-12 19:38:12.000000000 -0300
@@ -36,7 +36,7 @@
 #define INTEL_LONG(x)	(INTEL_SHORT(x) | (INTEL_SHORT(x+2) <<16))
 
 #define TICKS_PER_DIVISION(x)  (ticksPerDivision = x)
-#define TEMPO(x, y)               ((x) ? (tickDuration = ((double)y * 100.0 / (24.0 * x))) : 0 )
+#define TEMPO(x, y)               ((x) ? (tickDuration = ((double)y * seqRate / (24.0 * x))) : 0 )
 
 #define MAX_TRACK	32
 #define MAX_PATTERN	256
diff -rud gmod-3.1.orig/globals.h gmod-3.1-hzfix/globals.h
--- gmod-3.1.orig/globals.h	1997-09-01 14:44:58.000000000 -0300
+++ gmod-3.1-hzfix/globals.h	2006-10-12 19:37:08.000000000 -0300
@@ -17,7 +17,7 @@
 extern short voiceTable[MAX_POSITION][MAX_TRACK];
 extern double tickDuration;
 extern int  mixerfd;
-extern double thisTime, nextTime;
+extern double thisTime, nextTime, seqRate;
 extern int ticksPerDivision;
 extern double clockRate;	/* HZ */
 
Binary files gmod-3.1.orig/gmod and gmod-3.1-hzfix/gmod differ
diff -rud gmod-3.1.orig/gmod.C gmod-3.1-hzfix/gmod.C
--- gmod-3.1.orig/gmod.C	2006-10-12 19:43:29.000000000 -0300
+++ gmod-3.1-hzfix/gmod.C	2006-10-12 19:33:46.000000000 -0300
@@ -73,7 +73,7 @@
 
 int mixerfd;
 Sample *samples[MAX_SAMPLES];
-double thisTime, nextTime;
+double thisTime, nextTime, seqRate;
 int ticksPerDivision;
 
 #ifndef USE_X
