Музыка из кода

Наши и сторонние разработки
Ответить
Аватара пользователя
BDK
Сообщения: 3665
Зарегистрирован: 17 май 2015, 23:27
Откуда: Беларусь
Благодарил (а): 152 раза
Поблагодарили: 388 раз
Контактная информация:

Музыка из кода

Сообщение BDK »

Исходники: https://wdfiles.ru/774120
Скриншот:
Изображение
Видео где можно посмотреть работу с программой:


Что здесь видно? Я добавил кроме Инь-Ян еще одно понятие - множество точек в пространстве. Как оно отображается можно видеть в крайнем левом кружочке. По сути это декартова система координат на которой разбросаны объекты имеющие координаты и размер.
В свою очередь от этого пространства унаследован класс Composition - который собственно представляет из себя нашу музыкальную композицию.

Так же показана визуализация процесса генерации звука - если кликнуть по внешнему кольцу то запускается этот самый процесс генерации звука. Причем можно видеть как этот процесс идёт во всей структуре если приблизиться - что и показано в ролике.

Ну и наконец, когда звук сгенерирован можно запустить его на воспроизведение кликнув по полю WaveGen. И в конце мы слышим музыку. Пока музыка простая - зацикленный короткий фрагмент. Но дальше я продемонстрирую уже большие сложные композиции. А так же доработаю визуализацию объектов которые пока отображаются как пустые круги.
Аватара пользователя
BDK
Сообщения: 3665
Зарегистрирован: 17 май 2015, 23:27
Откуда: Беларусь
Благодарил (а): 152 раза
Поблагодарили: 388 раз
Контактная информация:

Re: Музыка из кода

Сообщение BDK »

Суть здесь в чем - самая проблемная часть всегда в любом приложении - это GUI. Почему так? Дело в том что GUI объективно имеет более ограниченные возможности чем код. Поэтому если мы создаём приложение ориентированное на работу через какой-то GUI - мы сразу себя сильно сильно ограничиваем в средствах и тем самым сильно сильно усложняем себе задачу. Если же мы отбрасываем GUI то оказывается что просто из кода можно получить эти же вещи гораздо проще.

Таким образом я сделал генерацию музыки просто из кода - изначально это не имело никакого GUI. Это оказалось действительно черезвычайно просто - программа была написана за 2-3 вечера.

Однако далее я посмотрел - а почему бы не добавить в классы один лишь дополнительный метод - нарисовать себя. То есть класс может нарисовать себя по каким-то простым правилам. Получилась такая вот интересная картинка. Интересная она тем что она буквально отражает структуру программы - классы сами рисуют себя. Если изменить структуру классов - изменится и картинка. Никакого времени на написание картинки под программу тратить не приходится - картинка получается автоматом.

А дальше мысль пошла еще чуть дальше - а почему бы элементы картинки не сделать интерактивными - то есть тот же класс кроме того что может нарисовать себя так же может принимать события мышки и реагировать на них.

И таким образом - получился такой себе вполне GUI. Который строится полностью автоматом. Я не трачу время на разработку GUI - я просто развиваю основной код - а GUI получается автоматом. Да, не оконный интерфейс. Но тем не менее - вполне функциональный а главное черезвычайно дешевый по затратам труда и времени.

Да конечно - этот GUI не даёт полной свободы действия - музыку через него редактировать нельзя поскольку музыка генерится алгоритмами. Она принципиально генерится из кода. Но какая-то частичная интерактивность всё же есть.

Я еще не знаю во что это разовьется. Но выглядит интересно. Я бы назвал это не GUI (графический интерфейс пользователя), а графический интерфейс разработчика - то есть хотя код положен во главу угла но тем не менее вот эта дополнительная интерактивная графика помогает разработчику - визуализация структуры классов очень помогает при работе с кодом.

Здесь все текстовые обозначения - это реальные имена классов. То есть вся картинка полностью автоматом следует из самой структуры классов.
=====

Этот проект не предполагает какой-то коммерциализации. Это просто интересный эксперимент и одновременно это продукт что называется "для себя" - то есть мне как программисту нет нужды писать полноценное приложение с полноценным GUI - мне на самом деле гораздо проще и гораздо удобнее работать прямо из кода - и меня это полностью устраивает. Я могу заниматься музыкой дёшево и сердито и при этом еще и иметь более гибкие и мощные возможности чем даёт любая музыкальная программа на рынке - еще бы ведь в моих руках вся мощь ООП вместо тыкания мышкой по экранным формам с ограниченной функциональностью. Сама музыка из кода описывается очень кратко - где-то применяются циклы, где-то свойства наследования - нет нужны прописывать каждую ноту, пишется небольшой набор классов из которых вся музыка распаковывается алгоритмически. Это действительно очень простой, гибкий и удобный процесс - никакая визуальная работа через GUI не сравнится с этим ни по простоте ни по гибкости ни возможностям.

Ну и пока это простой пример. Я хочу это еще развить дальше и показать что можно генерить таким способом музыку профессионального конечного уровня. И при этом очень смешными затратами труда и усилий. И бесплатно :) Исходники выкладываю так что присутствующие смогут сами попробовать делать то же самое. Я позже покажу где что в коде менять чтобы поменять музыку.
Аватара пользователя
BDK
Сообщения: 3665
Зарегистрирован: 17 май 2015, 23:27
Откуда: Беларусь
Благодарил (а): 152 раза
Поблагодарили: 388 раз
Контактная информация:

Re: Музыка из кода

Сообщение BDK »

Очередная итерация проекта
Исходники : https://wdfiles.ru/46b779
Скриншот:
Изображение
Демо на youtube:


Что следующим этапом? Хочу перенести это на графику OpenGL чтобы дальше вести уже в ней.
Ответить