318
319
int *queueStart, int *queueLen,
321
double initialWarp = mRate / track->GetRate();
322
double t = *pos / track->GetRate();
322
double trackRate = track->GetRate();
323
double initialWarp = mRate / trackRate;
324
double t = *pos / trackRate;
323
325
int sampleSize = SAMPLE_SIZE(floatSample);
326
328
sampleCount out = 0;
330
// Find the last sample
331
longSampleCount last = -1;
332
WaveClipList::Node* it = track->GetClipIterator();
334
longSampleCount end = it->GetData()->GetEndSample();
341
longSampleCount max = trackRate * mT1;
328
345
while(out < mMaxOut) {
329
346
if (*queueLen < mProcessLen) {
330
memmove(queue, &queue[*queueStart],
331
(*queueLen)*sampleSize);
347
memmove(queue, &queue[*queueStart], (*queueLen)*sampleSize);
334
350
int getLen = mQueueMaxLen - *queueLen;
338
// TODO: fix this code so that extra silence isn't added
339
// to the end of a track
341
double trackTime = (*pos + getLen) / track->GetRate();
342
if (trackTime > track->GetEndTime()) {
343
getLen = (int)(0.5 + track->GetRate() *
344
(track->GetEndTime() -
345
((*pos) / track->GetRate())));
353
if (*pos + getLen > last) {
354
getLen = last - *pos;
357
// Nothing to do if past end of track
349
362
track->Get((samplePtr)&queue[*queueLen], floatSample,
352
track->GetEnvelopeValues(mEnvValues, getLen, (*pos) / track->GetRate(),
353
1.0 / track->GetRate());
365
track->GetEnvelopeValues(mEnvValues, getLen, (*pos) / trackRate,
355
368
for(i=0; i<getLen; i++)
356
369
queue[(*queueLen)+i] *= mEnvValues[i];
402
415
MixBuffers(mNumChannels, channelFlags, mGains,
403
(samplePtr)mFloatBuffer, mTemp, mMaxOut, mInterleaved);
416
(samplePtr)mFloatBuffer, mTemp, out, mInterleaved);
408
421
sampleCount Mixer::MixSameRate(int *channelFlags, WaveTrack *track,