- PVSM.RU - https://www.pvsm.ru -

Три предметно-ориентированных языка программирования для цифровой обработки сигналов

В прошлый раз мы рассказывали о книгах [1], которые пригодятся специалистам по цифровой обработке сигналов, и обсуждали библиотеки на C++ [2] для синтеза звука. Продолжим тему, но поговорим о ЯП под эти задачи — Faust, SOUL и Feldspar.

Фотография: Vadim Artyukhin. Источник: Unsplash.com
Фотография: Vadim Artyukhin. Источник: Unsplash.com

SOUL

Этот язык программирования [3] (и API) представлен инженером Джулианом Сторером [4], которому принадлежит проект JUCE [5] для разработки GUI приложений и плагинов. Он спроектировал SOUL, чтобы снизить порог вхождения для начинающих в эту сферу и помочь им чуточку быстрее обучаться цифровой обработке сигналов.

Джулиан сравнил свой фреймворк с OpenGLSL или OpenCL [6] (но для аудио), поскольку он заточен под написание высокопроизводительного и безопасного кода для обработки звука. В частности, он использует [7] язык ассемблера HEART, который можно запускать без «песочницы». SOUL также не применяет [8] динамическое выделение памяти и исключает «состояния гонок» (race conditions) — в итоге его скорость выполнения равна или даже превышает показатели C++ на аналогичных задачах. Поскольку код практически не нагружает CPU и оперативную память компьютера, музыканты могут запускать большее число плагинов на DAW [9]. В то же время SOUL подходит для разработки видеоигр — свободные вычислительные ресурсы девелоперы могут направить на реализацию других геймплейных аспектов.

Фреймворк SOUL относительно молод, поэтому в работе встречаются баги [10]. Ряд пользователей отмечает частые вылеты при попытках загрузить файлы .soul в DAW [9]. Однако разработчики быстро реагируют на обращения и исправляют недостатки. Если вас заинтересовал этот проект, вы можете его «пощупать» прямо в браузере — на официальном сайте есть удобная IDE [11].

Faust

Это — функциональный язык программирования [12], ориентированный на разработку синтезаторов и аудиоэффектов. Его авторы — специалисты из акустической лаборатории Grame Research Labs во Франции, которая в свое время разработала музыкальную нотацию Guido [13] (её может читать как компьютер, так и человек).

Одним из главных преимуществ Faust является его мультиплатформенность. Он поддерживает мобильные и десктопные операционные системы, в том числе Linux, где работает с набором звуковых драйверов ALSA [14] и сервер-демоном JACK [15] для передачи MIDI-данных. Также библиотеки Faust можно загрузить на Raspberry Pi и микроконтроллеры типа Teensy [16] и ESP32 [17].

Фотография: Clint Patterson. Источник: Unsplash.com
Фотография: Clint Patterson. Источник: Unsplash.com

Этот ЯП позволяет обрабатывать акустическую информацию «на лету», поэтому подходит для музыкального программирования [18]. В то же время его используют в образовательной среде — с финансированием проекта помогло Министерство культуры Франции. Еще с помощью Faust участники проекта AmStramGrame [19] создают акустические устройства, а энтузиасты реализуют на Faust необычные музыкальные инструменты. Примером может быть TheBladeAxe [20], который похож на гитару, но с iPad’ом вместо грифа, управляющим звучанием устройства. Еще один интересный девайс на базе Faust — Sweeps and Collisions [21]. Он представляет собой пластиковый ящик, где перекатываются шарики. Микроконтроллер захватывает этот звук микрофонами, обрабатывает его и воспроизводит с помощью резонаторов.

Но несмотря на частое применение в образовательной сфере, начинающему «музыкальному программисту» синтаксис языка может показаться [22] запутанным. Однако опытные специалисты разберутся в нем достаточно быстро — поможет подробная документация [23] и бесплатный курс [24] от Стэнфордского университета.

Feldspar

