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