- PVSM.RU - https://www.pvsm.ru -
Один из предыдущих материалов мы посвятили OpenMusic [1] — инструменту для написания музыки на ООП. Мы также говорили о языках программирования [2], заточенных под создание аудиокомпозиций.
Сегодня мы решили продолжить тему и рассказать о языке Sporth. Его разработали специально, чтобы композиторы могли писать компьютерную музыку во время живых выступлений.
[3]
Фото ichael Pierce [4] / Unsplash
Часто под термином «музыкальное программирование [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].

Фото 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. Если вам приходилось работать с какими-либо другими языками муз. программирования, делитесь опытом в комментариях.
Что такое музыкальное программирование — кто и почему им занимается [24]
Как ПК завоевал медиаиндустрию с помощью ПО: обсуждаем Pro Tools и Media Composer [25]
Как треск костра, скрип дверей и шум становятся музыкой [26]
«Все, что вы прочитаете, будет использовано против вас»: как рэп-музыка попала в зал суда [27]
Создатели музыки к компьютерным играм: несколько самых выдающихся имён [28]
Где взять аудиосемплы для ваших проектов: подборка из девяти тематических ресурсов [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
Нажмите здесь для печати.