uint8_t MDClass::trackGetCCPitch(uint8_t track, uint8_t cc, int8_t *offset) { tuning_t const *tuning = getModelTuning(kit.models[track]); if (tuning == NULL) return 128; uint8_t i; int8_t off = 0; for (i = 0; i < tuning->len; i++) { uint8_t ccStored = pgm_read_byte(&tuning->tuning[i]); off = ccStored - cc; if (ccStored >= cc) { if (offset != NULL) { *offset = off; } if (off <= tuning->offset) return i + tuning->base; else return 128; } } off = ABS(pgm_read_byte(&tuning->tuning[tuning->len - 1]) - cc); if (offset != NULL) *offset = off; if (off <= tuning->offset) return i + tuning->base; else return 128; }
uint8_t MDClass::trackGetBasePitch(uint8_t track) { tuning_t const *tuning = getModelTuning(kit.models[track]); if (tuning == NULL) return 128; return tuning->base; }
uint8_t MDClass::trackGetPitch(uint8_t track, uint8_t pitch) { tuning_t const *tuning = getModelTuning(kit.machines[track].model); if (tuning == NULL) return 128; uint8_t base = tuning->base; uint8_t len = tuning->len; if ((pitch < base) || (pitch >= (base + len))) { return 128; } return pgm_read_byte(&tuning->tuning[pitch - base]); }
bool MDClass::isMelodicTrack(uint8_t track) { if (isMidiTrack(track)) { return true; } return (getModelTuning(kit.models[track]) != NULL); }
bool MDClass::isMelodicTrack(uint8_t track) { return (getModelTuning(kit.machines[track].model) != NULL); }