|
|
@@ -55,26 +55,26 @@ Peaks::fill_buffer ( float fpp, int s, int e ) const |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
inline void |
|
|
|
Peaks::downsample ( Peak *peaks, int s, int e, float *mhi, float *mlo ) const |
|
|
|
{ |
|
|
|
*mhi = 0; |
|
|
|
*mlo = 0; |
|
|
|
|
|
|
|
if ( e > _len ) |
|
|
|
e = _len; |
|
|
|
|
|
|
|
for ( int j = s; j < e; j++ ) |
|
|
|
{ |
|
|
|
const float lo = peaks[ j ].min; |
|
|
|
const float hi = peaks[ j ].max; |
|
|
|
|
|
|
|
if ( hi > *mhi ) |
|
|
|
*mhi = hi; |
|
|
|
if ( lo < *mlo ) |
|
|
|
*mlo = lo; |
|
|
|
} |
|
|
|
} |
|
|
|
/* inline void */ |
|
|
|
/* Peaks::downsample ( Peak *peaks, int s, int e, float *mhi, float *mlo ) const */ |
|
|
|
/* { */ |
|
|
|
/* *mhi = 0; */ |
|
|
|
/* *mlo = 0; */ |
|
|
|
|
|
|
|
/* if ( e > _len ) */ |
|
|
|
/* e = _len; */ |
|
|
|
|
|
|
|
/* for ( int j = s; j < e; j++ ) */ |
|
|
|
/* { */ |
|
|
|
/* const float lo = peaks[ j ].min; */ |
|
|
|
/* const float hi = peaks[ j ].max; */ |
|
|
|
|
|
|
|
/* if ( hi > *mhi ) */ |
|
|
|
/* *mhi = hi; */ |
|
|
|
/* if ( lo < *mlo ) */ |
|
|
|
/* *mlo = lo; */ |
|
|
|
/* } */ |
|
|
|
/* } */ |
|
|
|
|
|
|
|
int |
|
|
|
Peaks::read_peakfile_peaks ( Peak *peaks, nframes_t s, int npeaks, int chunksize ) const |
|
|
@@ -227,39 +227,22 @@ Peaks::read_peaks ( int s, int e, int npeaks, int chunksize ) const |
|
|
|
} |
|
|
|
|
|
|
|
/** Return the peak for the range of samples */ |
|
|
|
Peak & |
|
|
|
Peaks::peak ( nframes_t start, nframes_t end ) const |
|
|
|
{ |
|
|
|
/* Is there a better way to return this? */ |
|
|
|
static Peak p; |
|
|
|
|
|
|
|
start = (start - _peakbuf.offset) / _peakbuf.buf->chunksize; |
|
|
|
end = (end - _peakbuf.offset) / _peakbuf.buf->chunksize; |
|
|
|
|
|
|
|
if ( end > _peakbuf.len ) |
|
|
|
end = _peakbuf.len; |
|
|
|
|
|
|
|
downsample( _peakbuf.buf->data, start, end, &p.max, &p.min ); |
|
|
|
|
|
|
|
return p; |
|
|
|
} |
|
|
|
|
|
|
|
/* virtual array. Index is a Pixel value, and it returns the |
|
|
|
* (resampled) peaks for that pixel based on the current timeline |
|
|
|
* zoom. */ |
|
|
|
|
|
|
|
/* Peak & */ |
|
|
|
/* Peaks::operator[] ( int X ) const */ |
|
|
|
/* Peaks::peak ( nframes_t start, nframes_t end ) const */ |
|
|
|
/* { */ |
|
|
|
/* /\* Is there a better way to return this? *\/ */ |
|
|
|
/* static Peak p; */ |
|
|
|
|
|
|
|
/* Peak p; */ |
|
|
|
/* p.min = 0; */ |
|
|
|
/* p.max = 0; */ |
|
|
|
/* return p; */ |
|
|
|
/* // return peak( timeline->x_to_ts( X ), timeline->x_to_ts( X + 1 ) ); */ |
|
|
|
/* start = (start - _peakbuf.offset) / _peakbuf.buf->chunksize; */ |
|
|
|
/* end = (end - _peakbuf.offset) / _peakbuf.buf->chunksize; */ |
|
|
|
|
|
|
|
/* } */ |
|
|
|
/* if ( end > _peakbuf.len ) */ |
|
|
|
/* end = _peakbuf.len; */ |
|
|
|
|
|
|
|
/* downsample( _peakbuf.buf->data, start, end, &p.max, &p.min ); */ |
|
|
|
|
|
|
|
/* return p; */ |
|
|
|
/* } */ |
|
|
|
|
|
|
|
const char * |
|
|
|
Peaks::peakname ( const char *filename ) const |
|
|
@@ -365,24 +348,24 @@ Peaks::make_peaks ( int chunksize ) |
|
|
|
/** return normalization factor for range of samples from /start/ to |
|
|
|
/end/ (uses known peak data if possible */ |
|
|
|
|
|
|
|
float |
|
|
|
Peaks::normalization_factor( float fpp, nframes_t start, nframes_t end ) const |
|
|
|
{ |
|
|
|
float s; |
|
|
|
/* float */ |
|
|
|
/* Peaks::normalization_factor( float fpp, nframes_t start, nframes_t end ) const */ |
|
|
|
/* { */ |
|
|
|
/* float s; */ |
|
|
|
|
|
|
|
// fill_buffer( fpp, start, end ); |
|
|
|
/* // fill_buffer( fpp, start, end ); */ |
|
|
|
|
|
|
|
/* if ( end - start < _peaks->chunksize * 4 ) */ |
|
|
|
/* fill_buffer( _clip->length() / 4, start, end ); */ |
|
|
|
/* else */ |
|
|
|
/* fill_buffer( _clip->length(), start, end ); */ |
|
|
|
/* /\* if ( end - start < _peaks->chunksize * 4 ) *\/ */ |
|
|
|
/* /\* fill_buffer( _clip->length() / 4, start, end ); *\/ */ |
|
|
|
/* /\* else *\/ */ |
|
|
|
/* /\* fill_buffer( _clip->length(), start, end ); *\/ */ |
|
|
|
|
|
|
|
Peak p = peak( start, end ); |
|
|
|
/* Peak p = peak( start, end ); */ |
|
|
|
|
|
|
|
s = 1.0f / fabs( p.max ); |
|
|
|
/* s = 1.0f / fabs( p.max ); */ |
|
|
|
|
|
|
|
if ( s * p.min < -1.0 ) |
|
|
|
s = 1.0f / fabs( p.min ); |
|
|
|
/* if ( s * p.min < -1.0 ) */ |
|
|
|
/* s = 1.0f / fabs( p.min ); */ |
|
|
|
|
|
|
|
return s; |
|
|
|
} |
|
|
|
/* return s; */ |
|
|
|
/* } */ |