Один из предыдущих материалов мы посвятили 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.

Что интересно, музыку пишут также с помощью вышеупомянутого стекового языка Forth, которым вдохновлялся Пол Батчелор. На нем построен проект Synstackпрограммно-аппаратная платформа для генерации звука на микроконтроллере STM32F4/F7. Synstack поддерживает более 25 операторов: генераторы сигналов (синусоида, пила, кривая Безье), фильтры, алгебраические функции и др. Forth также применяют для динамической отрисовки графики – для этого есть платформа Forth Haiku. В теории инструмент подойдет для визуализации звука.

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



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

Что такое музыкальное программирование — кто и почему им занимается
Как ПК завоевал медиаиндустрию с помощью ПО: обсуждаем Pro Tools и Media Composer
Как треск костра, скрип дверей и шум становятся музыкой

«Все, что вы прочитаете, будет использовано против вас»: как рэп-музыка попала в зал суда
Создатели музыки к компьютерным играм: несколько самых выдающихся имён
Где взять аудиосемплы для ваших проектов: подборка из девяти тематических ресурсов


Комментарии (5)


  1. EstEps
    11.01.2020 09:56

    Музыканты, как правило, не оперируют синтаксическими средствами DSL, о которых говорится в этой публикации. Это не говоря о том, что нужны неординарные математические способности, чтобы сходу вспомнить или вычислить частоту фа-диез второй октавы. Для "живых" выступлений требуется доменный язык, более комфортный для исполнителя.


    В 90-е годы были популярны так называемые трекеры — текстовые секвенсоры с несколькими одноголосными дорожками, партии для которых вводились с компьютерной клавиатуры примерно в таком вертикальном формате:


    01 D-4 64 ...
    02 ... .. ...
    03 ... .. ...
    04 ... .. ...
    05 F-4 48 A20
    06 ... .. ...
    07 E-4 48 ...
    08 ... .. ...

    Если опираться на такой формат записи, то для live-сессий был бы удобен разумный сплав:


    • сложного, математически выверенного языка для предварительной подготовки выразительных средств музыки (тембров, эффектов...);
    • записи, приближенной к нотной, для среды времени исполнения.


    1. mediaman
      11.01.2020 11:10
      +1

      В целом языков для музыкального программирования множество и они с разными концепциями. Здесь все дело в личных предпочтениях. Например, есть ORCA, в котором каждая буква – это отдельный оператор.

      Автор Sporth на сайте пишет, что стек-языки довольно новая концепция в музыкальной сфере. Синтаксис Sporth выглядит проще, чем того же SuperCollider, но на последнем проводят живые сессии (вот пример с конференции TED). Возможно, Sporth тоже обретет свою аудиторию.


  1. FForth
    11.01.2020 11:37

    Некоторые аналоги были указаны в комментариях к Вашей ранее опубликованной статье от 9 августа 2019г.
    Что такое музыкальное программирование — кто и почему им занимается, устраивая настоящие live-сессии

    Может имеет смысл дополнить информацией эту статью.

    P.S. И есть такой проект STM32F4/F7 Synstack (Polyphonic, stack based synth & livecoding environment for STM32)

    Простой стековый язык для графических демо-эффектов Forth Haiku Salon
    И местная статья по нему Forth и шейдеры


    1. Audioman Автор
      11.01.2020 12:23

      Спасибо, что напомнили! Добавили в статью.


  1. xRay
    11.01.2020 17:32

    Вот этот пример с синтезом голоса интересный
    audiomasher.org/patch/KX6FWK