fb 8 notes

visual feedback of table data for bidirectional midi-controllers (f.i. novation launchpad,livid base). 8 elements of a table are mapped to midi - notes.
Author: Robert Schirmer
License: BSD
Github: rbrt/old/fb 8 notes.axo

Inlets

int32 offset in the table

int32 velocity on modulation

bool32.rising redraw

Outlets

None

Parameters

int32.mini map the step to midi notes

int32.mini map the step to midi notes

int32.mini map the step to midi notes

int32.mini map the step to midi notes

int32.mini map the step to midi notes

int32.mini map the step to midi notes

int32.mini map the step to midi notes

int32.mini map the step to midi notes

int32 note velocity if step > 0

int32 note velocity if step <= 0

Attributes

objref table

combo device

spinner channel

Declaration
int ntrig;
int rtrig;
int prev;
int prevon;
int32_t val;

int32_t map[8];

int v;
int i;
int vt;
int trigt;
int prevt[8];
Init
{
  int i;
  for (i = 0; i < 8; i++)
    prevt[i] = -666;
}
Control Rate
map[0] = param_i0;
map[1] = param_i1;
map[2] = param_i2;
map[3] = param_i3;
map[4] = param_i4;
map[5] = param_i5;
map[6] = param_i6;
map[7] = param_i7;

// re-init

if ((inlet_redraw > 0) && !ntrig) {
  ntrig = 1;
  {
    int ii;
    for (ii = 0; ii < 8; ii++)
      prevt[ii] = -666;
  }
}
if (!(inlet_redraw > 0))
  ntrig = 0;

// display steps
{
  i += 1;
  if (i == 8)
    i = 0;
  vt = attr_table.array[__USAT((inlet_offset + i), attr_table.LENGTHPOW)]
       << attr_table.GAIN;
  if (prevt[i] != vt)
    trigt = 0;
  prevt[i] = vt;
  if (vt && (!trigt)) {
    MidiSend3((midi_device_t)attr_device, MIDI_NOTE_ON + (attr_channel - 1),
              map[i], param_on);
    trigt = 1;
  }
  if ((!vt) && (!trigt)) {
    MidiSend3((midi_device_t)attr_device, MIDI_NOTE_ON + (attr_channel - 1),
              map[i], param_off);
    trigt = 1;
  }
}

Privacy

© 2024 Zrna Research