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];