Audacity  3.0.3
Classes | Public Member Functions | Public Attributes | List of all members
AudioIoCallback::TimeQueue Struct Reference

#include <AudioIO.h>

Collaboration diagram for AudioIoCallback::TimeQueue:
[legend]

Classes

struct  Cursor
 

Public Member Functions

void Producer (const PlaybackSchedule &schedule, double rate, double scrubSpeed, size_t nSamples)
 
double Consumer (size_t nSamples, double rate)
 

Public Attributes

Doubles mData
 
size_t mSize { 0 }
 
double mLastTime {}
 
NonInterfering< CursormHead
 
NonInterfering< CursormTail
 

Detailed Description

Definition at line 455 of file AudioIO.h.

Member Function Documentation

◆ Consumer()

double AudioIO::TimeQueue::Consumer ( size_t  nSamples,
double  rate 
)

Definition at line 3565 of file AudioIO.cpp.

3566 {
3567  if ( ! mData ) {
3568  // Recording only. No scrub or playback time warp. Don't use the queue.
3569  return ( mLastTime += nSamples / rate );
3570  }
3571 
3572  // Don't check available space: assume it is enough because of coordination
3573  // with RingBuffer.
3574  auto remainder = mHead.mRemainder;
3575  auto space = TimeQueueGrainSize - remainder;
3576  if ( nSamples >= space ) {
3577  remainder = 0,
3578  mHead.mIndex = (mHead.mIndex + 1) % mSize,
3579  nSamples -= space;
3580  if ( nSamples >= TimeQueueGrainSize )
3581  mHead.mIndex =
3582  (mHead.mIndex + ( nSamples / TimeQueueGrainSize ) ) % mSize,
3583  nSamples %= TimeQueueGrainSize;
3584  }
3585  mHead.mRemainder = remainder + nSamples;
3586  return mData[ mHead.mIndex ];
3587 }

References TimeQueueGrainSize.

Referenced by AudioIoCallback::UpdateTimePosition().

Here is the caller graph for this function:

◆ Producer()

void AudioIO::TimeQueue::Producer ( const PlaybackSchedule schedule,
double  rate,
double  scrubSpeed,
size_t  nSamples 
)

Definition at line 3532 of file AudioIO.cpp.

3535 {
3536  if ( ! mData )
3537  // Recording only. Don't fill the queue.
3538  return;
3539 
3540  // Don't check available space: assume it is enough because of coordination
3541  // with RingBuffer.
3542  auto index = mTail.mIndex;
3543  auto time = mLastTime;
3544  auto remainder = mTail.mRemainder;
3545  auto space = TimeQueueGrainSize - remainder;
3546 
3547  while ( nSamples >= space ) {
3548  time = schedule.AdvancedTrackTime( time, space / rate, scrubSpeed );
3549  index = (index + 1) % mSize;
3550  mData[ index ] = time;
3551  nSamples -= space;
3552  remainder = 0;
3553  space = TimeQueueGrainSize;
3554  }
3555 
3556  // Last odd lot
3557  if ( nSamples > 0 )
3558  time = schedule.AdvancedTrackTime( time, nSamples / rate, scrubSpeed );
3559 
3560  mLastTime = time;
3561  mTail.mRemainder = remainder + nSamples;
3562  mTail.mIndex = index;
3563 }

References PlaybackSchedule::AdvancedTrackTime(), and TimeQueueGrainSize.

Referenced by AudioIO::FillPlayBuffers().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ mData

Doubles AudioIoCallback::TimeQueue::mData

◆ mHead

NonInterfering<Cursor> AudioIoCallback::TimeQueue::mHead

Definition at line 466 of file AudioIO.h.

Referenced by AudioIO::AllocateBuffers().

◆ mLastTime

double AudioIoCallback::TimeQueue::mLastTime {}

Definition at line 458 of file AudioIO.h.

Referenced by AudioIO::RepositionPlayback(), and AudioIO::StartStream().

◆ mSize

size_t AudioIoCallback::TimeQueue::mSize { 0 }

Definition at line 457 of file AudioIO.h.

Referenced by AudioIO::AllocateBuffers().

◆ mTail

NonInterfering<Cursor> AudioIoCallback::TimeQueue::mTail

Definition at line 466 of file AudioIO.h.

Referenced by AudioIO::AllocateBuffers().


The documentation for this struct was generated from the following files:
AudioIoCallback::TimeQueue::mHead
NonInterfering< Cursor > mHead
Definition: AudioIO.h:466
AudioIoCallback::TimeQueue::mData
Doubles mData
Definition: AudioIO.h:456
TimeQueueGrainSize
constexpr size_t TimeQueueGrainSize
Definition: AudioIO.cpp:153
PlaybackSchedule::AdvancedTrackTime
double AdvancedTrackTime(double trackTime, double realElapsed, double speed) const
Definition: PlaybackSchedule.cpp:179
AudioIoCallback::TimeQueue::mLastTime
double mLastTime
Definition: AudioIO.h:458
AudioIoCallback::TimeQueue::mTail
NonInterfering< Cursor > mTail
Definition: AudioIO.h:466
AudioIoCallback::TimeQueue::mSize
size_t mSize
Definition: AudioIO.h:457