Программное определение тональности • Stereo.ru
Вопрос Maksat 21

Программное определение тональности

Здравствуйте! Пишу программу, адаптирующую игру на пианино под клавиатуру ПК. Программа питается MIDI - файлами. Она переводит их в собственную нотацию, похожую на стандартную музыкальную. Вот пример

Как видно из примера, есть всего четыре линии. Туда помещаются всего семь нот. Октава ноты помечается ее цветом. Плюс такой нотации в том, что для клавиатуры ПК не надо привязывать все 88 нот. Только по 7 (плюс 1 динамическая если аккорд) для каждой руки. Пользователь нажимает на клавишу закрепленную под одну ноту, а машина определяет по контексту произведения октаву, и проигрывает нужный звук.

У меня нету музыкального образования и до вчерашнего дня не знал про тональности) Пришлось узнать, но до этого, потратил пару дней на решение задачи по коллизии черных и белых клавиш.

Конкретнее: в некоторых произведениях поочередно нажимаются стоящие рядом белые и черные клавиши. В программе, я все черные клавиши помечал как диезные. Поэтому, иногда черные клавиши становились в один ряд с белыми(которые ниже на пол тона), а иногда нет.


Это меня не устраивало, нужно было определять, когда их делать бемольными, а когда оставлять диезными. Эту задачу пытался решить в лоб. Получился запутанный и тяжелый алгоритм, похожий на "костыли". Решил один день потратить на изучение сольфеджио и не зря. Оказывается не надо городить никаких костылей, все давно заложено в теории музыки. В стандарте MIDI нашел мета-событие Key Signature она указывает на тональность. И зная эту тональность можно легко выстроить по нужным знакам. НО, не во всех МИДИ-файлах есть это мета-событие. И у меня на этот счет появились несколько предположений, прошу Вас подтвердить или подсказать как правильней.

1. Если знать только знаки при ключе(диез/бемоль), не зная тональности. Можно ли предполагать что любая встреченная черная клавиша имеет этот знак, не считая некоторых локальных исключительных случаев?

2. Развитие первого вопроса. Если, например, в произведении встречаются много до и до# или ля ля#, можно ли сказать что знаки при ключе бемольные? А если , к примеру ре и ре бемоль то знаки при ключе диезные?

Ответы

Tess

Ваше занятие восхищает.

Как и то, что вы дерзаете самомстоятельно изучать сольфеджио.

1.

а) В ключе может быть от 0 до 7 знаков. (Бемолей/диезов)

б) зная кол-во знаков= автоматом знаешь тональность. (Если надо-могу подсказать, как легко высчитать)

в) если в ключе фа#до#соль#

то все ноты (фа до соль) следует поднимать #, если нет локального знака, действующего только на протяжении одного такта.


2. Нет, это не так.

Если будут вопросы спрашвайте, подскажу.

Maksat @Tess

Спасибо!

Если рядом с ключом мы видим знак (пусть до#), то при игре с нот, любое встреченное до будет означать черную клавишу на пол тона выше до, верно? Отсюда можно заключить, что настоящее до практически не используется(за исключением отменяющего знака в такте). Значит, если, к примеру, из двух соседок до#, до не встречается в произведении, ре встретилась 10 раз, а сама до# встретилась 50 раз можно логически сделать вывод - в линейку до при ключе поставят #. потому что она свободна, и не будет мешать нотам ре. В квинтовом круге я заметил, что знаки не смешиваются, т.е нету такого что при ключе есть и диез и бемоль. Только диезы, только бемоли либо ничего (тогда это до мажор или ля минор, но эти случаи не интересны). Значит, если придерживаться предыдущего вывода и последнего замечания можно сказать что любая встреченная черная клавиша должна быть записана в нотоносец как диез а не бемоль. Это я так пытаюсь построить очередной костыльный алгоритм))

"зная кол-во знаков= автоматом знаешь тональность". В том то и проблема что знаки при ключе в некоторых миди-файлах не указываются. И приходится вот так вот гадать)

