Не так давно на Хабрахабре публиковалась статья ChucK — программируем звук. Так как ChucK имеет гораздо меньшую группу пользователей, и менее активно развивается, решил написать про SuperCollider — который имеет достаточно различий и преимуществ для того чтобы иметь собственную статью.
Первую версию языка опубликовал в 1996 году James McCartney как язык для аудио синтеза в реальном времени, в то время с закрытым кодом и доступную только на Mac. В 2002 году язык был выпущен под лицензией GPL, и с тех пор, с помощью многих разработчиков дошел до версии 3.4, имеет активное общества пользователей и с недавних пор целую книгу по языку.
SuperCollider динамический язык программирования, с простой объектной системой, замыканиями и уборщиком мусора ориентированный на синтез и алгоритмическую композицию. Наиболее схожими будут языки Smalltalk и Ruby.
Интерпретатор языка sclang исполняет выбранную строчку или блок кода и печатает результат — не требуется сохранение файла или компиляции, что похоже на REPL в других динамических языках.
Первый звук
Этот фрагмент кода начинает проигрывание синусоида частотой 440Hz. Можно отметить что именовние классов, функций и параметров сокращенны (SinOsc = SineOscillator, ar = audio_rate), но именование придерживается одинакового стиля, и выучивается быстро.
Примеры синтаксического сахара и композиции объектов:
Аддитивный синтез
Низкочастотный генератор
Главные преимущества текстового подхода в сравнении с закрытыми синтезаторами или графическими языками программирования: изменить структуру программы, повторить участок кода или создать абстракцию какого-то процесса дается несколькими командами, что гораздо проще распутывания проводов вручную или в графическом редакторе.
Предыдущие примеры занимались извлечением одного звука. Один из способов написания последовательностей звуков в SuperCollider это шаблоны (Patterns). Пример — проигрывание сигналов с рандомальной частотой и длительностью.
Существуют многие шаблоны позволяющие строить музыкальные фразу любой сложности.
Расширять язык можно в разные стороны:
Можно писать свои классы на языке SuperCollider, наследовать от существующих, добавлять к ним методы. Существует большое количество библиотек (Quarks) с алгоритмами не вошедшими в основную библиотеку, но интересными по отдельности. Так же можно писать свои генераторы звука как плагины на C++. Многие существующие плагины собраны как sc3-plugins.
OSC — Open Sound Control, современный протокол передачи музыкальных данных который поддерживается многими программами и инструментами — можно использовать его для общения с с другими программами или устройствами.
Хотя язык SuperCollider оптимизирован для работы со звуком, существуют интерфейсы для работы с SuperCollider на языках как Python, Haskell и Java. Также существуют переписанные с нуля языки работающие с сервером синтеза как Overtone (Clojure) и ScalaCollider (Scala).
На OS X часто используется SC.app который включает в себя среду разработки и GUI в одном, так же существуют плагины для текстовых редакторов (TextMate, Emacs, Vim).
На Windows существует не поддерживаемая на сегодня среда Psycollider, но в 3.5 версии ожидается переход GUI на Qt что возможно облегчит портирование на Windows.
На Linux существуют плагины для многих редакторов (gedit, Kate, Vim, Emacs) и GUI строится библиотекой на Java.
Язык SuperCollider может быть интересен своим высокоуровневым подходом и знакомым синтаксисом, особенно если вам интересен дизайн звука и композиция.
Ссылки:
История
Первую версию языка опубликовал в 1996 году James McCartney как язык для аудио синтеза в реальном времени, в то время с закрытым кодом и доступную только на Mac. В 2002 году язык был выпущен под лицензией GPL, и с тех пор, с помощью многих разработчиков дошел до версии 3.4, имеет активное общества пользователей и с недавних пор целую книгу по языку.
Язык
SuperCollider динамический язык программирования, с простой объектной системой, замыканиями и уборщиком мусора ориентированный на синтез и алгоритмическую композицию. Наиболее схожими будут языки Smalltalk и Ruby.
Hello World
"Hello World!".postln;
Интерпретатор языка sclang исполняет выбранную строчку или блок кода и печатает результат — не требуется сохранение файла или компиляции, что похоже на REPL в других динамических языках.
Первый звук
{ SinOsc.ar(freq: 440, mul: 0, add: 0.2) }.play;
Этот фрагмент кода начинает проигрывание синусоида частотой 440Hz. Можно отметить что именовние классов, функций и параметров сокращенны (SinOsc = SineOscillator, ar = audio_rate), но именование придерживается одинакового стиля, и выучивается быстро.
Примеры синтаксического сахара и композиции объектов:
Аддитивный синтез
// play a mixture of pink noise and an 800 Hz sine tone
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;
Низкочастотный генератор
{ //SinOsc (sci-fi)
var lfo;
lfo = SinOsc.ar(freq: 10, mul: 100, add: 400);
SinOsc.ar(lfo, mul: 0.5)
}.play;
Главные преимущества текстового подхода в сравнении с закрытыми синтезаторами или графическими языками программирования: изменить структуру программы, повторить участок кода или создать абстракцию какого-то процесса дается несколькими командами, что гораздо проще распутывания проводов вручную или в графическом редакторе.
Композиция
Предыдущие примеры занимались извлечением одного звука. Один из способов написания последовательностей звуков в SuperCollider это шаблоны (Patterns). Пример — проигрывание сигналов с рандомальной частотой и длительностью.
Pbind(
\freq, Pfunc({rrand(100, 900)}),
\dur, Pfunc({rrand(0.1, 1.5)})).play
Существуют многие шаблоны позволяющие строить музыкальные фразу любой сложности.
Расширение функциональности
Расширять язык можно в разные стороны:
SuperCollider
Можно писать свои классы на языке SuperCollider, наследовать от существующих, добавлять к ним методы. Существует большое количество библиотек (Quarks) с алгоритмами не вошедшими в основную библиотеку, но интересными по отдельности. Так же можно писать свои генераторы звука как плагины на C++. Многие существующие плагины собраны как sc3-plugins.
OSC
OSC — Open Sound Control, современный протокол передачи музыкальных данных который поддерживается многими программами и инструментами — можно использовать его для общения с с другими программами или устройствами.
Альтернативы
Хотя язык SuperCollider оптимизирован для работы со звуком, существуют интерфейсы для работы с SuperCollider на языках как Python, Haskell и Java. Также существуют переписанные с нуля языки работающие с сервером синтеза как Overtone (Clojure) и ScalaCollider (Scala).
Инструменты
На OS X часто используется SC.app который включает в себя среду разработки и GUI в одном, так же существуют плагины для текстовых редакторов (TextMate, Emacs, Vim).
На Windows существует не поддерживаемая на сегодня среда Psycollider, но в 3.5 версии ожидается переход GUI на Qt что возможно облегчит портирование на Windows.
На Linux существуют плагины для многих редакторов (gedit, Kate, Vim, Emacs) и GUI строится библиотекой на Java.
Вместо заключения
Язык SuperCollider может быть интересен своим высокоуровневым подходом и знакомым синтаксисом, особенно если вам интересен дизайн звука и композиция.
Ссылки: