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

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

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

Os ficheiros de especificação de exercícios do Minuet contêm um objecto JSON de topo 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 objectos JSON das categorias contêm uma propriedade chamada children, que descreve as sub-categorias/exercícios que pertencem a essa categoria. Os objectos JSON dos exercícios contêm uma propriedade chamada options, que define as respostas possíveis para esse exercício. Na execução de cada exercício, o Minuet selecciona aleatoriamente uma resposta entre as possíveis e espera-se que o aluno carregue no botão de resposta que corresponde à resposta seleccionada.

Qualquer (sub-)categoria poderá definir um parâmetro root que define o intervalo do qual a nota inicial do intervalo/acorde/escala será escolhido aleatoriamente para todos os exercícios dessa categoria. Esse intervalo corresponde aos números-padrão das notas em MIDI e segue o formato <valor-mín>..<valor-máx>. O exemplo apresentado acima usa toda a gama de teclados como notas de base possíveis (21..104). O parâmetro playMode indica como as respostas possíveis deverão ser tocadas: como scale (escala - uma nota a seguir à outra) ou como chord (acorde - todas as notas em simultâneo).

Cada opção do exercício define um nome e a sequência de notas que deverá ser tocada a partir da nota de base seleccionada aleatoriamente na execução de cada exercício. Essa sequência de notas é definida como distâncias relativas à nota de base, descrevendo o intervalo que cada nota forma em conjunto com a nota de base. Por exemplo, para uma escala completa, a sequência de notas é "2 4 5 7 9 11 12", que define respectivamente a estrutura da escala "completa completa metade completa completa completa metade". O parâmetro sequenceFromRoot poderá conter um número qualquer de notas como tamanho. Da mesma forma, o motor do Minuet garante que só as respostas em que todas as notas que caibam da gama do teclado definida é que serão seleccionadas aleatoriamente.

Para oferecer uma melhor infra-estrutura para organizar um grande conjunto de ficheiros de especificação de exercícios, o motor do Minuet suportam o uso de diversos ficheiros de configuração, os quais são reunidos automaticamente para compor a hierarquia final de exercícios no menu de Navegação. Os exercícios são correctamente reunidos desde que os diferentes ficheiros de configuração usem o mesmo nome de (sub-)categoria ao definir os exercícios. Por agora, o Minuet não oferece nenhuma GUI para criar as definições de exercícios, pelo que terá de criar esses ficheiros JSON de forma manual. Os ficheiros de configuração de exercícios do Minuet poderão ser instalados a nível do sistema na pasta minuet/exercises/, localizada em qtpaths --path GenericDataLocation