Capitolo 3. Creare nuovi esercizi di Minuet

Gli esercizi di Minuet sono definiti in file delle specifiche degli esercizi, scritti in formato JSON:

{
  "exercises": [
    {
      "name": "Intervalli",
      "root": "21..104",
      "playMode": "scala",
      "children": [
        {
          "name": "Intervalli melodici ascendenti",
          "children": [
            {
              "name": "Seconde",
              "options": [
                {
                  "name": "Seconda minore",
                  "sequenceFromRoot": "1"
                },
                {
                  "name": "Seconda maggiore",
                  "sequenceFromRoot": "2"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

I file di specifica degli esercizi di Minuet contengono un oggetto JSON di primo livello che fornisce il vettore degli esercizi. Questo vettore definisce una struttura gerarchica di esercizi, raggruppati per categorie. Ogni categoria/esercizio ha un nome. Gli oggetti JSON delle categorie contengono una proprietà con nome children, che descrive le sottocategorie/esercizi contenuti in tale categoria. Gli oggetti JSON degli esercizi contengono una proprietà con nome options, che definisce le possibili risposte per un esercizio. In ogni esecuzione dell'esercizio, Minuet seleziona in modo casuale una risposta tra le possibili e lo studente deve fare clic sul pulsante della risposta che corrisponde alla risposta selezionata.

Ogni (sotto)categoria dovrebbe definire un parametro root per specificare l'intervallo dal quale sarà scelta casualmente la prima nota dell'intervallo/accordo/scala per tutti gli esercizi in questa categoria. Tale intervallo corrisponde ai numeri standard delle note MIDI e segue il formato <min-value>..<max-value>. L'esempio presentato sopra utilizza tutto l'intervallo della tastiera come possibili note radice (21..104). Il parametro playMode indica come dovrebbero essere riprodotte le risposte possibili: come una scala (una nota dopo l'altra) o come accordo (tutte le note suonano contemporaneamente).

Ogni opzione dell'esercizio definisce un nome e la sequenza di note che dovrebbe essere riprodotta dalla nota radice selezionata casualmente in ogni esecuzione dell'esercizio. Tale sequenza di note è definita con distanze relative dalla nota radice, che descrive l'intervallo che ogni nota forma in congiunzione con la nota radice. Ad esempio, per una scala maggiore, la sequenza di note è «2 4 5 7 9 11 12», che indica rispettivamente la struttura della scala maggiore «intero intero metà intero intero intero metà». Il parametro sequenceFromRoot potrebbe contenere qualsiasi nota in durata. Inoltre, il nucleo di Minuet assicura che siano selezionate casualmente solo le risposte in cui tutte le note si trovino nell'intervallo della tastiera.

Per fornire un'infrastruttura migliore per organizzare un vasto insieme di file di specifica degli esercizi, il nucleo di Minuet supporta l'utilizzo di numerosi file di specifica, che sono uniti automaticamente per comporre la gerarchia finale dell'esercizio presentata nel menu di navigazione. Gli esercizi sono uniti correttamente fintanto che file di specifica diversi utilizzano lo stesso nome di (sotto)categoria quando si definiscono gli esercizi. Per ora, Minuet non fornisce una GUI per creare specifiche di esercizi, per cui è necessario creare manualmente i file JSON. I file di specifica degli esercizi di Minuet possono essere installati a livello di sistema o localmente nella cartella minuet/exercises/ posizionata in qtpaths --path GenericDataLocation