Feldspar [25] разработали [26] инженеры из технических университетов Швеции и компании Ericsson еще в 2009 году. Цель проекта — представить язык, который бы решил проблему «портируемости» и мог работать на большинстве вычислительных систем, которые появятся в будущем. Feldspar построен на базе программных пакетов и библиотек, входящих в состав Haskell Platform [27]. Язык обладает высоким уровнем абстракции благодаря векторам (стр.3 [28]), при этом Feldspar можно запустить как на 8-разряной встроенной системе, так и на сервере в дата-центре.

Знакомство с языком можно начать с официального руководства [28]. Там подробно разобраны все алгоритмы и операторы. У тех, кому привычен синтаксис C (именно на нем написан Haskell), это не вызовет особых сложностей.

Но есть у Feldspar и свои недостатки — поддержку языка прекратили [28] в 2011 году, и хотя с тех пор разработчики все же выпустили [29] несколько баг-фиксов, о развитии функциональности инструмента говорить не приходится. В то же время Feldspar не всегда справляется с обработкой больших объёмов акустических данных.


Дополнительное чтение по этой теме в нашем «Мире Hi-Fi»:


Другие наши материалы на Хабре:


Автор: «Мир Hi-Fi»

Источник [34]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/366628

Ссылки в тексте:

[1] рассказывали о книгах: https://habr.com/ru/company/audiomania/blog/567054/

[2] библиотеки на C++: https://habr.com/ru/company/audiomania/blog/568628/

[3] язык программирования: https://github.com/soul-lang/SOUL

[4] Джулианом Сторером: https://cppcast.com/guest/jstorer/

[5] JUCE: https://ru.wikipedia.org/wiki/Juce

[6] OpenCL: https://ru.wikipedia.org/wiki/OpenCL

[7] использует: https://soul-lang.github.io/SOUL/docs/SOUL_V1_Release.html

[8] не применяет: https://github.com/soul-lang/SOUL/blob/master/docs/SOUL_Overview.md

[9] DAW: https://en.wikipedia.org/wiki/Digital_audio_workstation

[10] встречаются баги: https://forum.juce.com/t/soul-problem-with-end-point-array/44480

[11] удобная IDE: https://soul.dev/lab/

[12] функциональный язык программирования: https://faust.grame.fr/

[13] Guido: https://guido.grame.fr/

[14] ALSA: https://ru.wikipedia.org/wiki/ALSA

[15] JACK: https://ru.wikipedia.org/wiki/JACK_Audio_Connection_Kit

[16] Teensy: https://www.pjrc.com/teensy/

[17] ESP32: https://en.wikipedia.org/wiki/ESP32

[18] музыкального программирования: https://www.audiomania.ru/content/art-7405.html

[19] AmStramGrame: https://www.amstramgrame.fr/en/

[20] TheBladeAxe: https://ccrma.stanford.edu/~rmichon/bladeaxe/

[21] Sweeps and Collisions: https://www.youtube.com/watch?v=cPoWb39GjOU

[22] может показаться: https://www.kvraudio.com/forum/viewtopic.php?t=543334

[23] подробная документация: https://faustdoc.grame.fr/manual/quick-start/

[24] бесплатный курс: https://www.kadenze.com/courses/real-time-audio-signal-processing-in-faust/info

[25] Feldspar: https://feldspar.github.io/introduction.html

[26] разработали: https://feldspar.github.io/contributors.html

[27] Haskell Platform: https://en.wikipedia.org/wiki/Haskell_Platform

[28] стр.3: http://feldspar.inf.elte.hu/feldspar/documents/FeldsparTutorial.pdf

[29] все же выпустили: https://github.com/feldspar/feldspar-language/issues

[30] Как синтез речи появился на ПК: https://www.audiomania.ru/content/art-7311.html

[31] Как писать музыку на Python — помогут три тематические библиотеки: https://www.audiomania.ru/content/art-7691.html

[32] Проигрыватели винила в районе двадцати тысяч рублей — три модели: https://habr.com/ru/company/audiomania/blog/570630/

[33] Что происходит в сфере аудиочатов и есть ли у них будущее: https://habr.com/ru/company/audiomania/blog/569400/

[34] Источник: https://habr.com/ru/post/570550/?utm_source=habrahabr&utm_medium=rss&utm_campaign=570550