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

Как устроен Sporth — ЯП для музыкальных live-сессий

Один из предыдущих материалов мы посвятили OpenMusic [1] — инструменту для написания музыки на ООП. Мы также говорили о языках программирования [2], заточенных под создание аудиокомпозиций.

Сегодня мы решили продолжить тему и рассказать о языке Sporth. Его разработали специально, чтобы композиторы могли писать компьютерную музыку во время живых выступлений.

Как устроен Sporth — ЯП для музыкальных live-сессий - 1 [3]
Фото ichael Pierce [4] / Unsplash

Что собой представляет Sporth

Часто под термином «музыкальное программирование [5]» понимают процесс написания музыки с помощью секвенсоров, синтезаторов и ПО. Но некоторые исполнители обращаются к более «хардкорным» инструментам — программному коду и специализированным ЯП.

Один из таких языков — Sporth.

Sporth (сокращение от SoundPipe fORTH) — это стековый язык программирования [6], реализованный на C. Его операторы позволяют генерировать сигналы различной частоты и тональности, работать с функциональными таблицами для секвенсоров и реализовывать параметрическую модуляцию.

Язык разработал инженер Пол Батчелор (Paul Batchelor), который одно время трудился [7] над акустическими системами с командой Google ATAP [8]. Он презентовал свой проект на Международной конференции, посвящённой «живому» программированию (International Conference on Live Coding) в 2018 году. Хотя репозиторий с исходниками [9] был создан на GitHub намного раньше — в 2016-м.

По словам Пола, проектируя Sporth, он вдохновлялся такими стековыми языками, как Forth и PostScript. Forth поддерживают многие CPU, в распоряжении которых находится ограниченное количество вычислительных ресурсов. Например, его использовали в Jupiter ACE [10] с оперативной памятью в один килобайт. Что касается PostScript, то его вариация присутствует в формате PDF, а его интерпретатор встроен во многие принтеры.

Особенности языка

Sporth для передачи параметров использует машинную модель стека. Программист помещает в него набор взаимосвязанных генераторов сигнала (unit generators), которые отвечают за воспроизведение звука. Например, строка ниже сформирует синусоиду с частотой 440 Гц с амплитудой в 0,5 пунктов (инструмент имеет собственную шкалу).

440 0.5 sine

Генераторы сигнала можно объединять, используя символ "+". Например, результатом работы списка команд, представленного ниже, будет двухтональный сигнал DTMF [11].

440 0.2 sine
350 0.2 sine
+ 

Язык поддерживает работу с триггерами — единичными импульсами — которые формирует метроном (metro). Следующий пример показывает, как с помощью Sporth построить генератор огибающей [12]:

4 metro 0.5 maytrig
0.001 0.01 0.01 tenvx
1000 0.5 sine *

Sporth позволяет работать с переменными, параметрической модуляцией и непосредственно стековыми операциями. Все используемые операторы краткие и выполняются по порядку.

Такая структура языка увеличивает скорость написания кода. Это одна из главных причин, по которой его используют для проведения live-сессий — когда композитор-программист пишет музыку в реальном времени перед живой аудиторией. К слову, вы можете самостоятельно изучить все операторы и опробовать его на практике — в сети есть интерактивная среда [13] на Go.

Также на сайте можно найти несколько музыкальных примеров [14].

Как устроен Sporth — ЯП для музыкальных live-сессий - 2
Фото Slim Emcee [15] / Unsplash

Но резиденты с Hacker News отмечают [16], что у языка довольно скудная документация, которая не годится для начинающих «музыкальных программистов». Автор обещает исправить [17] этот недостаток, а пока можно обратиться к тематическому cookbook’у [18] и спецификациям на GitHub [9].

У Sporth также есть API для интеграции со сторонними приложениями. Он открывает возможности, недоступные в интерактивной среде, — например, пользовательские функции обратного вызова. В частности, Sporth уже применяют [19] разработчики фреймворка для синтеза звуков AudioKit [20] под iOS.

Аналоги

Число аналогов Sporth довольно обширно, но среди них можно выделить язык ChucK [21]. Его разработали инженеры Перри Кук (Perry Cook) и Ги Вонг (Ge Wang) из Принстонского университета специально для проведения живых выступлений. ChucK — мультипарадигмальный язык со строгой типизацией данных доступный для Windows, Linux и Mac OS X. Он поддерживает параллельное выполнение нескольких потоков и позволяет модифицировать программу прямо во время исполнения.

