Hoofdstuk 3. Nieuwe oefeningen voor Minuet aanmaken

Oefeningen voor Minuet worden gedefinieerd in oefeningspecificatiebestanden, geschreven in het JSON-formaat:

{
  "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"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

De oefeningspecificatiebestanden van Minuet bevatten één JSON object op het hoogste niveau aangevend het array oefeningen. Zo'n array definieert een hiërarchische structuur met oefeningen, gegroepeerd op categorieën. Elke categorie/oefening heeft een naam. De categorie JSON objecten bevat een eigenschap genaamd kinderen, die de subcategorieën/oefeningen beschrijven behorende bij zo'n categorie. De JSON objecten oefening bevatten een eigenschap genaamd opties, die de mogelijke antwoorden voor zo'n oefening definieert. In elke uitvoering van een oefening selecteert Minuet willekeurig één antwoord uit de mogelijke antwoorden en van de student wordt verwacht om op de knop van het overeenkomstig geselecteerde antwoord te klikken.

Elke (sub)categorie kan een parameter begin definiëren om de reeks te specificeren vanwaar de initiële noot van het interval/het akkoord/de toonladder willekeurig zal worden gekozen voor alle oefeningen in deze categorie. Zulke reeksen corresponderen met de standaard nootnummers van MIDI en volgen het formaat <min-waarde>..<max-waarde>. Het bovenstaande voorbeeld presenteert gebruik van alle klavierreeksen als mogelijke beginnoten (21..104). De parameter playMode geeft aan hoe mogelijke antwoorden gespeeld zouden moeten worden: als een toonladder (één noot na de ander) of als een akkoord (alle noten klinken tegelijkertijd).

Elke optie in een oefening definieert een naam en de volgorde van noten die gespeeld zouden moeten worden vanaf de beginnoot willekeurig geselecteerd in elke uitvoering van de oefening. Zo'n volgorde van noten is gedefinieerd als relatieve afstanden vanaf de beginnoot, met een beschrijving van het interval dat elke noot vormt in verband met de beginnoot. Voor een majeur toonladder is bijvoorbeeld de volgorde van noten 2 4 5 7 9 11 12, die respectievelijk aangeeft de majeur toonladderstructuur heel heel half heel heel heel half. De parameter sequenceFromRoot kan elke lengte van noten bevatten. De kern van Minuet verzekert dat alleen antwoorden waarvan alle noten liggen binnen de reeks van het klavier willekeurig worden geselecteerd.

Om een betere infrastructuur voor het organiseren van een grote set specificatiebestanden van oefeningen te bieden, ondersteunt de kern van Minuet het gebruik van verschillende specificatiebestanden, die automatisch samengevoegd worden om de uiteindelijke hiërarchie van oefeningen te presenteren in het Navigatiemenu. Oefeningen zijn juist samengevoegd zolang de verschillende specificatiebestanden dezelfde (sub)categorienaam gebruiken bij het definiëren van oefeningen. Voor nu biedt Minuet geen GUI voor het maken van specificaties van oefeningen zodat u handmatig zulke JSON-bestanden moet maken. De specificatiebestanden van Minuet kunnen systeembreed geïnstalleerd worden of lokaal in de map minuet/exercises/ in qtpaths --paths GenericDataLocation.