JStation! Делаем народную DAW своими руками ) Часть 1
Друзья, коллеги, приветствую!
Блог создан, исходя из недавней темы https://promodj.com/forum/common/1151642/Nebolshoy_vopros_na_interesnuyu_temu , там имеется вводная часть.
Оформлена и готова, нулевая часть проекта. В целом, так как она нулевая, смотреть там особо и не на что, но в данном фундаменте заложен ряд базовых очень важных концепций, которые можно и важно обсудить. Снизу будут размещены скриншоты, для понимания сейчас и их достаточно, но желающие могут скачать архив по ссылке снизу. В архиве две версии
win32 и win64. В качестве рабочего названия, решил обозначить проект как JStation.
Итак, перечислю вышеуказанные концепции:
- Система плавающих окон и поддержка мультимониторности (имеется в виду дисплей)
- Архитектура интерфейса
- Система компонентов среды DAW
Теперь подробнее:
Система плавающих окон и поддержка мультимониторности
Практически все окна (формы) в программе имеют одинаковое представление и поведение. Центральная палитра программы имеет три зоны, к которой могут липнуть окна, слева, справа и в центре. Также окно можно вытащить из данных зон и оно приобретет свободноплавающий вид. Что будет в этих окнах, собственно весь функционал и привычный и непривычный. Окно секвенсора проекта также будет таким же окном с таким же поведением, можно разносить окна по разным мониторам, что очень удобно, если рабочее место имеет более одного монитора. Микшер, например, точно также, пианоролл - туда же. Т.е. все что будет в визуальных окнах DAW будет обладать описанным поведением. Перетаскиваем окно обычным образом, при этом либо делаем его свободноплавающим, либо прикрепляем к определенной зоне, сместив влево, вправо или к верху. При нажатии кнопки фиксатора в правом углу окна, форма закрепляется и автоматически не будет скрываться. Текущая конфигурация запоминается и будет восстановлена при перезапуске. В общем и целом, система направлена на то, чтобы каждый пользователь мог исходя из собственных удобств и конфигурации оборудования настроить среду удобно под себя.
Архитектура интерфейса
В целях увеличения вертикального пространства, главное меню вынесено в панель слева и
имеет кнопки с пиктограммами. Все главные функции, Открыть проект, Сохранить и т.п.
вынесены в отдельные кнопки для быстрого доступа, остальные функции доступны в виде
контекстного всплывающего меню, активация данного меню по самой нижней кнопке в меню.
Если какое-либо окно было закрыто, получить к нему доступ
можно из соответствующего пункта меню.
Система компонентов среды DAW
Программа имеет API для сторонних компонентов от независимых разработчиков. Компонент
похож на тот же обычный плагин, но имеет другое предназначение. Плагин работает с
аудио либо миди потоком и работает в достаточно изолированной среде. Компонент приложения
работает на уровне самой программы и ему предоставляются богатые возможности. Компонент
может создавать, открывать, закрывать миксы. Воздействовать на содержимое микса.
Т.е. компонент работает структурно вместе с DAW и дополняет ее возможности. Что-то
похожее сейчас реализовано во многих DAW через технологию ARA, но там также имеется
множество ограничений. В качестве первого компонента, реализован компонент JPluger.
Данный компонент может открыть любой плагин (в зависимости от версии win32 и win64) с
обзорной целью. Можно посмотреть вид плагина, послушать звуки и т.д.
Вот, вкратце, ряд фундаментальных частичек проекта. В следующей части будет реализован
аудио движок программы, компонент JPluger начнет издавать звуки от плагинов.
Присоединяйтесь, пишите, предлагайте. Все мнения будут учтены!
Ссылка на релиз программы: http://hw.h1n.ru/jstation.zip
Скриншоты:
Comments
В стандарте MIDI есть каналы, но события разных каналов идут одним потоком MIDI-команд.
А с выходными каналами плагинов тоже непонятно, как лучше сделать. Можно делать вложенные дорожки на каждую пару каналов, а можно делать матрицу, где указывать, какой канал плагина на какой канал дорожки выводится.
Я пока собственно сам в этом плаваю, видел краем глаза в спецификации vst 2.x, что можно выбрать номер программы и гнать поток миди уже по нему, видимо плагин учитывает этот номер и разделяет потоки, обычный плагин ничего не делит и весь поток одинаково воспринимает, как то мне это так видится. В рипере должна быть поддержка таких вещей.
По самому аудио движку там множество интересных моментов, как раз занимаюсь его планированием. У меня в движке не будет как таковых дорожек, дорожки будут вырисовываться из нод общего графа, каждая нода соотвественным образом коммутируется с другими нодами и из всего это набора уже будет выделяться графический интерфейс уже с обычными дорожками, инсертами и т.п.
А вот по движку тем (скинов) - в диалоге открытия файлов сверху имена папок отрисованы белым на белом. Можно ли сделать опцию, чтобы не использовались скины, а просто были стандартные интерфейсные компоненты Windows?