[ ... изо всех сил пытаюсь дать этому лучше название ]
Я разрабатываю алгоритмические основы для генерации тональной сети (tonnetz) в рамках подготовки к программированию уровня представления.
Проблема в первую очередь связана с тональностью тональности (тональность Db или Gb), но она также распространяется и на отображение степеней (I, II, III и т. д.).
По сути, по мере того, как спектр тональной сетки расширяется от его произвольного тонического центра, обозначения смещаются в бемоли, затем в двойные бемоли, затем в тройные. Или (как и в случае с текущим состоянием моих алгоритмов электронных таблиц) я вижу такие вещи, как B#, отображаемые как C, или шкала становится такой: DE Gb GAB Db D (особое беспокойство вызывают ключи Db или Gb... ).
Я мог бы выбрать наиболее правильную нотацию из хеш-таблицы, но мне все равно нужно знать, когда нужно перейти к другому ключу. Если я буду следовать правилам пятого круга, добавляя бемоли и диезы по мере того, как они расходятся от «до». Но есть проблема начать с Gb Major, где в Co5 мы находим его в зоне энгармонического фазового перехода (в нижней части Co5).
Я знаю, что выбор центра произволен, но, следуя прямолинейному кругу квинт в тональной сети, когда наиболее подходящий момент для начала смещения тональности?
видеть:
https://docs.google.com/spreadsheets/d/1AL18KVDIsJvRTpW567dVlJRfrORWA9k_sh6rBYqu5lc
(Я могу настроить алгоритм таким образом, чтобы он смещался на диезы по положительной оси Y и на бемоли в нижнем квадранте, но ключевые подписи по-прежнему будут плавать, особенно с размещением прилагательных bb или ##)
[ред.]
Другой сценарий уровня представления:
Я не уверен на 100%, каковы ваши цели, так как я вижу конфликт между использованием тональной сетки, которая просто расходится во всех направлениях со все большим и большим количеством диезов/бемолей, и вашей целью ограничить/манипулировать количеством диезов и бемолей. . В традиционной музыке ключевые подписи (обычно) выбираются так, чтобы избежать двойных бемолей/диезов и использования хроматических нот, которые энгармоничны с естественными нотами (например, E # или F ♭), поэтому я просто установил базу правил для замените эти ключи их энгармоническими эквивалентами.
Однако, поскольку вы используете сеть тонов, я должен предположить, что вы хотите сделать что-то, способное представить некоторые аспекты сети тонов без простого переназначения энгармонических нот. Может быть, вам нужно что-то, где нота F встречается как 3-я тональность D ♭ мажор, а нота E # появляется как 3-я тональность C # мажор. Поскольку я не могу сказать, как далеко вы собираетесь уйти от выбранного корня, я начну с некоторых общих соображений, а затем сужу их до определенного набора требований, которые, надеюсь, уместны.
Общий
Во- первых, представьте интервалы в явном виде (major-3rd, perfect-5th)
парами, т. е. большая терция — (1,0)
это чистая кварта (0,-1)
, малая терция — это (-1,1)
и т. д. Они непосредственно представляют движения в решетке тонов. Если бы меня беспокоили октавы, я бы добавил их в кортеж в качестве третьего поля.
Во-вторых, я бы определил функцию, которая принимает основную ноту и интервал и возвращает имя ноты. Это может быть достигнуто с помощью ограниченной таблицы поиска:
A+(1,0)=C#
, A+(-1,0)=F
, A+(0,1)=E
,A+(0,-1)=D
B+(1,0)=D#
,...Обратите внимание, что из таблицы для натуральных нот мы можем получить результаты для хроматических нот D#+(1,0)=[D+(1,0)]#=F##
. Обратите внимание, что комбинация диез-бемоль отменяет: D♭+(1,0)=[D+(1,0)]♭=[F#]♭=F. Эта функция важна для преобразования (M3,P5)
представления в модели в имена, отображаемые на уровне представления. Также обратите внимание, что движение в решетке является ассоциативным (и коммутативным), A+(-1,2)=A+(-1,0)+(0,1)+(0,1)=[[F]+(0,1)]+(0,1)=C+(0,1)=G
поэтому вам нужно только предварительно вычислить таблицу для сдвигов (1,0),(-1,0),(0,1),(0,-1)
, а остальное можно вычислить с помощью соответствующей логики. Пока что это всего лишь механика для создания бесконечной сети тонов, т.е. простое выполнение этого для больших интервалов будет производить ноты с большим количеством диезов/бемолей.
Чтобы свернуть тональную сеть обратно в себя, я бы использовал парное представление интервалов и попытался их уменьшить. Во-первых, я бы рассмотрел октавные сокращения: (0,+/-12)=>(0,0)
или (+/-3,0)=>(0,0)
и настроил логику, чтобы увидеть, можно ли «упростить» данный интервал, применив эти октавные сокращения. Нужно было бы определить «упрощенный» — навскидку, я не уверен, что евклидова (сумма квадратов) или манхэттенская (сумма абсолютных значений) (или что-то еще?) метрика более полезен. По сути, у вас будет список правил сокращения, а затем вам нужно будет посмотреть, уменьшит ли применение правил сокращения интервал (более простой).
Если эти октавные эквиваленты не делают всего, что вам нужно, я бы рассмотрел другие интервалы, которые могут производить ноты, которые можно энгармонически сократить. Например, на диаграмме в вашем вопросе есть желтая D ♭ на пятую часть выше F # - нота, которая обычно пишется C #. Это можно воспроизвести с помощью правила, допускающего замену (0,7)=>(-1,-2)
.
Специфический
Мы можем увидеть, как этот общий подход будет применяться, рассмотрев области разного цвета на вашей фигуре в вашем вопросе. С корнем C это дает:
AEBF# (+1,-1) (+1, 0) (+1,+1) (+1,+2) БКГД ( 0,-1) ( 0, 0) ( 0,+1) ( 0,+2) D♭ A♭ E♭ B♭ (-1,-1) (-1, 0) (-1,-1) (-1,+2)
так что идея в том, что мы говорим: «При корне в C используйте эти ноты, когда в корне где-то еще используйте ноты в тех же относительных позициях, что и выше». Затем вы можете посмотреть на набор интервалов, которым соответствует этот набор нот (справа вверху), и использовать его в качестве шаблона для создания имен нот с помощью описанной выше логики, когда шаблон основан на другой ноте.
Чтобы ограничить рассмотрение этим блоком, нам нужны два правила редукции: (0,4)=>(1,0)
отождествить CGDAE E с E на мажорную терцию выше C, и (3,0)=>(0,0)
т. е. цепочка из 3 мажорных терций охватывает октаву (точнее, вместо того, чтобы подняться на две м3 выше, перейти вниз на 1 м3). Тогда, учитывая пару (M3,P5)
, мы можем использовать следующую логику:
<pre>
while P5>3 : P5-=4, M3+=1
while P5<-1 : P5+=4, M3-=1
while M3>1 : M3-=3
while M3<-1 : M3+=3
</pre>
как только мы использовали это для уменьшения интервала, мы можем затем использовать логику имени ноты для вычисления имени ноты с учетом выбранной нами корневой ноты.
Наконец, этот конкретный блок нот вокруг данного корня имеет особое значение, поскольку он точно описывает настройку четвертной запятой , означающую один , и, таким образом, особенно актуален для описания обычной музыки, которая в основном исполнялась в строях, происходящих от четвертной запятой означающей один.
Пэт Мачмор
Л. Роджерс
Л. Роджерс
Л. Роджерс
Пэт Мачмор
Л. Роджерс
Пэт Мачмор
Л. Роджерс
Пэт Мачмор