О звуке простыми словами42Производители Hi-Fi.
Истории и интервью111Репортажи с заводов65Репортажи с Hi-Fi выставок69"Сделай сам"44Готовые проекты Аудиомании42Пресса об Аудиомании50Видео499Фотогалерея100Интересное о звуке806Новости мира Hi-Fi2582Музыкальные и кинообзоры624Глоссарий
Как устроен Sporth — ЯП для музыкальных live-сессий
Один из предыдущих материалов мы посвятили OpenMusic — инструменту для написания музыки на ООП. Мы также говорили о языках программирования, заточенных под создание аудиокомпозиций.
Сегодня мы решили продолжить тему и рассказать о языке Sporth. Его разработали специально, чтобы композиторы могли писать компьютерную музыку во время живых выступлений.
Что собой представляет 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 пунктов (инструмент имеет собственную шкалу).
Генераторы сигнала можно объединять, используя символ "+". Например, результатом работы списка команд, представленного ниже, будет двухтональный сигнал DTMF.
350 0.2 sine + |
Язык поддерживает работу с триггерами — единичными импульсами — которые формирует метроном (metro). Следующий пример показывает, как с помощью Sporth построить генератор огибающей:
0.001 0.01 0.01 tenvx 1000 0.5 sine * |
Sporth позволяет работать с переменными, параметрической модуляцией и непосредственно стековыми операциями. Все используемые операторы краткие и выполняются по порядку.
Такая структура языка увеличивает скорость написания кода. Это одна из главных причин, по которой его используют для проведения live-сессий — когда композитор-программист пишет музыку в реальном времени перед живой аудиторией. К слову, вы можете самостоятельно изучить все операторы и опробовать его на практике — в сети есть интерактивная среда на Go.
У Sporth также есть API для интеграции со сторонними приложениями. Он открывает возможности, недоступные в интерактивной среде, — например, пользовательские функции обратного вызова. В частности, Sporth уже применяют разработчики фреймворка для синтеза звуков AudioKit под iOS.
Аналоги
Число аналогов Sporth довольно обширно, но среди них можно выделить язык ChucK. Его разработали инженеры Перри Кук (Perry Cook) и Ги Вонг (Ge Wang) из Принстонского университета специально для проведения живых выступлений. ChucK — мультипарадигмальный язык со строгой типизацией данных доступный для Windows, Linux и Mac OS X. Он поддерживает параллельное выполнение нескольких потоков и позволяет модифицировать программу прямо во время исполнения.
Документация с примерами реализации размещена на сайте проекта.
Помимо ChucK есть Supercollider — это не только язык, но и среда для аудиосинтеза в реальном времени. Инструмент дает возможность написать кастомные GUI для работы со звуком: слайдеры, анализаторы и другие. Для управления записями можно использовать MIDI-устройства и HID.
Что интересно, музыку пишут также с помощью вышеупомянутого стекового языка Forth, которым вдохновлялся Пол Батчелор. На нем построен проект Synstack – программно-аппаратная платформа для генерации звука на микроконтроллере STM32F4/F7. Synstack поддерживает более 25 операторов: генераторы сигналов (синусоида, пила, кривая Безье), фильтры, алгебраические функции и др. Forth также применяют для динамической отрисовки графики – для этого есть платформа Forth Haiku. В теории инструмент подойдет для визуализации звука.
Также стоит отметить такие инструменты для музыкального программирования, как Csound, Pure Data и Importu. Если вам приходилось работать с какими-либо другими языками муз. программирования, делитесь опытом в комментариях.