По последней ноте произведения можно, вроде, вычислить тонику, но как быть с ладом? Компьютер не умеет слушать музыку и определять, грустная ли она или веселая))) да и то, некоторые произведения вводят в заблуждение.

На последнем изображении саундтрек из фильма "реквием по мечте". Там тональность си-бемоль мажор, верно? но заканчивается музыка отнюдь не си бемолью

Tess @Maksat
Если рядом с ключом мы видим знак (пусть до#), то при игре с нот, любое встреченное до будет означать черную клавишу на пол тона выше до, верно?

Да

до# встретилась 50 раз можно логически сделать вывод -в линейку до при ключе поставят #. потому что она свободна, и не будет мешать нотам ре.

Нет (подробнее могу обьяснить)

Значит, если придерживаться предыдущего вывода и последнего замечания можно сказать что любая встреченная черная клавиша должна быть записана в нотоносец как диез а не бемоль.

Нет (подробнее могу обьяснить)

По последней ноте произведения можно, вроде, вычислить тонику, но как быть с ладом?

Лад вычисляется по ТЕРЦИИ от тоники вверх до третьей ноты лада ( 3. ступени).

Если тоническая терция большая (расстояние 2 тона)- то это мажор (ваш второй пример си-бемоль -> ре)

Если тоническая терция малая (расстояние 1,5 тона)- то это минор (ваш первый пример ля->до)

На последнем изображении саундтрек из фильма "реквием по мечте". Там тональность си-бемоль мажор, верно? но заканчивается музыка отнюдь не си бемолью

потому, что это отрывок оборванный на середине предложения.

Во втором примере я слышу соль-минор (параллельная тон-сть си-бемоль мажор)

В том то и проблема что знаки при ключе в некоторых миди-файлах не указываются. И приходится вот так вот гадать)

очень часто midi нотируют тупо по до-мажору, только повышая диезами нужные ноты.

Машине так просто легче, человеку нет.

то есть: звучащий ми-бемоль минор

(миb фа сольb ляb сиb доb реb )

нотируется по до мажору с диезами

(ре# фа фа# соль# ля# си до#)



П.С.

Если рядом с ключом мы видим знак (пусть до#),

такого не будет, если стоит ОДИН диез в ключе, то это будет ФА, если ДВА диеза в ключе то это будут Фа и До


Maksat @Tess

Спасибо!

А начинается произведение пусть и не обязательно с тоники, но обязательно с устойчивой I, III или V ступени лада?

Maksat @Maksat

Постойте) я тут заметил, что при количестве знаков более 5-ти, уже белые клавиши смещаются. например при фа# мажоре ми#, а энгармонического эквивалента с меньшими знаками у него нету, только соль бемоль мажор но тогда уже до бемоль будет. Теперь окончательно запутался) я был слишком оптимистичен, когда пытался программно определить тональность без должных знаний) теперь кажется, что это невозможно

Tess @Maksat

у меня есть мысль, как аппаратно определить тональность:

Задайте машине критерии анализа

1. Наиболее часто встречающиеся конкретные интервалы в мелодии, тут интересна нота , приходящая на сильное время в такте.

а)Чистая квинта вниз/вверх ( 7 полутонов)

а)Чистая кварта вверх (5 полутонов)

Допустим, проанализировав, машина выдаст:

80% ля->ре/ ре->ля с сильной долей на Ре.

Итог: тогика-> ре

2. Наиболее частое использвание тонической терции (в данном случае, когда узнали тонику-просто все Фа или Фа#)

а)Ре- Фа (1,5 тона)

б) Ре-Фа# (2,0 тона)

а) минорный лад

б) мажорный

3. Из таблицы выставляются ключевые знаки либо ре-мажор, либо ре-минор(фа-мажор) и по ним нотируется в соответствии с правилами альтерации.

