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

Reply via email to