Вправи 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