Треки
/
Python
Python
/
Вправи
/
Генератор гами
Генератор гами

Генератор гами

Середня

Вказівки

Хроматичні гами

Гами в західній музиці ґрунтуються на хроматичній (12-нотній) гамі. Цю гаму можна записати як такий набір звуків:

A, A♯, B, C, C♯, D, D♯, E, F, F♯, G, G♯

Ноту з дієзом (позначеним знаком ♯) можна також записати як бемоль ноти, що стоїть вище за неї (позначений знаком ♭), тож хроматичну гаму можна записати й так:

A, B♭, B, C, D♭, D, E♭, E, F, G♭, G, A♭

Мажорна і мінорна гами та лади є підмножинами цього набору з дванадцяти звуків. Вони містять сім звуків і називаються діатонічними гамами. Набір нот у цих гамах записують або з дієзами, або з бемолями, залежно від тоніки (початкової ноти). Ось таблиця, яка показує, чи використовувати для заданої тоніки бемольний, чи дієзний запис гами:

Ключові знаки Мажор Мінор
Натуральні C a
Дієзні G, D, A, E, B, F♯ e, b, f♯, c♯, g♯, d♯
Бемольні F, B♭, E♭, A♭, D♭, G♭ d, g, c, f, b♭, e♭

Зауважмо, що за загальноприйнятою конвенцією теорії музики натуральні ноти «C» і «a» під час висхідного руху записуються з дієзами, а під час низхідного - з бемолями. У межах цієї вправи гама буває лише висхідною.

Завдання

Маючи тоніку, згенеруймо 12-нотну хроматичну гаму, яка починається з цієї тоніки.

  • Зсуньмо базову гаму так, щоб усі 12 нот поверталися, починаючи із заданої тоніки.
  • Для заданої тоніки визначмо, чи повертати гаму з бемолями, чи з дієзами.
  • Повернімо всі ноти великими літерами (крім b для бемолів), незалежно від регістру заданої тоніки.

Діатонічні гами

Діатонічні гами та всі інші гами, що походять від хроматичної, будуються на інтервалах. Інтервал - це відстань між двома звуками.

Найпростіший інтервал - між двома сусідніми нотами, його називають «півтоном» або «малою секундою» (іноді записують малою літерою «m»). Інтервал між двома нотами, що мають між собою ще одну ноту, називають «цілим тоном» або «великою секундою» (записують великою літерою «M»). Діатонічні гами будуються, використовуючи лише ці два інтервали між сусідніми нотами.

Недіатонічні гами можуть містити інші інтервали. Інтервал «збільшена секунда», що позначається «A», має дві ноти між собою (наприклад, від A до C або від D♭ до E), тобто «цілий тон» плюс «півтон». Існують також менші й більші інтервали, але в цій вправі вони не використовуються.

Завдання

Маючи тоніку та набір інтервалів, згенеруймо музичну гаму, що починається з тоніки й відповідає заданій послідовності інтервалів.

Це схоже на побудову хроматичних гам, але замість 12 нот ми повертаємо N+1 нот для N інтервалів. Перша нота - завжди задана тоніка. Далі для кожного інтервалу в послідовності наступну ноту визначають, починаючи від попередньої ноти й пропускаючи стільки нот, скільки вказує інтервал.

Наприклад, якщо почати з G і використати сім інтервалів MMmMMMm, отримаємо такі вісім нот:

Нота Пояснення
G Тоніка
A M вказує на цілий тон від G, пропускаючи G♯
B M вказує на цілий тон від A, пропускаючи A♯
C m вказує на півтон від B, нічого не пропускаючи
D M вказує на цілий тон від C, пропускаючи C♯
E M вказує на цілий тон від D, пропускаючи D♯
F♯ M вказує на цілий тон від E, пропускаючи F
G m вказує на півтон від F♯, нічого не пропускаючи
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Python Exercism

Час розпочати Генератор гами?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.