Update of /cvsroot/audacity/audacity-src/src In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv17299
Modified Files: LabelTrack.cpp LabelTrack.h WaveTrack.cpp WaveTrack.h Log Message: Labels now should move as expected with change speed, tempo... Thanks to Martyn Shaw for reporting this problem. Index: WaveTrack.h =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/WaveTrack.h,v retrieving revision 1.69 retrieving revision 1.70 diff -u -d -r1.69 -r1.70 --- WaveTrack.h 19 Jun 2009 15:26:27 -0000 1.69 +++ WaveTrack.h 8 Jul 2009 10:04:14 -0000 1.70 @@ -126,12 +126,13 @@ virtual bool Cut (double t0, double t1, Track **dest); virtual bool Copy (double t0, double t1, Track **dest); virtual bool Clear(double t0, double t1); - virtual bool Paste(double t0, Track *src); + virtual bool Paste(double t0, Track *src, bool relativeLabels = false); virtual bool ClearAndPaste(double t0, double t1, Track *src, bool preserve = true, bool merge = true, - TrackList* tracks = NULL); + TrackList* tracks = NULL, + bool relativeLabels = false); virtual bool Silence(double t0, double t1); virtual bool InsertSilence(double t, double len); @@ -155,8 +156,8 @@ bool HandleGroupClear(double t0, double t1, bool addCutLines, bool split, TrackList* tracks = NULL); bool HandleClear(double t0, double t1, bool addCutLines, bool split); - bool Paste(double t0, Track *src, TrackList* tracks); - bool HandleGroupPaste(double t0, Track *src, TrackList* tracks = NULL); + bool Paste(double t0, Track *src, TrackList* tracks, bool relativeLabels = false); + bool HandleGroupPaste(double t0, Track *src, TrackList* tracks, bool relativeLabels); bool HandlePaste(double t0, Track *src); // Returns true if there are no WaveClips in that region Index: LabelTrack.cpp =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/LabelTrack.cpp,v retrieving revision 1.108 retrieving revision 1.109 diff -u -d -r1.108 -r1.109 --- LabelTrack.cpp 4 Jul 2009 19:01:04 -0000 1.108 +++ LabelTrack.cpp 8 Jul 2009 10:04:11 -0000 1.109 @@ -149,6 +149,8 @@ void LabelTrack::ShiftLabelsOnClear(double b, double e) { for (size_t i=0;i<mLabels.GetCount();i++){ + double x = mLabels[i]->t; + double y = mLabels[i]->t1; if (mLabels[i]->t >= e){//label is after deletion region mLabels[i]->t = mLabels[i]->t - (e-b); mLabels[i]->t1 = mLabels[i]->t1 - (e-b); @@ -186,14 +188,6 @@ } } -void LabelTrack::ShiftLabelsOnChangeSpeed(double b, double e, double change) -{ - for (unsigned int i=0;i<mLabels.GetCount();i++){ - mLabels[i]->t = AdjustTimeStampForSpeedChange(mLabels[i]->t, b, e, change); - mLabels[i]->t1 = AdjustTimeStampForSpeedChange(mLabels[i]->t1, b, e, change); - } -} - void LabelTrack::ChangeLabelsOnReverse(double b, double e) { for (size_t i=0; i<mLabels.GetCount(); i++) { @@ -205,22 +199,27 @@ } } -double LabelTrack::AdjustTimeStampForSpeedChange(double t, double b, double e, double change) +void LabelTrack::ScaleLabels(double b, double e, double change) +{ + for (unsigned int i=0;i<mLabels.GetCount();i++){ + mLabels[i]->t = AdjustTimeStampOnScale(mLabels[i]->t, b, e, change); + mLabels[i]->t1 = AdjustTimeStampOnScale(mLabels[i]->t1, b, e, change); + } +} + +double LabelTrack::AdjustTimeStampOnScale(double t, double b, double e, double change) { //t is the time stamp we'll be changing //b and e are the selection start and end - - double percentChange = (100 + change)/100; - //printf("t: %f\nb: %f\ne: %f\nchange: %f\n", t, b, e, change); - + if (t < b){ return t; }else if (t > e){ - double shift = (e-b) - ((e-b)/percentChange); - return (t - shift); + double shift = (e-b)*change - (e-b); + return t + shift; }else{ - double shift = (t-b) - ((t-b)/percentChange); - return (t - shift); + double shift = (t-b)*change - (t-b); + return t + shift; } } Index: WaveTrack.cpp =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/WaveTrack.cpp,v retrieving revision 1.158 retrieving revision 1.159 diff -u -d -r1.158 -r1.159 --- WaveTrack.cpp 4 Jul 2009 19:01:04 -0000 1.158 +++ WaveTrack.cpp 8 Jul 2009 10:04:13 -0000 1.159 @@ -432,16 +432,16 @@ return true; } -bool WaveTrack::Paste(double t0, Track *src) +bool WaveTrack::Paste(double t0, Track *src, bool relativeLabels) { - return Paste(t0, src, NULL); + return Paste(t0, src, NULL, relativeLabels); } -bool WaveTrack::Paste(double t0, Track *src, TrackList* tracks) +bool WaveTrack::Paste(double t0, Track *src, TrackList* tracks, bool relativeLabels) { AudacityProject *p = GetActiveProject(); if( p && p->IsSticky() && GetNode() ) - return HandleGroupPaste(t0, src, tracks); + return HandleGroupPaste(t0, src, tracks, relativeLabels); else return HandlePaste(t0, src); } @@ -487,9 +487,8 @@ // be pasted with visible split lines. Normally, effects do not // want these extra lines, so they may be merged out. // -bool WaveTrack::ClearAndPaste(double t0, double t1, - Track *src, - bool preserve, bool merge, TrackList* tracks) +bool WaveTrack::ClearAndPaste(double t0, double t1, Track *src, bool preserve, + bool merge, TrackList* tracks, bool relativeLabels) { WaveClipList::compatibility_iterator ic; WaveClipList::compatibility_iterator it; @@ -500,7 +499,7 @@ // If duration is 0, then it's just a plain paste if (dur == 0.0) { - return Paste(t0, src, tracks); + return Paste(t0, src, tracks, relativeLabels); } // Align to a sample @@ -548,7 +547,7 @@ // Now, clear the selection if (HandleClear(t0, t1, false, false)) { // And paste in the new data - if (Paste(t0, src, tracks)) { + if (Paste(t0, src, tracks, relativeLabels)) { unsigned int i; // First, merge the new clip(s) in with the existing clips @@ -799,7 +798,7 @@ return true; } -bool WaveTrack::HandleGroupPaste(double t0, Track *src, TrackList* tracks) +bool WaveTrack::HandleGroupPaste(double t0, Track *src, TrackList* tracks, bool relativeLabels) { // get tracks AudacityProject *p = GetActiveProject(); @@ -843,10 +842,15 @@ } } else if (t->GetKind() == Track::Label) { - if ((length - sel_len) > 0.0) - ((LabelTrack *)t)->ShiftLabelsOnInsert(length-sel_len, t0); - else if ((length - sel_len) < 0.0) - ((LabelTrack *)t)->ShiftLabelsOnClear(info->sel0+length, info->sel1); + LabelTrack *lt = (LabelTrack *)t; + if (relativeLabels && (sel_len != 0.0)) + lt->ScaleLabels(info->sel0, info->sel1, length/sel_len); + else { + if ((length - sel_len) > 0.0) + lt->ShiftLabelsOnInsert(length-sel_len, t0); + else if ((length - sel_len) < 0.0) + lt->ShiftLabelsOnClear(info->sel0+length, info->sel1); + } } } Index: LabelTrack.h =================================================================== RCS file: /cvsroot/audacity/audacity-src/src/LabelTrack.h,v retrieving revision 1.48 retrieving revision 1.49 diff -u -d -r1.48 -r1.49 --- LabelTrack.h 4 Jul 2009 00:18:14 -0000 1.48 +++ LabelTrack.h 8 Jul 2009 10:04:13 -0000 1.49 @@ -169,9 +169,9 @@ void ShiftLabelsOnClear(double b, double e); void ShiftLabelsOnInsert(double length, double pt); - void ShiftLabelsOnChangeSpeed(double b, double e, double change); void ChangeLabelsOnReverse(double b, double e); - double AdjustTimeStampForSpeedChange(double t, double b, double e, double change); + void ScaleLabels(double b, double e, double change); + double AdjustTimeStampOnScale(double t, double b, double e, double change); public: void SortLabels(); ------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge _______________________________________________ Audacity-cvs mailing list Audacity-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/audacity-cvs