Документация с примерами реализации размещена на сайте проекта [21].

Помимо ChucK есть Supercollider [22] — это не только язык, но и среда для аудиосинтеза в реальном времени. Инструмент дает возможность написать кастомные GUI для работы со звуком: слайдеры, анализаторы и другие. Для управления записями можно использовать MIDI-устройства и HID [23].

Также стоит отметить такие инструменты для музыкального программирования, как Csound, Pure Data и Importu. Если вам приходилось работать с какими-либо другими языками муз. программирования, делитесь опытом в комментариях.


Дополнительное чтение из нашего «Мира Hi-Fi»:

Как устроен Sporth — ЯП для музыкальных live-сессий - 3 Что такое музыкальное программирование — кто и почему им занимается [24]
Как устроен Sporth — ЯП для музыкальных live-сессий - 4 Как ПК завоевал медиаиндустрию с помощью ПО: обсуждаем Pro Tools и Media Composer [25]
Как устроен Sporth — ЯП для музыкальных live-сессий - 5 Как треск костра, скрип дверей и шум становятся музыкой [26]

Как устроен Sporth — ЯП для музыкальных live-сессий - 6 «Все, что вы прочитаете, будет использовано против вас»: как рэп-музыка попала в зал суда [27]
Как устроен Sporth — ЯП для музыкальных live-сессий - 7 Создатели музыки к компьютерным играм: несколько самых выдающихся имён [28]
Как устроен Sporth — ЯП для музыкальных live-сессий - 8 Где взять аудиосемплы для ваших проектов: подборка из девяти тематических ресурсов [29]


Автор: Audioman

Источник [30]


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

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

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

[1] OpenMusic: https://habr.com/ru/company/audiomania/blog/461403/

[2] языках программирования: https://habr.com/ru/company/audiomania/blog/462387/

[3] Image: https://habr.com/ru/company/audiomania/blog/483504/

[4] ichael Pierce: https://unsplash.com/photos/P3c6ZxTdnTQ

[5] музыкальное программирование: https://ru.wikipedia.org/wiki/%D0%9C%D1%83%D0%B7%D1%8B%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

[6] стековый язык программирования: https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA%D0%BE%D0%B2%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA

[7] трудился: http://paulbatchelor.github.io/res/about/resume/Paul_Batchelor_Resume.pdf

[8] Google ATAP: https://en.wikipedia.org/wiki/Google_ATAP

[9] репозиторий с исходниками: https://github.com/PaulBatchelor/Sporth/blob/master/ugen_reference.txt

[10] Jupiter ACE: https://ru.wikipedia.org/wiki/Jupiter_ACE

[11] двухтональный сигнал DTMF: https://ru.wikipedia.org/wiki/DTMF

[12] генератор огибающей: https://en.wikipedia.org/wiki/Envelope_(waves)

[13] интерактивная среда: https://audiomasher.org/new

[14] музыкальных примеров: https://audiomasher.org/browse

[15] Slim Emcee: https://unsplash.com/photos/oE2gdsg8qOM

[16] отмечают: https://news.ycombinator.com/item?id=21510130

[17] обещает исправить: https://news.ycombinator.com/item?id=21510348

[18] cookbook’у: http://paulbatchelor.github.io/proj/cook/

[19] применяют: https://news.ycombinator.com/item?id=21512926

[20] AudioKit: https://audiokit.io/

[21] ChucK: https://chuck.cs.princeton.edu/doc/

[22] Supercollider: https://supercollider.github.io/

[23] HID: https://ru.wikipedia.org/wiki/USB_HID

[24] Что такое музыкальное программирование — кто и почему им занимается: https://www.audiomania.ru/content/art-6815.html

[25] Как ПК завоевал медиаиндустрию с помощью ПО: обсуждаем Pro Tools и Media Composer: https://www.audiomania.ru/content/art-6791.html

[26] Как треск костра, скрип дверей и шум становятся музыкой: https://www.audiomania.ru/content/art-6857.html

[27] «Все, что вы прочитаете, будет использовано против вас»: как рэп-музыка попала в зал суда: https://www.audiomania.ru/content/art-6873.html

[28] Создатели музыки к компьютерным играм: несколько самых выдающихся имён: https://www.audiomania.ru/content/art-6977.html

[29] Где взять аудиосемплы для ваших проектов: подборка из девяти тематических ресурсов: https://www.audiomania.ru/content/art-6670.html

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