ldrive

drives a phasor (saw-wave) for reading/writing data
Author: robert schirmer
License: BSD
Github: rbrt/old/ldrive.axo

Inlets

bool32.rising reset to zero

frac32.positive length of the area to index,or loop end

frac32.positive loopstart relative to 'range'

frac32.bipolar speed modulation

bool32.risingfalling play or dont

Outlets

frac32buffer.positive phase

int32 loop count since reset

int32 lenght of the loop in samples

Parameters

frac32.s.map speed,+ 64 normal speed forward, - 64 backward

Attributes

objref table

Declaration
float32_t index;
uint32_t r;
uint32_t pos;
int shift;
int range;
int loopstart;
int count;
int reset;
int t_speed;
bool add;
Init
index = 0;
r = 1;

// set 'shift factor' for storing the recording length/the sync output
if (attr_table.LENGTH == 2048) {
  shift = 16;
}
if (attr_table.LENGTH == 4096) {
  shift = 15;
}
if (attr_table.LENGTH == 8192) {
  shift = 14;
}
if (attr_table.LENGTH == 16384) {
  shift = 13;
}
if (attr_table.LENGTH == 32768) {
  shift = 12;
}
if (attr_table.LENGTH == 65536) {
  shift = 11;
}
if (attr_table.LENGTH == 131072) {
  shift = 10;
}
if (attr_table.LENGTH == 262144) {
  shift = 9;
}
if (attr_table.LENGTH == 524288) {
  shift = 8;
}
if (attr_table.LENGTH == 1048576) {
  shift = 7;
}
if (attr_table.LENGTH == 2097152) {
  shift = 6;
}
if (attr_table.LENGTH == 4194304) {
  shift = 5;
}
Audio Rate
range = (inlet_range >> shift);
loopstart = ((___SMMUL(inlet_range, inlet_loopstart) << 5) >> shift);
t_speed = (inlet_speed + param_speed);

if (inlet_reset && r) {
  index = 0;
  r = 0;
  count = 0;
} else {
  if (!inlet_reset)
    r = 1;

  index += (t_speed * (float)(1.0f / (1 << 27)));
  pos = (index + loopstart);
  add = range;

  // set a range

  if (t_speed > 0) {
    if (pos >= (range)) {
      index = 0;
      count += add;
    }
  } else {
    if (pos <= loopstart) {
      index = (range - loopstart);
      count += add;
    }
  }
}

if (inlet_play)
  outlet_pos = (pos << shift);
else
  outlet_pos = 0;
outlet_count = count;
outlet_smps = (range - loopstart);

Privacy

© 2024 Zrna Research