Para ello se han creado los arrays siguientes:
const int escalasNotas[5][13] = {
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, //Escala cromática
{0, 2, 3, 5, 7, 8, 10, 12, 0, 0, 0, 0, 0}, //Escala menor Natural
{0, 2, 4, 5, 7, 9, 11, 12, 0, 0, 0, 0, 0}, //Escala Mayor
{0, 2, 4, 6, 8, 10, 12, 0, 0, 0, 0, 0, 0}, //Escala de tonos
{0, 1, 3, 4, 6, 7, 9, 10, 12, 0, 0, 0, 0} //Escala Semitono-tono
};
const int nNotasEscalas[5] = {13, 8, 8, 7, 9};
La primera es una matriz con la altura en pitchClass de cada nota desde una referencia y el segundo es la cantidad de notas de cada escala.
Existe también una variable llamada escalaSeleccionada, que correspondera con el eje X de la matrix, para cambiar la escala a la que queremos cuantizar.
La nota la decidimos desde la lectura de los potenciómetros donde se mapea de 1018 a 30 como de 0 al numero de notas de la escala. De esta manera sabemos a que columna que tiene que ir a buscar a la matriz.
int notaEscala = constrain(map(analogRead(potesPin[i]), 1018, 30, 0, nNotasEscalas[escalaSeleccionada] - 1), 0, nNotasEscalas[escalaSeleccionada] - 1);
int val = escalasNotas[escalaSeleccionada][notaEscala];