minilogue xd SDK  v1.1-0
Public Member Functions | Public Attributes | List of all members
dsp::DualDelayLine Struct Reference

Dual channel delay line abstraction with interleaved samples. More...

#include <delayline.hpp>

Public Member Functions

 DualDelayLine (void)
 Default constructor.
 
 DualDelayLine (f32pair_t *ram, size_t line_size)
 Constructor with explicit memory area to use as backing buffer for delay line. More...
 
void clear (void)
 Zero clear the whole delay line.
 
void setMemory (f32pair_t *ram, size_t line_size)
 Set the memory area to use as backing buffer for the delay line. More...
 
void write (const f32pair_t &p)
 Write a sample pair to the delay line. More...
 
f32pair_t read (const uint32_t pos)
 Read a sample pair from the delay line at given position from current write index. More...
 
f32pair_t readFrac (const float pos)
 Read a sample pair from the delay line at a fractional position from current write index. More...
 
f32pair_t readFracz (const uint32_t pos, const float frac)
 Read a sample pair from the delay line at a position from current write index with interpolation from last read. More...
 
float read0 (const uint32_t pos)
 Read a single sample from the delay line's primary channel at given position from current write index. More...
 
float read1 (const uint32_t pos)
 Read a single sample from the delay line's secondary channel at given position from current write index. More...
 
float read0Frac (const float pos)
 Read a single sample from the delay line's primary channel at a fractional position from current write index. More...
 
float read0Fracz (const uint32_t pos, const float frac)
 Read a single sample from the delay line's primary channel at a position from current write index with interpolation from last read. More...
 
float read1Frac (const float pos)
 Read a single sample from the delay line's secondary channel at a fractional position from current write index. More...
 
float read1Fracz (const uint32_t pos, const float frac)
 Read a single sample from the delay line's secondary channel at a position from current write index with interpolation from last read. More...
 

Public Attributes

f32pair_tmLine
 
f32pair_t mFracZ
 
size_t mSize
 
size_t mMask
 
uint32_t mWriteIdx
 

Detailed Description

Dual channel delay line abstraction with interleaved samples.

Definition at line 187 of file delayline.hpp.

Constructor & Destructor Documentation

◆ DualDelayLine()

dsp::DualDelayLine::DualDelayLine ( f32pair_t ram,
size_t  line_size 
)
inline

Constructor with explicit memory area to use as backing buffer for delay line.

Parameters
ramPointer to memory buffer
line_sizeSize in float pairs of memory buffer

Definition at line 215 of file delayline.hpp.

215  :
216  mWriteIdx(0)
217  {
218  setMemory(ram, line_size);
219  }

Member Function Documentation

◆ read()

f32pair_t dsp::DualDelayLine::read ( const uint32_t  pos)
inline

Read a sample pair from the delay line at given position from current write index.

Parameters
posOffset from write index
Returns
Sample pair at given position from write index

Definition at line 266 of file delayline.hpp.

266  {
267  return mLine[(mWriteIdx + pos) & mMask];
268  }

◆ read0()

float dsp::DualDelayLine::read0 ( const uint32_t  pos)
inline

Read a single sample from the delay line's primary channel at given position from current write index.

Parameters
posOffset from write index.
Returns
Sample at given position from write index

Definition at line 308 of file delayline.hpp.

308  {
309  return (mLine[(mWriteIdx + pos) & mMask]).a;
310  }

◆ read0Frac()

float dsp::DualDelayLine::read0Frac ( const float  pos)
inline

Read a single sample from the delay line's primary channel at a fractional position from current write index.

Parameters
posOffset from write index as floating point.
Returns
Interpolated sample at given fractional position from write index

Definition at line 330 of file delayline.hpp.

330  {
331  const int32_t base = (uint32_t)pos;
332  const float frac = pos - base;
333  const float f0 = read0(base);
334  const float f1 = read0(base+1);
335  return linintf(frac, f0, f1);
336  }

◆ read0Fracz()

float dsp::DualDelayLine::read0Fracz ( const uint32_t  pos,
const float  frac 
)
inline

Read a single sample from the delay line's primary channel at a position from current write index with interpolation from last read.

Parameters
posOffset from write index
fracInterpolation from last read pair.
Returns
Interpolation of last read sample and sample at given position from write index.

Definition at line 346 of file delayline.hpp.

346  {
347  const float f0 = read0(pos);
348  const float y = linintf(frac, f0, mFracZ.a);
349  mFracZ.a = f0;
350  return y;
351  }

◆ read1()

float dsp::DualDelayLine::read1 ( const uint32_t  pos)
inline

