Capítol 3. Crear exercicis nous del Minuet

Els exercicis del Minuet es defineixen en fitxers d'especificació dels exercicis, escrits en el format JSON:

{
  "exercises": [
    {
      "name": "Intervals",
      "root": "21..104",
      "playMode": "scale",
      "children": [
        {
          "name": "Ascending Melodic Intervals",
          "children": [
            {
              "name": "Seconds",
              "options": [
                {
                  "name": "Minor Second",
                  "sequenceFromRoot": "1"
                },
                {
                  "name": "Major Second",
                  "sequenceFromRoot": "2"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Els fitxers d'especificació dels exercicis del Minuet contenen un objecte JSON de nivell superior que ofereix la matriu dels exercicis. Aquesta matriu defineix una estructura jeràrquica per als exercicis, agrupats per categories. Cada categoria/exercici té un nom. Els objectes JSON de la categoria contenen una propietat anomenada children (filla), que descriu les subcategories/exercicis que conté aquesta categoria. Els objectes JSON de l'exercici contenen una propietat anomenada options (opcions), la qual defineix les possibles respostes per a aquest exercici. En cada execució dels exercicis, el Minuet selecciona aleatòriament una resposta entre totes les possibles, i s'espera que l'alumne faci clic al botó de la resposta que correspongui amb la resposta seleccionada.

Qualsevol sub/categoria pot definir un paràmetre root (base) que defineix l'interval des del qual la nota inicial de l'interval/acord/escala serà escollit aleatòriament per a tots els exercicis en aquesta categoria. Aquest interval es correspon amb els estàndards números de nota MIDI i segueix el format <valor_mín>..<valor_màx>. L'exemple presentat anteriorment utilitza tot l'interval del teclat com a possibles notes base (21..104). El paràmetre playMode indica com s'han de reproduir les possibles respostes: com una scale (-escala- una nota després de l'altra) o com una chord (-acord- totes les notes sonant simultàniament).

Cada opció de l'exercici defineix un nom i la seqüència de notes que s'han de reproduir a partir de la nota base seleccionada aleatòriament en cada exercici executat. Aquesta seqüència de notes es defineix com a distàncies relatives a partir de la nota base, descrivint l'interval que cada nota forma en conjunció amb la nota base. Per exemple, per a una escala major, la seqüència de notes és «2 4 5 7 9 11 12», el qual denota respectivament un estructura de l'escala major «completa completa mitja completa completa completa mitja». El paràmetre sequenceFromRoot pot contenir qualsevol nombre de notes en longitud. També, el nucli del Minuet garanteix que només les respostes en què totes les notes es troben dins de l'interval del teclat són seleccionades aleatòriament.

Per a proporcionar una millor infraestructura per a l'organització d'un gran conjunt de fitxers d'especificació dels exercicis, el nucli del Minuet utilitza diversos fitxers d'especificació, els quals es fusionen de forma automàtica per a compondre la jerarquia final de l'exercici presentada al menú de navegació. Els exercicis es fusionen correctament, ja que els diferents fitxers d'especificació utilitzen el mateix nom de la sub/categoria en la definició dels exercicis. Per ara, el Minuet no proporciona cap IGU per a la creació d'especificacions dels exercicis, de manera que haureu de crear manualment aquests fitxers JSON. Els fitxers d'especificació dels exercicis del Minuet es poden instal·lar a tot el sistema o localment a la carpeta minuet/exercises/ ubicat a qtpaths --paths GenericDataLocation.