Alvaros
.
- Регистрация
- 14.05.16
- Сообщения
- 21.452
- Реакции
- 101
- Репутация
- 204
Дзень добрый, комрады.
Решил я как-то упростить себе часть музыкальной жизни, а именно автоматизировать выбор сэмплов для музыки (или, скорее, для «битов»).
Результат я творчески решил назвать Калейдофон. По аналогии с калейдоскопом, который создаёт боесконечные новые рисунки из уже имеющихся объектов.
Чтобы быстрее получить результат, упростим наши требовани к музыке:
Будем строить наш трэк из трёх компонентов:
— Перкуссия
— Бас
— Мелодия
И будем сравнивать компоненты по двум параметрам:
— Тональность
— Темп
В целом, с этими «правилами» музыка уже будет достаточно гармоничной.
Что нам нужно, чтобы всё работало? Исходники — разные сэмплы для каждого из трёх компонентов. И программа, которая будет эти исходники рандомно комбинировать и показывать результат.
Алгоритм такой:
— Выбираем рандомное число от 50 до 180 (темп; вполне могут быть другие границы, по хорошему, нужно задать минимальный и максимальный темпы имеющихся аудио сэмплов)
— Далее выбираем рандомную букву от A до G (тональность)
— С вероятностью 40% добавляем к букве # (более мелкая подстройка тональности)
— С вероятностью в 50% добавляем к тональности букву m (определяем, если тональность будет минорная — грустная, или останется мажорной — весёлой)
— И потом парсим уже подготовленные файлы (перкуссия, бас и мелодия у нас лежат в корне по папкам drums, bass и melody)
**Здесь я воспользовался хитростью, темп и тональность сэпмла указывается в названии файла, но, на деле, это один из лучших незатратных способов передать данные о сэмпле в код.
— Для удобства я добавил три кнопки:
— Save — если комбинация понравилась, можно сохранить все дорожки раздельно в папку и потом уже использовать в DAW или где угодно
— Next/Prev — чтобы передвигаться по истории сгенерированных «комбинаций»
Из-за имеющегося опыта, в плане кода я остановился на связке Kotlin+Swing (для UI)+JSyn (для воспроизведения аудио).
На выходе у нас получается простенькое окно со всей нужной информацией:
Пример работы программы:
Из улучшений, запланированных и незапланированных, вполне можно добавить более умный выбор темпа (не рандом между А и Б, а пройти по всем папкам и динамически выбрать рамки). Ещё можно использовать не три дорожки, а больше. На FX, на эффекты. Можно сделать генерацию миди мелодий, скармливать «инструментам», накладывать какие-то тоже рандомно выбранные фильтры и эффекты — и в итоге у нас получится практически бесконечное процедурное радио.
Исходники программы:
Структура директории:
root
— data
— — drums
— — bass
— — melody
— Kaleidophone.jar
— Kaleidophone.exe
Всем спасибо за внимание!
Жду и надеюсь на идеи и комментарии.
Хорошего дня!
Решил я как-то упростить себе часть музыкальной жизни, а именно автоматизировать выбор сэмплов для музыки (или, скорее, для «битов»).
Результат я творчески решил назвать Калейдофон. По аналогии с калейдоскопом, который создаёт боесконечные новые рисунки из уже имеющихся объектов.
Чтобы быстрее получить результат, упростим наши требовани к музыке:
Будем строить наш трэк из трёх компонентов:
— Перкуссия
— Бас
— Мелодия
И будем сравнивать компоненты по двум параметрам:
— Тональность
— Темп
В целом, с этими «правилами» музыка уже будет достаточно гармоничной.
Что нам нужно, чтобы всё работало? Исходники — разные сэмплы для каждого из трёх компонентов. И программа, которая будет эти исходники рандомно комбинировать и показывать результат.
Алгоритм такой:
— Выбираем рандомное число от 50 до 180 (темп; вполне могут быть другие границы, по хорошему, нужно задать минимальный и максимальный темпы имеющихся аудио сэмплов)
— Далее выбираем рандомную букву от A до G (тональность)
— С вероятностью 40% добавляем к букве # (более мелкая подстройка тональности)
— С вероятностью в 50% добавляем к тональности букву m (определяем, если тональность будет минорная — грустная, или останется мажорной — весёлой)
— И потом парсим уже подготовленные файлы (перкуссия, бас и мелодия у нас лежат в корне по папкам drums, bass и melody)
**Здесь я воспользовался хитростью, темп и тональность сэпмла указывается в названии файла, но, на деле, это один из лучших незатратных способов передать данные о сэмпле в код.
— Для удобства я добавил три кнопки:
— Save — если комбинация понравилась, можно сохранить все дорожки раздельно в папку и потом уже использовать в DAW или где угодно
— Next/Prev — чтобы передвигаться по истории сгенерированных «комбинаций»
Из-за имеющегося опыта, в плане кода я остановился на связке Kotlin+Swing (для UI)+JSyn (для воспроизведения аудио).
На выходе у нас получается простенькое окно со всей нужной информацией:
Пример работы программы:
Из улучшений, запланированных и незапланированных, вполне можно добавить более умный выбор темпа (не рандом между А и Б, а пройти по всем папкам и динамически выбрать рамки). Ещё можно использовать не три дорожки, а больше. На FX, на эффекты. Можно сделать генерацию миди мелодий, скармливать «инструментам», накладывать какие-то тоже рандомно выбранные фильтры и эффекты — и в итоге у нас получится практически бесконечное процедурное радио.
Исходники программы:
You must be registered for see links
Структура директории:
root
— data
— — drums
— — bass
— — melody
— Kaleidophone.jar
— Kaleidophone.exe
Всем спасибо за внимание!
Жду и надеюсь на идеи и комментарии.
Хорошего дня!



