Hi,

There was a thread on LAD two years ago, almost exactly, pointing out
the denormal problems in TAP's EQ plugins:
http://linuxaudio.org/pipermail/linux-audio-dev/2005-August/013367.html

Unfortunately the problem was never fixed.  Many people are still having
issues with 'TAP Equalizer' and 'TAP Equalizer/BW', as there are recent
posts in ardour-users regarding spiralling CPU usage for DSP.

I've been doing my best to debug and fix the problem, but now that I
actually want to reproduce the problem, I can't!  I can't reproduce the
jump in CPU usage, although I suffer a loss of audio in Ardour when I
have many TAP EQ's running in a session.

So, I tried a few small changes to tap-plugins-0.7.0 which seemed to fix
the loss of audio.  If anyone can reliably reproduce the jump in CPU
usage (which usually triggered by periods of silence in the middle of a
recording), then please try rebuilding the TAP plugins from source, with
and without my attached patch, and see if it helps.

Please note, if your current tap_eq.so and tap_eqbw.so are already
installed in /usr/lib/ladspa/, you may need to edit the Makefile and
remove "local/" from the .so and .rdf install paths.

I'm hopeful that this might cure denormal problems that some people have
suffered from with these plugins for years.  If this works, I will test
many more plugins for the same problem and perhaps fix those, too.

Thanks!
-- 
Steven Chamberlain
[EMAIL PROTECTED]
diff -Nru tap-plugins-0.7.0.old/Makefile tap-plugins-0.7.0/Makefile
--- tap-plugins-0.7.0.old/Makefile	2007-08-05 02:33:41.000000000 +0100
+++ tap-plugins-0.7.0/Makefile	2007-08-05 01:51:36.000000000 +0100
@@ -156,5 +156,5 @@
 clean:
 	-rm -f `find . -name "*.so"`
 	-rm -f `find . -name "*.o"`
-	-rm -f `find .. -name "*~"`
+	-rm -f `find . -name "*~"`
 
diff -Nru tap-plugins-0.7.0.old/tap_eqbw.c tap-plugins-0.7.0/tap_eqbw.c
--- tap-plugins-0.7.0.old/tap_eqbw.c	2004-08-17 13:34:43.000000000 +0100
+++ tap-plugins-0.7.0/tap_eqbw.c	2007-08-05 02:08:24.000000000 +0100
@@ -397,7 +397,7 @@
 	}
 
 	for (pos = 0; pos < sample_count; pos++) {
-		samp = input[pos];
+		samp = FLUSH_TO_ZERO(input[pos]);
 		if (ch0g != 0.0f)
 			samp = biquad_run(&filters[0], samp);
 		if (ch1g != 0.0f)
@@ -414,7 +414,7 @@
 			samp = biquad_run(&filters[6], samp);
 		if (ch7g != 0.0f)
 			samp = biquad_run(&filters[7], samp);
-		output[pos] = samp;
+		output[pos] = FLUSH_TO_ZERO(samp);
 	}
 }
 
@@ -537,7 +537,7 @@
 	}
 
 	for (pos = 0; pos < sample_count; pos++) {
-		samp = input[pos];
+		samp = FLUSH_TO_ZERO(input[pos]);
 		if (ch0g != 0.0f)
 			samp = biquad_run(&filters[0], samp);
 		if (ch1g != 0.0f)
@@ -555,6 +555,7 @@
 		if (ch7g != 0.0f)
 			samp = biquad_run(&filters[7], samp);
 		output[pos] += ptr->run_adding_gain * samp;
+		output[pos] = FLUSH_TO_ZERO(output[pos]);
 	}
 }
 
diff -Nru tap-plugins-0.7.0.old/tap_eq.c tap-plugins-0.7.0/tap_eq.c
--- tap-plugins-0.7.0.old/tap_eq.c	2004-08-17 13:34:43.000000000 +0100
+++ tap-plugins-0.7.0/tap_eq.c	2007-08-05 02:07:08.000000000 +0100
@@ -327,7 +327,7 @@
 	}
 
 	for (pos = 0; pos < sample_count; pos++) {
-		samp = input[pos];
+		samp = FLUSH_TO_ZERO(input[pos]);
 		if (ch0g != 0.0f)
 			samp = biquad_run(&filters[0], samp);
 		if (ch1g != 0.0f)
@@ -344,7 +344,7 @@
 			samp = biquad_run(&filters[6], samp);
 		if (ch7g != 0.0f)
 			samp = biquad_run(&filters[7], samp);
-		output[pos] = samp;
+		output[pos] = FLUSH_TO_ZERO(samp);
 	}
 }
 
@@ -443,7 +443,7 @@
 	}
 
 	for (pos = 0; pos < sample_count; pos++) {
-		samp = input[pos];
+		samp = FLUSH_TO_ZERO(input[pos]);
 		if (ch0g != 0.0f)
 			samp = biquad_run(&filters[0], samp);
 		if (ch1g != 0.0f)
@@ -461,6 +461,7 @@
 		if (ch7g != 0.0f)
 			samp = biquad_run(&filters[7], samp);
 		output[pos] += ptr->run_adding_gain * samp;
+		output[pos] = FLUSH_TO_ZERO(output[pos]);
 	}
 }

_______________________________________________
Linux-audio-dev mailing list
[email protected]
http://lists.linuxaudio.org/mailman/listinfo.cgi/linux-audio-dev

Reply via email to