18 size_t newLen,
double t0,
double rate,
double samplesPerPixel,
19 int &oldX0,
double &correction)
26 const double oldWhere0 = oldWhere[1].as_double() - samplesPerPixel;
27 const double oldWhereLast = oldWhere0 + oldLen * samplesPerPixel;
29 const double denom = oldWhereLast - oldWhere0;
32 const double guessWhere0 = t0 * rate;
35 oldWhereLast <= guessWhere0 ||
36 guessWhere0 + newLen * samplesPerPixel <= oldWhere0 ||
49 oldX0 = floor(0.5 + oldLen * (guessWhere0 - oldWhere0) / denom);
51 const double where0 = oldWhere0 + double(oldX0) * samplesPerPixel;
53 const double correction0 = where0 - guessWhere0;
54 correction = std::max(-samplesPerPixel,
std::min(samplesPerPixel, correction0));
55 wxASSERT(correction == correction0);
60 std::vector<sampleCount> &where,
size_t len,
double bias,
double correction,
61 double t0,
double rate,
double samplesPerPixel)
64 const double w0 = 0.5 + correction + bias + t0 * rate;
66 for (
decltype(len) x = 1; x < len + 1; x++)
67 where[x] =
sampleCount( floor(w0 +
double(x) * samplesPerPixel) );
void findCorrection(const std::vector< sampleCount > &oldWhere, size_t oldLen, size_t newLen, double t0, double rate, double samplesPerPixel, int &oldX0, double &correction)
void fillWhere(std::vector< sampleCount > &where, size_t len, double bias, double correction, double t0, double rate, double samplesPerPixel)
Positions or offsets within audio files need a wide type.