Capítulo 3. Criando novos exercícios do Minuet

Os exercícios do Minuet são definidos em arquivos de especificação, escritos no formato JSON:

{
  "exercises": [
    {
      "name": "Intervalos",
      "root": "21..104",
      "playMode": "scale",
      "children": [
        {
          "name": "Intervalos Melódicos Ascendentes",
          "children": [
            {
              "name": "Segundas",
              "options": [
                {
                  "name": "Segunda Menor",
                  "sequenceFromRoot": "1"
                },
                {
                  "name": "Segunda Maior",
                  "sequenceFromRoot": "2"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Os arquivos de especificação de exercícios do Minuet contêm um objeto JSON raiz, que contém a lista exercises. Essa lista descreve uma estrutura hierárquica de exercícios, agrupada por categorias. Cada categoria/exercício tem um nome. Os objetos JSON das categorias contêm uma propriedade chamada children, que descreve as subcategorias/exercícios que pertencem a essa categoria. Os objetos JSON dos exercícios contêm uma propriedade chamada options, que define as possíveis respostas para este exercício. Na execução de cada exercício, o Minuet seleciona aleatoriamente uma resposta dentre as possíveis e aguarda o aluno clicar no botão de resposta que corresponde à resposta selecionada.

Qualquer (sub)categoria pode definir um parâmetro root, que define o intervalo a partir do qual a nota inicial do intervalo/acorde/escala será escolhido aleatoriamente para todos os exercícios desta categoria. Esse intervalo corresponde aos números das notas no padrão MIDI e segue o formato <valor-mín>..<valor-máx>. O exemplo apresentado acima usa toda a faixa do teclado como notas fundamentais possíveis (21..104). O parâmetro playMode indica como as possíveis respostas deverão ser tocadas: como scale (escala - uma nota após a outra) ou como chord (acorde - todas as notas tocadas simultaneamente).

Cada opção do exercício define um nome e a sequência de notas que deverá ser reproduzida a partir da nota fundamental selecionada aleatoriamente na execução de cada exercício. Essa sequência de notas é definida como distâncias relativas à nota fundamental, descrevendo o intervalo que cada nota forma com a nota fundamental. Por exemplo, para uma escala maior, a sequência de notas é 2 4 5 7 9 11 12, que define respectivamente a estrutura característica da escala maior tom tom semitom tom tom tom semitom. O parâmetro sequenceFromRoot pode conter qualquer número de notas. Da mesma forma, o núcleo do Minuet garante que apenas as respostas em que todas as notas que estiverem dentro da faixa do teclado sejam selecionadas aleatoriamente.

Para oferecer uma melhor infraestrutura na organização de um grande conjunto de arquivos de especificação de exercícios, o núcleo do Minuet suporta o uso de diversos arquivos de especificação, os quais são combinados automaticamente para compor a hierarquia final de exercícios do menu de Navegação. Os exercícios são corretamente combinados desde que os diferentes arquivos de especificação usem o mesmo nome de (sub)categoria ao definir os exercícios. Por enquanto, o Minuet não oferece nenhuma interface gráfica para criar as especificações de exercícios, sendo necessário criar manualmente estes arquivos JSON. Os arquivos de especificação de exercícios do Minuet podem ser instalados globalmente no sistema ou localmente, na pasta minuet/exercises/ localizada no qtpaths --paths GenericDataLocation