Update of /cvsroot/audacity/audacity-src/src/effects
In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv21251/src/effects

Modified Files:
        ToneGen.cpp 
Log Message:
Avoid round-off errors which can distort square waves.

Index: ToneGen.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/effects/ToneGen.cpp,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- ToneGen.cpp 25 Aug 2006 05:12:23 -0000      1.33
+++ ToneGen.cpp 11 Jan 2007 23:27:05 -0000      1.34
@@ -121,6 +121,7 @@
    double BlendedAmplitude;
    double BlendedFrequency;
    double BlendedLogFrequency;
+   double positionInCycles;
 
    // Do our divisions here, outside the loop, for greater efficiency.
 
@@ -141,8 +142,8 @@
       t = iSample * BlendMultiplier;
       BlendedAmplitude = amplitude[0] + (amplitude[1]-amplitude[0]) * t;
 
-      if( i == (len/2) )
-         i=i;
+      if( i == (len/2) )   // what's this for? MJS
+         i=i;              // what's this for? MJS
 
       // Log interpolation is not currently used.
       // A linear shift in frequency is what most people expect, and
@@ -158,17 +159,18 @@
       }
 
       // Add cycles/second * second/samples * 1-sample
-      mPositionInCycles += BlendedFrequency * PositionMultiplier;
+      mPositionInCycles += BlendedFrequency;
+      positionInCycles = mPositionInCycles * PositionMultiplier;
 
       switch (waveform) {
          case 0:    //sine
-            f = (float) sin(2 * M_PI * mPositionInCycles);
+            f = (float) sin(2 * M_PI * positionInCycles);
             break;
          case 1:    //square
-            f = (modf(mPositionInCycles, &throwaway) < 0.5) ? 1.0f :-1.0f;
+            f = (modf(positionInCycles, &throwaway) < 0.5) ? 1.0f :-1.0f;
             break;
          case 2:    //sawtooth
-            f = (2 * modf(mPositionInCycles+0.5f, &throwaway)) -1.0f;
+            f = (2 * modf(positionInCycles+0.5f, &throwaway)) -1.0f;
             break;
          default:
             break;


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to