- PVSM.RU - https://www.pvsm.ru -
В прошлый раз мы рассказывали о книгах [1], которые пригодятся специалистам по цифровой обработке сигналов, и обсуждали библиотеки на C++ [2] для синтеза звука. Продолжим тему, но поговорим о ЯП под эти задачи — Faust, SOUL и Feldspar.
Этот язык программирования [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].
Это — функциональный язык программирования [12], ориентированный на разработку синтезаторов и аудиоэффектов. Его авторы — специалисты из акустической лаборатории Grame Research Labs во Франции, которая в свое время разработала музыкальную нотацию Guido [13] (её может читать как компьютер, так и человек).
Одним из главных преимуществ Faust является его мультиплатформенность. Он поддерживает мобильные и десктопные операционные системы, в том числе Linux, где работает с набором звуковых драйверов ALSA [14] и сервер-демоном JACK [15] для передачи MIDI-данных. Также библиотеки Faust можно загрузить на Raspberry Pi и микроконтроллеры типа Teensy [16] и ESP32 [17].
Этот ЯП позволяет обрабатывать акустическую информацию «на лету», поэтому подходит для музыкального программирования [18]. В то же время его используют в образовательной среде — с финансированием проекта помогло Министерство культуры Франции. Еще с помощью Faust участники проекта AmStramGrame [19] создают акустические устройства, а энтузиасты реализуют на Faust необычные музыкальные инструменты. Примером может быть TheBladeAxe [20], который похож на гитару, но с iPad’ом вместо грифа, управляющим звучанием устройства. Еще один интересный девайс на базе Faust — Sweeps and Collisions [21]. Он представляет собой пластиковый ящик, где перекатываются шарики. Микроконтроллер захватывает этот звук микрофонами, обрабатывает его и воспроизводит с помощью резонаторов.
Но несмотря на частое применение в образовательной сфере, начинающему «музыкальному программисту» синтаксис языка может показаться [22] запутанным. Однако опытные специалисты разберутся в нем достаточно быстро — поможет подробная документация [23] и бесплатный курс [24] от Стэнфордского университета.
Feldspar [25] разработали [26] инженеры из технических университетов Швеции и компании Ericsson еще в 2009 году. Цель проекта — представить язык, который бы решил проблему «портируемости» и мог работать на большинстве вычислительных систем, которые появятся в будущем. Feldspar построен на базе программных пакетов и библиотек, входящих в состав Haskell Platform [27]. Язык обладает высоким уровнем абстракции благодаря векторам (стр.3 [28]), при этом Feldspar можно запустить как на 8-разряной встроенной системе, так и на сервере в дата-центре.
Знакомство с языком можно начать с официального руководства [28]. Там подробно разобраны все алгоритмы и операторы. У тех, кому привычен синтаксис C (именно на нем написан Haskell), это не вызовет особых сложностей.
Но есть у Feldspar и свои недостатки — поддержку языка прекратили [28] в 2011 году, и хотя с тех пор разработчики все же выпустили [29] несколько баг-фиксов, о развитии функциональности инструмента говорить не приходится. В то же время Feldspar не всегда справляется с обработкой больших объёмов акустических данных.
Дополнительное чтение по этой теме в нашем «Мире Hi-Fi»:
Как писать музыку на Python — помогут три тематические библиотеки [31]
Влиться в муз. программирование — языки, которые помогут это сделать [18]
Другие наши материалы на Хабре:
Проигрыватели винила в районе двадцати тысяч рублей — три модели [32]
Что происходит в сфере аудиочатов и есть ли у них будущее [33]
Автор: «Мир 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
Нажмите здесь для печати.