Прошло 6 недель с момента начала официального периода кодирования в рамках Google Summer of Code ’22. Последние три недели были как интересными, так и суматошными. Нужно было изучить множество новых концепций, просмотреть и понять сотни строк кода и попытаться добраться до того самого неуловимого финального плана, который решит, как пройдут мои следующие 6 недель.
Визуализация композиций
После исправления нескольких мелких ошибок в поколениях Korvais и Mohras, следующим шагом была разработка методов визуализации композиций. Это означало прохождение через пакет Diagrams и поиск методов визуализации композиций в структуре, подобной сетке.
Первая идея, которая возникла у меня при визуализации Корвайса, заключалась в том, чтобы изобразить фразы одним цветом, а промежутки — другим. Каждый ряд представлял бы новый ритмический цикл. По мере разработки функций для этого, я понял, что будет лучше, если вместо одного цвета будет градиент. Фразы имели бы убывающий градиент, где скорость убывания зависела бы от длины фразы. То же самое можно было бы сделать и для пробелов, но с увеличивающимся градиентом. Еще одна замечательная идея, которую посоветовал мой наставник Алекс Маклин, заключалась в том, чтобы иметь заголовок, который помог бы понять, где будут располагаться биты.
Пример генерации для обычного числового паттерна выглядит следующим образом:
Другая подобная визуализация для Korvai выглядит следующим образом:
Это были пользовательские композиции, которые предоставлялись в виде списка фраз и пробелов. Следующий шаг заключался в том, чтобы заставить систему составлять и визуализировать композиции за один раз. Одна из таких композиций Корваи, составленная системой, приведена ниже:
Визуализация Мохры оказалась совершенно другой задачей. В отличие от Корваи, пробелы здесь не были характерной чертой. Поэтому я решил использовать фундаментальную структуру, т.е. разделение мохры на компоненты, в качестве решающего признака.
Одна из таких мохра, сгенерированная системой, приведена ниже:
Последним шагом, который я хотел выяснить, было представление композиций, которые имеют меняющиеся временные подписи. Для этого нужно было сгенерировать диаграммы, в которых длительность отдельных компонентов будет меняться.
Более ранняя композиция, визуализированная в двух разных временных подписях, приведена ниже:
Другая числовая схема, в которой использовались 4 различные временные подписи, приведена ниже:
На этом этапе мне было интересно выяснить, как можно наложить циклы друг на друга, чтобы увидеть, какой цвет получится в результате. Я добился этого, используя круговые клинья. Фразы добавляли положительное значение к результирующему цвету, а пробелы — отрицательное. Такая визуализация приведена ниже:
Когда я закончил с диаграммами, осталось только создать пакет и загрузить его на hackage. Ссылка на пакет приведена ниже:

konnakol: Формализация правил коннакола, индийской ударной формы искусства.

Прослушивание коннакола
После визуализации композиций коннакола следующим пунктом списка было прослушивание композиций коннакола. К счастью, мы наткнулись на удивительную коллекцию образцов мридангама Артура Каработта, который записал их с помощью исполнителя мридангама Харишанкара В Менона. Они были достаточно любезны, чтобы дать нам разрешение на использование аудиообразцов в нашем проекте.
Чтобы использовать образцы вместе с композициями, сгенерированными системой, мне пришлось определить методы, которые конвертировали бы эти композиции в мини-нотацию, а также подходящее значение, на которое нужно замедлить композиции, чтобы они достигли оптимального темпа. Как только я это сделал, осталось только установить пакет konnakol, импортировать его в tidal и начать кодировать Konnakol в реальном времени!
Код генерации звука был написан таким образом, что любой человек с базовым пониманием Konnakol сможет сгенерировать Mohra или Korvai с помощью всего одной строки кода. Например, чтобы сгенерировать Мохру, достаточно ввести
d1 $ (tidalM Khanda rupaka Khanda (mkStdGen 112))
Чтобы сделать звук лучше, можно использовать другие функции и аудиообразцы, доступные в Tidal Cycles. Один из таких примеров приведен ниже:
do
resetCycles
d1 $ jux (fast 2) $ (tidalK Chaturasra thriputa Chaturasra (mkStdGen 112232)) # gain 1.3
d2 $ sound "bd sd ~ sd" # gain 1
d5 $ sound "arpy(<3 5>, 8)" # gain 1.1
Сгенерированные примеры аудио можно найти в репозитории кода, ссылка на который приведена в конце документа.
Что дальше?
Основной целью второй половины проекта является разработка системы внутри TidalCycles, которая сможет работать с последовательностями. Я также буду работать над
Посмотреть разработанный код, а также подробное описание Konnakol можно здесь:
tidalcycles / konnakol-gsoc
Репозиторий для экспериментов Konnakol во время GSOC 2022
GSOC Konnakol
Репозиторий экспериментов, проведенных в рамках Google Summer of Code 2022.
Соавтор : Аравинд МохандасНаставник: Алекс МакЛин
Чтобы прочитать больше о Konnakol, посетите здесь
Чтобы понять, какие типы данных и функции используются, посетите здесь
Чтобы посмотреть на сгенерированные примеры диаграмм, посетите здесь
Чтобы запустить код и создать музыку: Визуализация композиций Konnakol — GSoC ’22 Update 2. (NB: загрузите аудиофайлы с файлом запуска SC, чтобы услышать звук)
Аудиообразцы
Образцы мридангама (c) Артур Каработт, распространяется по лицензии CC-BY-SA https://creativecommons.org/licenses/by-sa/4.0/, исполняет Harishankar V Menon.
Аудио образцы
Образцы мридангам (c) Артур Каработт, распространяется по лицензии CC-BY-SA https://creativecommons.org/licenses/by-sa/4.0/, исполняет Harishankar V Menon.