ВСЁ!

Это возможно?

Tess @Maksat
А начинается произведение пусть и не обязательно с тоники, но обязательно с устойчивой I, III или V ступени лада?

Нет , не обязательно

Maksat
Это возможно?

да, вполне) я этот рецепт и пытался найти) Только надо уточнить детали.

нота , приходящая на сильное время в такте.

Вы про сильную долю, что в начале такта? если так то да ее можно отфильтровать. Но на файлах, сыгранных в живую, которые не ровняли по тактам уже, думаю, нельзя найти не зная размерности. Можно ли в этом случае полагаться на динамику(силу нажатия)?


Как быть с одновременными нажатиями(аккорды кажется) они считаются как один шаг в интервале? тогда какую ноту в аккорде брать учет? центральную?

Tess @Maksat
с одновременными нажатиями(аккорды) они считаются как один шаг в интервале? тогда какую ноту в аккорде брать учет? центральную?

Нет.

В аккордах можно проследить следующюю закономерность отпределения основного звука тональности, (можно добавить критерий в алгоритм определения):


Если на слабое время такта приходится звучание мажорного аккорда и звуки этого аккорда можно отнести к ступеням 5 7 2 предполагаемой главной тональности и после этого аккорда следует аккорд на сильное время такта , звуки которого можно отнести с тупеням 1 3 5, то предположение тональности ВЕРНО и предполагаемая тональность и будет одноименная с предполагаемой ступенью 1.

Запутанно или понятно?

Пример:

Кварта в мелодии предполагает тонику, скажем, Ля.

Ищем 5 7 2-> ми соль# си

С последующим разрешением 1 3 5-> ля до ми.

если находим, предположение «Ля» верно.

Считаем полутона между 1 3-> ля до =1,5 тона-> терция малая-> минор

_______ ля минор= 0 знаков в ключе.

Maksat @Tess

Кажется понял. Сейчас попробую.

Я посчитал все моменты взятия каждой ноты, сыгранной правой рукой. Проверил на двух фалах

Первый файл выдал такие результаты:

Второй файл :

если я правильно определил тональность, то кажется, что тоника сама в глаза бросается))

Tess @Tess

1 соль-минор

2 соль#- минор

Я определяю на слух по нотам из ваших примеров, постараюсь поискать машинные критерии характеристик тональностей.

Компуктерный анализ указал на частоту нот и вы вышли на праллельные мажоры, значит нужно ещё добавить «правил»

Maksat @Tess

Спасибо! Странно получилось, если взять тональность по мажору с теми же знаками, то тоника встречается намного чаще остальных. Или это просто совпадение?

Tess @Tess


Или это просто совпадение?

Совпадение? Не думаю:-))))

В первом примере кварт много с сильным временем на ноте «соль», во втором ни одной кварты в мелодии нет...

Будем искать объективные критерии для машины.



Maksat @Tess

Кажется что все же совпадение) потому что в других файлах, бывает не сходится

Могу программку быстро программку на винду сделать для подсчета.

Tess @Tess

тоже не особо продвигает в поиске....

Тональность мозгом определяется посредством

а) тяготений

б) функций гармонии

из главного аккорда (тональности) никуда не хочется уйти, он стабилен и не требует продолжения (дальнейшего разрешения), а вот как это правилом машине записать- ума не приложу.


Даже если произведение заканчивается на аккорде пятой или шестой ступени, мысленно можно разрешить в первое, там остаётся некоторое напряжение и неразрешённость гармонии

Maksat @Tess

Большое Спасибо Вам за уделенное время! Значит не буду пытаться определить тональность в файлах не содержащих информацию о ней. Буду действовать локально. В тех тактах, где черные и белые клавиши ложатся в одну линию, у черных буду менять знаки и они лягут в соседнюю

Только авторизованные пользователи могут отвечать на вопросы, пожалуйста, войдите или зарегистрируйтесь.