loop_master

records audio to a table.after recording is done,the tempo if the recording in hz is sent out, as well as the length of the recording (in fraction of the table's size)
Author: Robert Schirmer
License: who cares
Github: rbrt/old/loop_master.axo

Inlets

frac32buffer audio in

bool32.risingfalling record,set tempo

Outlets

frac32 tempo in hz

frac32.positive length of recording in fraction of the table

Attributes

objref table

Declaration
bool rec;
int recpos;
int shift;
Init
recpos = 0;
rec = 0;

// 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
if ((inlet_rec) && !rec) {
  rec = 1;
  recpos = 0;
} else if (!(inlet_rec)) {
  rec = 0;
  outlet_range = (recpos << shift);
  if (recpos) {
    outlet_freq = (int)(281474976710656.f / (recpos * (128 << 3)));
    outlet_range = (recpos << shift);
  } else
    outlet_freq = 0;
}

// record
if (rec) {
  recpos++;
  attr_table.array[recpos] = __SSAT(inlet_wave, 28) >> attr_table.GAIN;
}

Privacy

© 2024 Zrna Research