Read a single sample from the delay line's secondary channel at given position from current write index.

Parameters
posOffset from write index.
Returns
Sample at given position from write index

Definition at line 319 of file delayline.hpp.

319  {
320  return (mLine[(mWriteIdx + pos) & mMask]).b;
321  }

◆ read1Frac()

float dsp::DualDelayLine::read1Frac ( const float  pos)
inline

Read a single sample from the delay line's secondary channel at a fractional position from current write index.

Parameters
posOffset from write index as floating point.
Returns
Interpolated sample at given fractional position from write index

Definition at line 360 of file delayline.hpp.

360  {
361  const int32_t base = (uint32_t)pos;
362  const float frac = pos - base;
363  const float f0 = read1(base);
364  const float f1 = read1(base+1);
365  return linintf(frac, f0, f1);
366  }

◆ read1Fracz()

float dsp::DualDelayLine::read1Fracz ( const uint32_t  pos,
const float  frac 
)
inline

Read a single sample from the delay line's secondary channel at a position from current write index with interpolation from last read.

Parameters
posOffset from write index
fracInterpolation from last read pair.
Returns
Interpolation of last read sample and sample at given position from write index.

Definition at line 376 of file delayline.hpp.

376  {
377  const float f0 = read1(pos);
378  const float y = linintf(frac, f0, mFracZ.b);
379  mFracZ.b = f0;
380  return y;
381  }

◆ readFrac()

f32pair_t dsp::DualDelayLine::readFrac ( const float  pos)
inline

Read a sample pair from the delay line at a fractional position from current write index.

Parameters
posOffset from write index as floating point.
Returns
Interpolated sample pair at given fractional position from write index

Definition at line 277 of file delayline.hpp.

277  {
278  const int32_t base = (uint32_t)pos;
279  const float frac = pos - base;
280  const f32pair_t p0 = read(base);
281  const f32pair_t p1 = read(base+1);
282 
283  return f32pair_linint(frac, p0, p1);
284  }

◆ readFracz()

f32pair_t dsp::DualDelayLine::readFracz ( const uint32_t  pos,
const float  frac 
)
inline

Read a sample pair from the delay line at a position from current write index with interpolation from last read.

Parameters
posOffset from write index
fracInterpolation from last read pair.
Returns
Interpolation of last read sample pair and sample pair at given position from write index.

Definition at line 294 of file delayline.hpp.

294  {
295  const f32pair_t p0 = read(pos);
296  const f32pair_t y = f32pair_linint(frac, p0, mFracZ);
297  mFracZ = p0;
298  return y;
299  }

◆ setMemory()

void dsp::DualDelayLine::setMemory ( f32pair_t ram,
size_t  line_size 
)
inline

Set the memory area to use as backing buffer for the delay line.

Parameters
ramPointer to memory buffer
line_sizeSize in float pairs of memory buffer
Note
Will round size to next power of two.

Definition at line 242 of file delayline.hpp.

242  {
243  mLine = ram;
244  mSize = nextpow2_u32(line_size); // must be power of 2
245  mMask = (mSize-1);
246  mWriteIdx = 0;
247  }

◆ write()

void dsp::DualDelayLine::write ( const f32pair_t p)
inline

Write a sample pair to the delay line.

Parameters
pReference to float pair.

Definition at line 255 of file delayline.hpp.

255  {
256  mLine[(mWriteIdx--) & mMask] = p;
257  }

The documentation for this struct was generated from the following file:
f32pair_linint
static f32pair_t f32pair_linint(const float fr, const f32pair_t p0, const f32pair_t p1)
Pair-wise linear interpolation.
Definition: float_math.h:262
dsp::DualDelayLine::read1
float read1(const uint32_t pos)
Read a single sample from the delay line's secondary channel at given position from current write ind...
Definition: delayline.hpp:319
dsp::DualDelayLine::read
f32pair_t read(const uint32_t pos)
Read a sample pair from the delay line at given position from current write index.
Definition: delayline.hpp:266
nextpow2_u32
static uint32_t nextpow2_u32(uint32_t x)
Compute next power of 2 greater than x.
Definition: int_math.h:117
f32pair_t
Definition: float_math.h:166
linintf
static float linintf(const float fr, const float x0, const float x1)
Linear interpolation.
Definition: float_math.h:824
dsp::DualDelayLine::setMemory
void setMemory(f32pair_t *ram, size_t line_size)
Set the memory area to use as backing buffer for the delay line.
Definition: delayline.hpp:242
dsp::DualDelayLine::read0
float read0(const uint32_t pos)
Read a single sample from the delay line's primary channel at given position from current write index...
Definition: delayline.hpp:308