RKKeyBuf -generic keyboard buffer
Contents
The RKKeyBuf class can be used to create keyboard buffers. Example used in the ‘Realtime note transpose’ DUY
#include "RKKeyBuf.h" // hold up to 16 notes RKKeyBuf keybuffer(16); // handle note on boolean RK002_onNoteOn(byte channel, byte key, byte velocity) { // set new note offset: note_offset = key - RK002_paramGet(BASEKEY); // retrigger @ transpose? if (RK002_paramGet(RETRIGGER)) { for (int i=0; i<keybuffer.size(); i++) { RKKeyBufEntry *entry = keybuffer[i]; // 'userval' contains transposed key: RK002_sendNoteOff(trans_chn, entry->userval, 64); // update 'userval' (=transposed key) entry->userval = clamp(entry->key + note_offset); // new 'userval' contains updated transposed key: RK002_sendNoteOn(trans_chn, entry->userval, entry->vel); } } // compute transposed_key: byte transposed_key = (key + note_offset); // (try to) store in keybuffer, store transposed_key as 'userval' if (keybuffer.insert(key,velocity,transposed_key)) { RK002_sendNoteOn(trans_chn, transposed_key, velocity); } return false; // block original key } // // handle note off // boolean RK002_onNoteOff(byte channel, byte key, byte velocity) { // (try to) find inside keybuffer: RKKeyBufEntry *entry = keybuffer.findByKey(key); if (entry) { // 'userval' contains the transposed_key number RK002_sendNoteOff(trans_chn, entry->userval, 64); // remove from keybuffer keybuffer.remove(key); } return false; // block original key }