В настоящее время я разрабатываю предметно-ориентированный язык (DSL) - разновидность языка программирования - с целью упростить маршрутизацию звука между аудиоустройствами на вашем компьютере.

Боковое примечание: для общего ознакомления с тем, что такое DSL и их преимущества, я рекомендую эту отличную статью Федерико Томассетти: https://tomassetti.me/domain-specific-languages

В Windows приложение под названием Virtual Audio Cable (VAC) от Евгения Музыченко позволяет создавать виртуальные аудиокабели. Используя аудио повторители VAC, вы можете затем создавать соединения между ними и физическими устройствами, такими как микрофоны, динамики и наушники.

Это приложение имеет множество применений; среди прочего, появляется возможность хранить звук с вашего микрофона, голосовые вызовы и другой звук с вашего компьютера (например, музыку, игры) отдельно и записывать их в отдельные файлы или каналы. Преимущество записи звука из разных источников в отдельные каналы значительна, поскольку это позволяет регулировать громкость и применять звуковые эффекты к каждому из них независимо или полностью отключать их. Эта возможность полезна не только для музыкальных продюсеров и других профессионалов в области аудио, но и для людей, которые транслируют или записывают видео на таких платформах, как YouTube и Twitch.

Одним из недостатков виртуального аудиокабеля является то, что обычному пользователю может быть сложно настроить конфигурацию, которая облегчит такое использование. Для маршрутизации звука между устройствами необходимо запустить несколько экземпляров программы Audio Repeater. Каждое соединение, которое вы хотите установить, требует от вас настройки одного экземпляра приложения, и обычно это нужно делать снова при каждой перезагрузке компьютера.

Пользователь может настроить несколько параметров с помощью раскрывающегося списка, числа и флажков. Наиболее важными из них являются Wave in и Wave out, где вы выбираете исходное и целевое устройства соответственно.

Audio Repeater также принимает аргументы командной строки, что позволяет пользователям автоматизировать этот процесс, помещая свою конфигурацию в пакетные файлы Windows. Проблема с этим методом в том, что он часто многословен, и вам придется много копировать даже для умеренно сложной настройки. Другими словами, есть возможности для улучшения.

Мой проект DSL (рабочее название: vac-dsl) направлен на дополнение Virtual Audio Cable и подобных ему приложений, предоставляя простой способ писать, применять, экспериментировать и переключаться между различными конфигурациями.

vac-dsl позволяет вам написать свою конфигурацию, используя простой текстовый синтаксис, вдохновленный Graphviz / DOT.

Ниже приведен пример полной конфигурации Vac-DSL, которая направляет звук с микрофона на динамики, что означает, что весь звук, который улавливает ваш микрофон, будет воспроизводиться через динамики:

"Microphone" -> "Speakers"

Ага, это так просто.

Вместо того, чтобы вручную запускать и настраивать экземпляры Audio Repeater каждый раз при перезагрузке компьютера или работе с громоздкими пакетными файлами, vac-dsl сделает все за вас за кулисами.

Язык также позволяет вам определять переменные и использовать их в остальной части конфигурации следующим образом:

mic = "Microphone device with a really long name"
mic -> "Speakers"
mic -> "Headphones"

Вы можете использовать подобные комментарии и сокращения, что позволяет создавать более компактные конфигурации:

mic = "Microphone device with a really long name"
# Route microphone audio to both speakers and headphones
mic -> "Speakers", "Headphones"

И вы также можете установить свойства для соединений:

"Microphone" -> "Speakers", "Headphones" [sampling_rate=96000]

Основной проект состоит из трех компонентов, которые работают вместе для выполнения вашей конфигурации:

  • Синтаксический анализатор: берет исходный текст и создает абстрактное синтаксическое дерево (AST).
  • Компилятор: принимает AST, разрешает ссылки на переменные и расширяет сокращения, затем возвращает список соединений.
  • Интерпретатор: берет список подключений и запускает экземпляр Audio Repeater с правильными аргументами командной строки для каждого из них.

Если вы хотите увидеть примеры выходных данных каждого этапа процесса, ознакомьтесь с тестовыми приборами проекта.

Я впервые пишу синтаксический анализатор, компилятор или интерпретатор.
Я много узнаю о языковом дизайне и реализации, и это на удивление весело!

У меня много планов на этот проект, в том числе:

  • Гуманизированные сообщения об ошибках аналогично компилятору Elm
  • Подсветка синтаксиса в IDE и редакторах кода
  • Система импорта, которая позволяет пользователям разбивать свою конфигурацию на несколько файлов, что позволяет лучше использовать принцип DRY.
  • Языковой сервер, реализующий Протокол языкового сервера, который включает такие функции IDE, как автозаполнение, информация о наведении, переход к определению переменной, поиск всех ссылок и переименование переменных.
  • Способ автоматической компиляции вашей конфигурации Vac-DSL в графики DOT / Graphviz для визуализации
  • Поддержка платформ и приложений маршрутизации звука помимо Windows и Virtual Audio Cable

Исходный код vac-dsl находится в свободном доступе на моем GitHub под лицензией Apache 2.0, так что, пожалуйста, не стесняйтесь его проверить. Я также приветствую любые конструктивные отзывы, которые могут у вас возникнуть.

Я не связан с Евгением Музыченко или программным обеспечением Virtual Audio Cable.
Проект vac-dsl просто предоставляет простой в использовании интерфейс на основе публично задокументированного API командной строки VAC. Все права принадлежат их владельцам.