В прошлый раз мы рассказывали о книгах, которые пригодятся специалистам по цифровой обработке сигналов, и обсуждали библиотеки на C++ для синтеза звука. Продолжим тему, но поговорим о ЯП под эти задачи — Faust, SOUL и Feldspar.
SOUL
Этот язык программирования (и API) представлен инженером Джулианом Сторером, которому принадлежит проект JUCE для разработки GUI приложений и плагинов. Он спроектировал SOUL, чтобы снизить порог вхождения для начинающих в эту сферу и помочь им чуточку быстрее обучаться цифровой обработке сигналов.
Джулиан сравнил свой фреймворк с OpenGLSL или OpenCL (но для аудио), поскольку он заточен под написание высокопроизводительного и безопасного кода для обработки звука. В частности, он использует язык ассемблера HEART, который можно запускать без «песочницы». SOUL также не применяет динамическое выделение памяти и исключает «состояния гонок» (race conditions) — в итоге его скорость выполнения равна или даже превышает показатели C++ на аналогичных задачах. Поскольку код практически не нагружает CPU и оперативную память компьютера, музыканты могут запускать большее число плагинов на DAW. В то же время SOUL подходит для разработки видеоигр — свободные вычислительные ресурсы девелоперы могут направить на реализацию других геймплейных аспектов.
Фреймворк SOUL относительно молод, поэтому в работе встречаются баги. Ряд пользователей отмечает частые вылеты при попытках загрузить файлы .soul в DAW. Однако разработчики быстро реагируют на обращения и исправляют недостатки. Если вас заинтересовал этот проект, вы можете его «пощупать» прямо в браузере — на официальном сайте есть удобная IDE.
Faust
Это — функциональный язык программирования, ориентированный на разработку синтезаторов и аудиоэффектов. Его авторы — специалисты из акустической лаборатории Grame Research Labs во Франции, которая в свое время разработала музыкальную нотацию Guido (её может читать как компьютер, так и человек).
Одним из главных преимуществ Faust является его мультиплатформенность. Он поддерживает мобильные и десктопные операционные системы, в том числе Linux, где работает с набором звуковых драйверов ALSA и сервер-демоном JACK для передачи MIDI-данных. Также библиотеки Faust можно загрузить на Raspberry Pi и микроконтроллеры типа Teensy и ESP32.
Этот ЯП позволяет обрабатывать акустическую информацию «на лету», поэтому подходит для музыкального программирования. В то же время его используют в образовательной среде — с финансированием проекта помогло Министерство культуры Франции. Еще с помощью Faust участники проекта AmStramGrame создают акустические устройства, а энтузиасты реализуют на Faust необычные музыкальные инструменты. Примером может быть TheBladeAxe, который похож на гитару, но с iPad’ом вместо грифа, управляющим звучанием устройства. Еще один интересный девайс на базе Faust — Sweeps and Collisions. Он представляет собой пластиковый ящик, где перекатываются шарики. Микроконтроллер захватывает этот звук микрофонами, обрабатывает его и воспроизводит с помощью резонаторов.
Но несмотря на частое применение в образовательной сфере, начинающему «музыкальному программисту» синтаксис языка может показаться запутанным. Однако опытные специалисты разберутся в нем достаточно быстро — поможет подробная документация и бесплатный курс от Стэнфордского университета.
Feldspar
Feldspar разработали инженеры из технических университетов Швеции и компании Ericsson еще в 2009 году. Цель проекта — представить язык, который бы решил проблему «портируемости» и мог работать на большинстве вычислительных систем, которые появятся в будущем. Feldspar построен на базе программных пакетов и библиотек, входящих в состав Haskell Platform. Язык обладает высоким уровнем абстракции благодаря векторам (стр.3), при этом Feldspar можно запустить как на 8-разряной встроенной системе, так и на сервере в дата-центре.
Знакомство с языком можно начать с официального руководства. Там подробно разобраны все алгоритмы и операторы. У тех, кому привычен синтаксис C (именно на нем написан Haskell), это не вызовет особых сложностей.
Но есть у Feldspar и свои недостатки — поддержку языка прекратили в 2011 году, и хотя с тех пор разработчики все же выпустили несколько баг-фиксов, о развитии функциональности инструмента говорить не приходится. В то же время Feldspar не всегда справляется с обработкой больших объёмов акустических данных.
Дополнительное чтение по этой теме в нашем «Мире Hi-Fi»:
Как писать музыку на Python — помогут три тематические библиотеки
Влиться в муз. программирование — языки, которые помогут это сделать
Другие наши материалы на Хабре: