Против аналогового секвенсора не попрешь, part 0
Ах да, синтостроительный блог. Все в курсе, что пресеты убивают музыку, да? Вместо того, чтобы искать интересные новые звуки, люди просто строят композиции из уже готовых. Иногда это уместно, но когда я снова и снова слышу драм-машину TB-808, хочется ``блевануть, прыгнуть с обрыва, броситься по автобус''. Симфонический оркестр, панк-тройка это все виды пресетов. Кроме того, думаю ясно, что инструмент (в широком смысле) накладывает определенные ограничения на конечный результат. Здесь должна быть релевантная цитата из Миши про кубейс, но я ее почему-то не нашел.
На самом деле, как правильно заметил анон, музыка здесь играет второстепенную роль. Я просто хочу сделать для себя playground для экспериментов в мета-программировании, предметно-ориентированных языках и высокопроизводительных вычислениях.</p>
Значит нашей предметной областью будет построение (виртуальных) модульных синтезаторов. Как известно, в этой области популярны так называемые ``визуальные языки программирования'' типа Pure Data, Max и Reactor. Мне они не нравятся своей вопиющей двухмерностью. Мне кажется (входим в область спекуляций), что гораздо удобнее будет иметь язык для описания модулей и язык для описания их комбинаций, имеющие некоторые формы полиморфизма, возможности задания параметрических семейств и т.п. Типа если мне нужен fm-синтезатор с n осцилляторами, то мне проще описать семейство, параметризованное натуральными числами, чем рисовать гребанные диаграммы для каждого конкретного n.
Пока просматриваются два уровня. На нулевом находится язык описания базовых модулей (осцилляторы, фильтры, огибающие и т.п.). Первый уровень это язык схем т.е. базовые комбинаторы: последовательное, параллельное соединение, введение обратной связи, стягивание входов и разветвление выходов. Дальше пойдут комбинаторы высших порядков и семейства моделей. Таков план.
Реализуется все в Hasckell, по описанию моделей генерируется С код, который затем компилируется и динамически подгружается обратно в Hasckell. Промежуточные типы для взаимодействия между С и Hasckell генерируются автоматически (Look Mum No Hands!).
Такие дела, на фото я.
