SuperCollider — это среда и язык программирования , первоначально выпущенный в 1996 году Джеймсом Маккартни для синтеза звука в реальном времени и алгоритмической композиции . [4] [5]
С тех пор она превратилась в систему, используемую и развиваемую как учеными, так и художниками, работающими со звуком. Это динамический язык программирования , обеспечивающий основу для акустических исследований , алгоритмической музыки , интерактивного программирования и живого кодирования .
Первоначально выпущенный на условиях GPL-2.0 или более поздней версии в 2002 году, а начиная с версии 3.4 — под лицензией GPL-3.0 или более поздней версии , SuperCollider является бесплатным программным обеспечением с открытым исходным кодом .
Начиная с версии 3, среда SuperCollider разделена на два компонента : сервер scsynth ; и клиент , скланг . Эти компоненты взаимодействуют с помощью OSC ( Open Sound Control ). [6]
Язык SC сочетает в себе объектно -ориентированную структуру Smalltalk и функции функциональных языков программирования с синтаксисом семейства C. [6]
Приложение SC Server поддерживает простые API- интерфейсы плагинов C и C++ , что позволяет легко писать эффективные звуковые алгоритмы ( генераторы единиц измерения ), которые затем можно объединять в графики вычислений. Поскольку все внешнее управление на сервере происходит через OSC, его можно использовать с другими языками или приложениями. [6]
Генерация звука SuperCollider включена в оптимизированный исполняемый файл командной строки (названный scsynth ). В большинстве случаев им управляют из языка программирования SuperCollider, но его можно использовать и независимо. Аудиосервер имеет следующие возможности: [6]
Supernova, независимая реализация серверной архитектуры, [8] добавляет поддержку многопроцессорности посредством явной параллельной группировки узлов синтеза.
Язык программирования SuperCollider — это динамически типизированный , со сборкой мусора , объектно-ориентированный и функциональный язык с единственным наследованием , похожий на Smalltalk , [5] с синтаксисом, похожим на Lisp или язык программирования C. Его архитектура обеспечивает баланс между потребностями вычислений в реальном времени и гибкостью и простотой абстрактного языка. Как и многие функциональные языки, он реализует функции как первоклассные объекты, которые можно компоновать . Функции и методы могут иметь значения аргументов по умолчанию и списки аргументов переменной длины и могут вызываться с любым порядком аргументов ключевых слов. Замыкания являются лексическими, а область видимости одновременно лексической и динамической. Поддерживаются дополнительные функции, типичные для функциональных языков, включая создание замыканий посредством частичного применения (явное каррирование ), оптимизацию хвостовых вызовов , понимание списков и сопрограммы . Особенности включают неявное расширение кортежей и систему шаблонов без сохранения состояния. Его постоянный поиск сообщений и сбор мусора в реальном времени позволяют большим системам быть эффективными и гибко обрабатывать сигналы. [6]
Поддерживая методы рефлексивного , диалогового и грамотного программирования , SuperCollider позволяет относительно легко находить новые звуковые алгоритмы [9] и разрабатывать специальное программное обеспечение, а также собственные фреймворки. Что касается знаний, специфичных для предметной области, они являются как общими (например, они позволяют представлять такие свойства, как время и шаг, с различной степенью абстракции), так и имеют множество примеров реализации для конкретных целей. [6]
Язык SuperCollider позволяет пользователям создавать кроссплатформенные графические пользовательские интерфейсы для приложений. Стандартная библиотека классов с компонентами пользовательского интерфейса может быть расширена за счет ряда доступных платформ. Для интерактивного программирования система поддерживает программный доступ к файлам с форматированным текстом. Его можно использовать для алгоритмического создания векторной графики . [10]
Поскольку сервер управляется с помощью Open Sound Control (OSC), для управления сервером можно использовать различные приложения. Обычно используются языковые среды SuperCollider (см. ниже), но можно использовать и другие системы, поддерживающие OSC, например Pure Data . [6]
Существуют «сторонние» клиенты для сервера SuperCollider, включая rsc3, клиент Scheme , hsc3, основанный на Haskell , ScalaCollider, [11] на основе Scala , Overtone, основанный на Clojure , и Sonic Pi . [12] Они отличаются от сред разработки, упомянутых ниже, поскольку они не предоставляют интерфейс к языку программирования SuperCollider, вместо этого они напрямую взаимодействуют с аудиосервером и предоставляют свои собственные подходы к облегчению пользовательского самовыражения. [6]
SuperCollider работает на macOS , Linux , Windows и FreeBSD . Для каждой из этих операционных систем существует несколько сред и клиентов языкового редактирования, которые можно использовать с SuperCollider (см. ниже). [6]
Также было продемонстрировано, что SuperCollider может работать на Android [13] и iOS . [14]
Код SuperCollider чаще всего редактируется и используется в собственной кроссплатформенной среде IDE, основанной на Qt и поддерживающей Linux, Mac и Windows.
Другие среды разработки с поддержкой SuperCollider включают:
// воспроизводим смесь розового шума и синусоидального тона частотой 800 Гц { SinOsc . ar ( 800,0,0.1 ) + PinkNoise . _ _ _ _ ар ( 0,01 ) }. играть ; // модулируем частоту синусоидального тона, а также амплитуду шумового сигнала другим синусоидальным сигналом, // частота которого зависит от горизонтального положения указателя мыши ( { var x = SinOsc . ar ( MouseX . kr ( 1 , 100 ) ) ; SinOsc.ar ( 300 * x + 800 , 0 , 0.1 ) + PinkNoise.ar ( 0.1 * x + 0.1 ) } .play ; ) _ _
// Итерация списка: умножаем элементы коллекции на их индексы [ 1 , 2 , 5 , 10 , - 3 ]. собрать { | элемент , idx | элемент * идентификатор };
// Факториальная функция f = { | х | если ( Икс == 0 ) { 1 } { ж .( Икс - 1 ) * Икс } };
// «Эмуляция Pan Sonic - Katodivaihe - lahetys» - Мигель Неграо ( { var a , b , c , d , n , e , f , out ;а = Импульс . ар ( 8 ) * 1,5 ;б = Белый шум . ar * Env ([ 1.0 , 1.0 , 0.0 ],[ 0.01 , 0.01 ], \step ). ar ( 0 , Импульс.ar ( 1 ) ) ; _ б = FreeVerb . ар ( б , 0,5 , 0,4 ) * 2,5 ; с = СинОск . ar ( 40 ) * Конверт . процент ( 0,01 , 0,2 ). ar ( 0 , TDuty . ar ( Dseq ( [ 1/4 , 1/2 , 1/8 , 1/8 ] , inf ) ) ) ; _ _ _ 5 . делать { с = ( с . искажать + с ) * 0,75 }; с = с * 1,5 ; d = ФНЧ . ar ( Saw . ar ([ 20 , 47 ]). sum , XLine . ar ( 4000 , 200 , 0.5 )) * Env . проц . ar ( 0 , Импульс . ar ( 1/16 ) ) * 0,5 ; _ d = ( GVerb . ar ( d , размер комнаты : 10 , время обращения : 6 ) * 200 ). клип ( -1,0 , 1,0 ) * 0,3 ; _ п = 12 ; e = ( Saw . ar ( 40 * ( 1 .. n ) * ({ LFNoise1 . ar ( 0,1 ). диапазон ( 1 , 1,01 ) } ! n ) ) * ({ LFNoise1 . ar ( 0,1 ). диапазон ( 0,0 , 1.0 ) } ! n )). сумма * 10 ; е = CombC . ар ( е , 0,1 , 0,1 , 4 ) + е ; е = е . tanh * 0.3 * SinOsc . ар ( 0,05 ). диапазон ( 0,5 , 1,0 ); е = е . дуп ; е = е * SinOsc . ар ( 0,03 ). диапазон ( 0,2 , 1,0 ) * 0,5 ;е = Блип . ar ( 100 ) * Blip . ar ( 100 ) * Env ([ 0.0 , 0.0 , 1.0 ],[ 8 , 8 ],[ \step , \linear , \step ]) . ar ( 0 , Импульс . ar ( 1/16 ) ) * 2 ; _ вне знак равно (( а + б + с + ж ) ! 2 ) + d + е ; выход = выход * 0,2}. играть )
Как универсальный динамический язык программирования , SuperCollider может использоваться для живого кодирования , т.е. для действий, в которых исполнитель изменяет и выполняет код на лету. [18] Определенные виды прокси служат заполнителями высокого уровня для объектов синтеза, которые можно заменять и удалять или изменять во время выполнения. Среды позволяют совместно использовать и изменять объекты и объявления процессов по сети. [19] Различные библиотеки расширений поддерживают различную абстракцию и доступ к звуковым объектам, например dewdrop_lib [20] позволяет создавать и модифицировать псевдоклассы и псевдообъекты в реальном времени.