Как устроен Sporth — ЯП для музыкальных live-сессий
Один из предыдущих материалов мы посвятили OpenMusic — инструменту для написания музыки на ООП. Мы также говорили о языках программирования, заточенных под создание аудиокомпозиций.
Сегодня мы решили продолжить тему и рассказать о языке Sporth. Его разработали специально, чтобы композиторы могли писать компьютерную музыку во время живых выступлений.
Фото ichael Pierce / Unsplash
Что собой представляет Sporth
Часто под термином «музыкальное программирование» понимают процесс написания музыки с помощью секвенсоров, синтезаторов и ПО. Но некоторые исполнители обращаются к более «хардкорным» инструментам — программному коду и специализированным ЯП.
Один из таких языков — Sporth.
Sporth (сокращение от SoundPipe fORTH) — это стековый язык программирования, реализованный на C. Его операторы позволяют генерировать сигналы различной частоты и тональности, работать с функциональными таблицами для секвенсоров и реализовывать параметрическую модуляцию.
Язык разработал инженер Пол Батчелор (Paul Batchelor), который одно время трудился над акустическими системами с командой Google ATAP. Он презентовал свой проект на Международной конференции, посвящённой «живому» программированию (International Conference on Live Coding) в 2018 году. Хотя репозиторий с исходниками был создан на GitHub намного раньше — в 2016-м.
По словам Пола, проектируя Sporth, он вдохновлялся такими стековыми языками, как Forth и PostScript. Forth поддерживают многие CPU, в распоряжении которых находится ограниченное количество вычислительных ресурсов. Например, его использовали в Jupiter ACE с оперативной памятью в один килобайт. Что касается PostScript, то его вариация присутствует в формате PDF, а его интерпретатор встроен во многие принтеры.
Особенности языка
Sporth для передачи параметров использует машинную модель стека. Программист помещает в него набор взаимосвязанных генераторов сигнала (unit generators), которые отвечают за воспроизведение звука. Например, строка ниже сформирует синусоиду с частотой 440 Гц с амплитудой в 0,5 пунктов (инструмент имеет собственную шкалу).
440 0.5 sine
Генераторы сигнала можно объединять, используя символ »+». Например, результатом работы списка команд, представленного ниже, будет двухтональный сигнал DTMF.
440 0.2 sine
350 0.2 sine
+
Язык поддерживает работу с триггерами — единичными импульсами — которые формирует метроном (metro). Следующий пример показывает, как с помощью Sporth построить генератор огибающей:
4 metro 0.5 maytrig
0.001 0.01 0.01 tenvx
1000 0.5 sine *
Sporth позволяет работать с переменными, параметрической модуляцией и непосредственно стековыми операциями. Все используемые операторы краткие и выполняются по порядку.
Такая структура языка увеличивает скорость написания кода. Это одна из главных причин, по которой его используют для проведения live-сессий — когда композитор-программист пишет музыку в реальном времени перед живой аудиторией. К слову, вы можете самостоятельно изучить все операторы и опробовать его на практике — в сети есть интерактивная среда на Go.
Также на сайте можно найти несколько музыкальных примеров.
Фото Slim Emcee / Unsplash
Но резиденты с Hacker News отмечают, что у языка довольно скудная документация, которая не годится для начинающих «музыкальных программистов». Автор обещает исправить этот недостаток, а пока можно обратиться к тематическому cookbook«у и спецификациям на GitHub.
У Sporth также есть API для интеграции со сторонними приложениями. Он открывает возможности, недоступные в интерактивной среде, — например, пользовательские функции обратного вызова. В частности, Sporth уже применяют разработчики фреймворка для синтеза звуков AudioKit под iOS.
Аналоги
Число аналогов Sporth довольно обширно, но среди них можно выделить язык ChucK. Его разработали инженеры Перри Кук (Perry Cook) и Ги Вонг (Ge Wang) из Принстонского университета специально для проведения живых выступлений. ChucK — мультипарадигмальный язык со строгой типизацией данных доступный для Windows, Linux и Mac OS X. Он поддерживает параллельное выполнение нескольких потоков и позволяет модифицировать программу прямо во время исполнения.
Документация с примерами реализации размещена на сайте проекта.
Помимо ChucK есть Supercollider — это не только язык, но и среда для аудиосинтеза в реальном времени. Инструмент дает возможность написать кастомные GUI для работы со звуком: слайдеры, анализаторы и другие. Для управления записями можно использовать MIDI-устройства и HID.
Также стоит отметить такие инструменты для музыкального программирования, как Csound, Pure Data и Importu. Если вам приходилось работать с какими-либо другими языками муз. программирования, делитесь опытом в комментариях.
Дополнительное чтение из нашего «Мира Hi-Fi»:
Что такое музыкальное программирование — кто и почему им занимается
Как ПК завоевал медиаиндустрию с помощью ПО: обсуждаем Pro Tools и Media Composer
Как треск костра, скрип дверей и шум становятся музыкой
«Все, что вы прочитаете, будет использовано против вас»: как рэп-музыка попала в зал суда
Создатели музыки к компьютерным играм: несколько самых выдающихся имён
Где взять аудиосемплы для ваших проектов: подборка из девяти тематических ресурсов