Browse Source

Don't waste time deinterleaving peaks.

tags/non-daw-v1.1.0
Jonathan Moore Liles 17 years ago
parent
commit
1b5459fe2b
4 changed files with 23 additions and 19 deletions
  1. +7
    -5
      Timeline/Audio_File.C
  2. +11
    -9
      Timeline/Region.C
  3. +4
    -4
      Timeline/Waveform.C
  4. +1
    -1
      Timeline/Waveform.H

+ 7
- 5
Timeline/Audio_File.C View File

@@ -77,11 +77,13 @@ Audio_File::read_peaks( float fpp, nframes_t start, nframes_t end, int *peaks, P

*pbuf = new Peak[ *peaks * *channels ];

/* deintereave peaks */
int k = 0;
for ( int i = 0; i < *channels; i++ )
for ( int j = i; j < *peaks * *channels; j += *channels )
(*pbuf)[ k++ ] = pk.peakbuf()[ j ];
memcpy( *pbuf, pk.peakbuf(), *peaks * *channels * sizeof( Peak ) );

/* /\* deintereave peaks *\/ */
/* int k = 0; */
/* for ( int i = 0; i < *channels; i++ ) */
/* for ( int j = i; j < *peaks * *channels; j += *channels ) */
/* (*pbuf)[ k++ ] = pk.peakbuf()[ j ]; */

return true;
}

+ 11
- 9
Timeline/Region.C View File

@@ -626,16 +626,18 @@ Region::draw ( void )

int ch = (h() - Fl::box_dh( box() )) / channels;

for ( int i = 0; i < channels; ++i )

/* scale it */
for ( int j = peaks * channels; j--; )
{
Peak *pb = pbuf + (peaks * i);
pbuf[ j ].min *= _scale;
pbuf[ j ].max *= _scale;
}

/* scale it */
for ( int j = peaks; j--; )
{
pb[ j ].min *= _scale;
pb[ j ].max *= _scale;
}

for ( int i = 0; i < channels; ++i )
{
// Peak *pb = pbuf + (peaks * i);

/* int fw = timeline->ts_to_x( fade.length ); */

@@ -651,7 +653,7 @@ Region::draw ( void )
(y() + Fl::box_dy( box() )) + (i * ch),
W,
ch,
pb, peaks,
pbuf + i, peaks, channels,
selected() ? fl_invert_color( _color ) : _color );
}



+ 4
- 4
Timeline/Waveform.C View File

@@ -43,7 +43,7 @@ bool Waveform::logarithmic = true;
/** draw a portion of /clip/'s waveform. coordinates are the portion to draw */
void
Waveform::draw ( int X, int Y, int W, int H,
Peak *pbuf, int peaks,
Peak *pbuf, int peaks, int skip,
Fl_Color color )
{
fl_push_clip( X, Y, W, H );
@@ -62,7 +62,7 @@ Waveform::draw ( int X, int Y, int W, int H,
if ( Waveform::fill )
{
j = start;
for ( int x = X; x < X + W; ++x, ++j )
for ( int x = X; x < X + W; ++x, j += skip )
{
const Peak p = pbuf[ j ];

@@ -106,7 +106,7 @@ Waveform::draw ( int X, int Y, int W, int H,
fl_begin_line();

j = start;
for ( int x = X; x < X + W; ++x, ++j )
for ( int x = X; x < X + W; ++x, j += skip )
{
const Peak p = pbuf[ j ];

@@ -118,7 +118,7 @@ Waveform::draw ( int X, int Y, int W, int H,
fl_begin_line();

j = start;
for ( int x = X; x < X + W; ++x, ++j )
for ( int x = X; x < X + W; ++x, j += skip )
{
const Peak p = pbuf[ j ];



+ 1
- 1
Timeline/Waveform.H View File

@@ -36,7 +36,7 @@ public:
static bool logarithmic;

static void draw ( int X, int Y, int W, int H,
Peak *pbuf, int peaks,
Peak *pbuf, int peaks, int skip,
Fl_Color color );

};

Loading…
Cancel
Save