arduino-audio-tools
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
VariableSpeedRingBuffer< T > Class Template Reference

Optimized Buffer implementation for Pitch Shift. We try to interpolate the samples and restore the phase when the read pointer and write pointer overtake each other. More...

#include <PitchShift.h>

Inheritance diagram for VariableSpeedRingBuffer< T >:
BaseBuffer< T >

Public Member Functions

 VariableSpeedRingBuffer (int size=0, float increment=1.0)
 
virtual T * address ()
 returns the address of the start of the physical read buffer
 
virtual int available ()
 provides the number of entries that are available to read
 
virtual int availableForWrite ()
 provides the number of entries that are available to write
 
void clear ()
 same as reset
 
virtual int clearArray (int len)
 Removes the next len entries.
 
bool isEmpty ()
 
virtual bool isFull ()
 checks if the buffer is full
 
virtual float levelPercent ()
 Returns the level of the buffer in %.
 
peek ()
 peeks the actual entry from the buffer
 
read ()
 reads a single value
 
virtual int readArray (T data[], int len)
 reads multiple values
 
int readFrames (T data[][2], int len)
 reads multiple values for array of 2 dimensional frames
 
template<int rows, int channels>
int readFrames (T(&data)[rows][channels])
 
void reset ()
 Reset pointer positions and clear buffer.
 
void resize (int size)
 
void setIncrement (float increment)
 
size_t size ()
 
bool write (T sample)
 write add an entry to the buffer
 
virtual int writeArray (const T data[], int len)
 Fills the buffer data.
 
virtual int writeArrayOverwrite (const T data[], int len)
 Fills the buffer data and overwrites the oldest data if the buffer is full.
 

Protected Member Functions

getValue (int pos)
 provides the value from the buffer: Allows pos > buffer_size
 
void handleReadWriteOverrun (T last_value)
 
interpolate (float read_pos)
 Calculate exact sample value for float position.
 
bool isMatching (T value1, bool incrementing, T v1, T v2)
 
void setWritePos (int pos)
 

Protected Attributes

Vector< T > buffer {0}
 
int buffer_size
 
bool incrementing
 
last_value = 0
 
friend NBuffer< T >
 
float read_increment = 0.0f
 
float read_pos_float = 0.0f
 
int write_pos = 0
 

Detailed Description

template<typename T>
class audio_tools::VariableSpeedRingBuffer< T >

Optimized Buffer implementation for Pitch Shift. We try to interpolate the samples and restore the phase when the read pointer and write pointer overtake each other.

Template Parameters
T

Member Function Documentation

◆ handleReadWriteOverrun()

void handleReadWriteOverrun ( last_value)
inlineprotected

When the read pointer is overpassing the write pointer or the write pointer is overpassing the read pointer we need to phase shift

◆ isMatching()

bool isMatching ( value1,
bool  incrementing,
v1,
v2 
)
inlineprotected

checks if we can fit the last value between 2 existing values in the buffer


The documentation for this class was generated from the following file: