Capítulo 3. Creación de nuevos ejercicios de Minuet

Los ejercicios de Minuet se definen en archivos de especificación de ejercicios, escritos en 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 mayor",
                  "sequenceFromRoot": "2"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Los archivos de especificación de ejercicios de Minuet contienen un objeto JSON de nivel superior que incluye la tabla de ejercicios. Esta tabla define una estructura jerárquica de ejercicios, agrupados por categorías. Cada categoría o ejercicio posee un nombre. Los objetos JSON de categorías contienen una propiedad llamada children que describe las subcategorías o ejercicios que contiene dicha categoría. Los objetos JSON de ejercicios contienen una propiedad llamada options que define las posibles respuestas para dicho ejercicio. Cada vez que se ejecuta un ejercicio, Minuet selecciona al azar una respuesta entre las posibles y se espera que el estudiante pulse el botón de la respuesta que se corresponda con la respuesta seleccionada.

Cualquier (sub)categoría puede definir un parámetro root para indicar el intervalo del que se escogerá al azar la nota inicial del intervalo, acorde o escala para todos los ejercicios de dicha categoría. Este intervalo corresponde a los números de notas MIDI estándares y sigue el formato <valor-mín>..<valor-máx>. El ejemplo mostrado anteriormente usa todo el intervalo del teclado como posibles notas raíz (21..104). El parámetro playMode indica cómo se deben reproducir las posibles respuestas: como una escala (una nota tras otra) o como un acorde (todas las notas sonando simultáneamente).

Cada opción del ejercicio define un nombre y una secuencia de notas que se deben reproducir desde la nota raíz seleccionada al azar cada vez que se ejecuta el ejercicio. Dicha secuencia de notas se define como distancias relativas desde la nota raíz, describiendo el intervalo que forma cada nota en conjunción con la nota raíz. Por ejemplo, para una escala mayor, la secuencia de notas es «2 4 5 7 9 11 12», que representa respectivamente la estructura de la escala mayor «entera entera media entera entera entera media». El parámetro sequenceFromRoot puede contener notas de cualquier longitud. Además, el núcleo de Minuet se asegura de que solo se seleccionen al azar las respuestas cuyas notas caigan dentro del intervalo del teclado.

Para proporcionar una mejor infraestructura para organizar un gran conjunto de archivos de especificación de ejercicios, el núcleo de Minuet permite el uso de varios archivos de especificación, que se fusionan automáticamente para componer la jerarquía de ejercicios final que se muestra en el menú de navegación. Los ejercicios se fusionan correctamente siempre y cuando los distintos archivos de especificación usen el mismo nombre de (sub)categoría para definir los ejercicios. Hasta ahora, Minuet no proporciona ninguna GUI para crear especificaciones de ejercicios, por lo que usted deberá crear manualmente estos archivos JSON. Los archivos de especificación de ejercicios de Minuet se pueden instalar para todo el sistema o de forma local en la carpeta minuet/exercises/ situada en qtpaths --paths GenericDataLocation