Розділ 3. Створення нових вправ Minuet

Вправи Minuet визначаються у файлах специфікацій вправ, записаних у форматі JSON:

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

У файлах специфікації вправ Minuet має міститися один об’єкт найвищого рівня JSON, що міститиме масив exercises. Цей масив визначає ієрархічну структуру вправ, згруповану за категоріями. Кожна категорія або вправа має свою назву. Об’єкти категорій JSON мають містити властивість із назвою children, яка описуватиме підкатегорії або вправи, що містяться у категорії. Об’єкти вправ JSON мають містити властивість із назвою options, яка визначає можливі відповіді у вправі. Під час кожного виконання вправи Minuet вибирає серед можливих відповідей одну випадковим чином. Учень має натиснути кнопку вибраної програмою відповіді.

У кожній (під)категорії може визначатися параметр root, який вказує діапазон початкової ноти інтервалу, акорду або гами, з якого буде вибрано випадковим чином вибрано цю ноту для усіх вправ у категорії. Такий діапазон відповідає стандартним номерам нот MIDI і визначається у форматі <мінімальне значення>..<максимальне значення>. У наведеному вище прикладі використано увесь діапазон клавіш для основних нот (21..104). Параметр playMode вказує на спосіб відтворення можливих відповідей: як scale (гама, ноти одна за одною) або як chord (акорд, усі ноти одночасно).

Кожен із варіантів у вправі визначає назву і послідовність нот, які слід відтворити на основі основної ноти, яку програма вибирає випадковим чином на початку вправи. Така послідовність нот визначається як відносна відстань від основної ноти і описує інтервал, який кожна нота формує у поєднанні із основною нотою. Наприклад, для основної гами послідовність нот така: «2 4 5 7 9 11 12», що відповідно позначає структуру основної гами «ціла ціла половинна ціла ціла ціла половинна. Параметр sequenceFromRoot може містити дані щодо тривалості кожної з нот. Крім того, у ядрі обробки даних Minuet передбачено, що буде показано лише відповіді, усі ноти яких лежать у межах клавіатури.

Для забезпечення кращої інфраструктури для упорядковування великого набору файлів специфікацій вправ у ядрі обробки даних Minuet передбачено використання декількох файлів специфікацій, які автоматично об’єднуються для створення остаточної ієрархії вправ, які буде показано у меню навігації. Вправи буде об’єднано належним чином, якщо у файлах специфікацій використано під час визначення вправ однакові назви категорій або підкатегорій. У поточній версії Minuet не передбачено графічного інтерфейсу для створення специфікацій вправ, отже файли JSON вам доведеться створювати у сторонньому текстовому редакторі. Файли специфікацій вправ Minuet можна встановити на загальносистемному рівні до каталогу minuet/exercises/ або на локальному рівня (для окремого користувача) до підкаталогу minuet/exercises/ у каталозі, що визначається командою qtpaths --paths GenericDataLocation.