Kapitel 3. Skapa nya övningar för Minuet

Övningar i Minuet är definierade i övningsspecifikationsfiler, skrivna med JSON-format:

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

Övningsspecifikationsfilerna i Minuet innehåller ett JSON-objekt på toppnivån, som innehåller fältet exercises. Ett sådant fält definierar en hierarkisk struktur av övningar, grupperade enligt kategorier. Varje kategori och övning har ett namn. JSON-objekt för kategorier innehåller en egenskap benämnd children, som beskriver delkategorierna eller övningarna som är förenade med en sådan kategori. JSON-objekt för övningar innehåller en egenskap benämnd options, som definiera möjliga svar för en sådan övning. Vid varje övningstillfälle, väljer Minuet slumpmässigt ett svar bland de möjliga, och eleven förväntas klicka på svarsknappen som motsvarar det valda svaret.

Alla (del)kategorier kan definiera parametern root för att ange omfång som grundtonen i intervallet, ackordet eller skalan kommer att väljas slumpmässigt från för alla övningar i kategorin. Sådana omfång motsvarar vanliga tonnummer i MIDI och har formatet <minvärde>..<maxvärde>. Exemplet som visas ovan använder hela klaviaturens omfång som möjliga grundtoner (21..104). Parametern playMode anger hur möjliga svar ska spelas upp: som en skala, scale (en ton i taget), eller som ett ackord, chord (alla toner ljuder samtidigt).

Alternativet för varje övning definierar ett namn och en tonföljd som ska spelas från grundtonen som väljes slumpmässigt vid varje övningstillfälle. En sådan tonföljd definieras som relativt avstånd från grundtonen, och beskriver intervallet som varje ton utgör i förhållande till grundtonen. Exempelvis för en durskala är tonföljden 2 4 5 7 9 11 12, vilket anger durskalans struktur hel hel halv hel hel hel halv. Parametern sequenceFromRoot kan innehålla vilka toner som helst i längd. Dessutom försäkrar kärnan i Minuet att bara svar vars toner befinner sig inom klaviaturens omfång väljes slumpmässigt.

För att skapa en bättre infrastruktur för att organisera en stor mängd övningsspecifikationsfiler, stöder kärnan i Minuet användning av flera specifikationsfiler, som automatiskt sammanfogas för att skapa den slutliga övningshierarkin som visas i Navigeringsmeny. Övningar sammanfogas på ett riktigt sätt, under förutsättning att olika specifikationsfiler använder samma (del)kategorinamn när övningar definieras. För närvarande erbjuder inte Minuet något grafiskt gränssnitt för att skapa övningsspecifikationer, och sådana JSON-filer måste alltså skapas för hand. Övningsspecifikationsfiler i Minuet kan installeras för hela systemet eller lokalt i katalogen minuet/exercises/ placerad i qtpaths --path GenericDataLocation.