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

Modified Files:
        StereoToMono.cpp StereoToMono.h 
Log Message:
Fix Stereo To Mono processing when other non-stereo tracks exist or where the 
selected stereo track is not the first track in the list.

Index: StereoToMono.h
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/effects/StereoToMono.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- StereoToMono.h      7 Aug 2005 20:43:52 -0000       1.2
+++ StereoToMono.h      12 Oct 2006 04:13:57 -0000      1.3
@@ -33,15 +33,8 @@
     virtual bool Process();
 
 private:
-   sampleCount mnBlockSize;    // 0 if no processing done, thus no buffers 
allocated
-
-   float *mLeftBuffer;
-   float *mRightBuffer;
+   void ProcessOne();
 
-   int    mnTracks;                    // either 1 or 2, set in Init
-   double mLeftTrackEnd;
-   double mRightTrackEnd;
-   double mLeftRate;
    longSampleCount mLeftTrackLen;
    longSampleCount mRightTrackLen;
    WaveTrack *mLeftTrack;

Index: StereoToMono.cpp
===================================================================
RCS file: /cvsroot/audacity/audacity-src/src/effects/StereoToMono.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- StereoToMono.cpp    16 Jun 2006 13:35:18 -0000      1.7
+++ StereoToMono.cpp    12 Oct 2006 04:13:57 -0000      1.8
@@ -50,54 +50,20 @@
 //      to see if it is stereo. Consolidate these
 bool EffectStereoToMono::CheckWhetherSkipEffect()
 {
-   TrackListIterator iter(mTracks);
-   mLeftTrack = (WaveTrack*)(iter.First());
-   if ( mLeftTrack == 0 ) {
-      return true;  // we need an existing track .. this is actually an error 
that will be caught later
+   TrackListIterator iter(mWaveTracks);
+   WaveTrack *t = (WaveTrack*)iter.First();
+   while (t) {
+      if (t->GetLinked()) {
+         return false;
+      }
+      t = (WaveTrack *)iter.Next();
    }
-   int channelLeftNum = mLeftTrack->GetChannel();
 
-   if (mLeftTrack->GetLinked()) {
-      return false;
-   }
-   return true;  // already mono
+   return true;
 }
 
-bool EffectStereoToMono::Process()
+void EffectStereoToMono::ProcessOne()
 {
-   mnTracks = 1;
-   mnBlockSize = 0;
-   bool validStereo = false;
-
-   TrackListIterator iter(mTracks);
-   mLeftTrack = (WaveTrack*)(iter.First());
-   if ( mLeftTrack == 0 ) {
-      return false;            // we need an existing track
-   }
-   //int channelLeftNum = mLeftTrack->GetChannel();
-
-   mLeftTrackEnd = mLeftTrack->GetEndTime();
-   mLeftTrackLen = mLeftTrack->TimeToLongSamples(mLeftTrackEnd); 
-   mLeftRate = mLeftTrack->GetRate();
-   
-   if (mLeftTrack->GetLinked()) {
-      mnTracks = 2;
-      mRightTrack = (WaveTrack*)(iter.Next());
-      //int channelRightNum = mRightTrack->GetChannel();
-      mRightTrackEnd = mRightTrack->GetEndTime();
-      mRightTrackLen = mRightTrack->TimeToLongSamples(mRightTrackEnd); 
-      double rightRate = mRightTrack->GetRate();
-      long diff = abs((long)mRightTrackLen - (long)mLeftTrackLen);
-      WaveTrack *thirdTrack = (WaveTrack*)(iter.Next());
-      
-      if ((diff <= 2) && (mLeftRate == rightRate) && (thirdTrack == 0)) {
-         validStereo = true;
-      }
-   }
-   if (validStereo == false) {
-      wxMessageBox(_("Sorry, This effect can only be performed on stereo 
tracks where the individual channels of the track match."));
-      return false;
-   }
    float  curLeftFrame;
    float  curRightFrame;
    float  curMonoFrame;
@@ -128,13 +94,51 @@
       TrackProgress(0, ((double)index / (double)mLeftTrackLen));
    }
 
-   mLeftTrack->SetLinked( false );
-   mRightTrack->SetLinked( false );
-   mLeftTrack->SetChannel( Track::MonoChannel );
-   mTracks->Remove( mRightTrack );
+   mLeftTrack->SetLinked(false);
+   mRightTrack->SetLinked(false);
+   mLeftTrack->SetChannel(Track::MonoChannel);
+   mTracks->Remove(mRightTrack);
    delete mRightTrack;
 
    delete [] leftBuffer;
    delete [] rightBuffer;
+}
+
+bool EffectStereoToMono::Process()
+{
+   // Do not use mWaveTracks here.  We will possibly delete tracks,
+   // so we must use the "real" tracklist.
+   TrackListIterator iter(mTracks);
+   mLeftTrack = (WaveTrack *)iter.First();
+   bool refreshIter = false;
+
+   while (mLeftTrack) {
+      if (mLeftTrack->GetKind() == Track::Wave &&
+          mLeftTrack->GetSelected() &&
+          mLeftTrack->GetLinked()) {
+
+         mRightTrack = (WaveTrack *)iter.Next();
+
+         mLeftTrackLen = 
mLeftTrack->TimeToLongSamples(mLeftTrack->GetEndTime()); 
+         mRightTrackLen = 
mRightTrack->TimeToLongSamples(mRightTrack->GetEndTime()); 
+         long diff = abs((long)mRightTrackLen - (long)mLeftTrackLen);
+         
+         if ((diff <= 2) && (mLeftTrack->GetRate() == mRightTrack->GetRate())) 
{
+            ProcessOne();
+
+            // The right channel has been deleted, so we must restart from the 
beginning
+            refreshIter = true;
+         }
+      }
+            
+      if (refreshIter) {
+         mLeftTrack = (WaveTrack *)iter.First();
+         refreshIter = false;
+      }
+      else {
+         mLeftTrack = (WaveTrack *)iter.Next();
+      }
+   }
+         
    return true;
 }


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Audacity-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/audacity-cvs

Reply via email to