SuperCollider — среда и язык программирования , изначально выпущенные в 1996 году Джеймсом Маккартни для синтеза звука в реальном времени и алгоритмической композиции . [4] [5]
С тех пор он превратился в систему, используемую и дорабатываемую как учеными, так и художниками, работающими со звуком. Это динамический язык программирования, предоставляющий основу для акустических исследований , алгоритмической музыки , интерактивного программирования и живого кодирования .
Первоначально выпущенный на условиях GPL-2.0 или более поздней версии в 2002 году, а с версии 3.4 — на условиях GPL-3.0 или более поздней версии , SuperCollider является бесплатным программным обеспечением с открытым исходным кодом .
Начиная с версии 3, среда SuperCollider была разделена на два компонента: сервер , scsynth ; и клиент , sclang . Эти компоненты взаимодействуют с помощью 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 позволяет пользователям создавать кроссплатформенные графические пользовательские интерфейсы для приложений. Стандартная библиотека классов с компонентами пользовательского интерфейса может быть расширена рядом доступных фреймворков. Для интерактивного программирования система поддерживает программный доступ к файлам кода в формате Rich Text. Он может использоваться для генерации векторной графики алгоритмически. [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 . ar ( 0.01 ) }. play ;// модулируем частоту синусоидального тона, а также амплитуду шумового сигнала другим синусоидальным сигналом, // частота которого зависит от горизонтального положения указателя мыши ( { 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 ]. collect { | elem , idx | elem * idx };
// Факториальная функция f = { | x | if ( x == 0 ) { 1 } { f .( x - 1 ) * x } };
// «Эмуляция Pan Sonic - Katodivaihe - lahetys» - Мигель Неграо ( { var a , b , c , d , n , e , f , out ;а = Импульс . ar ( 8 ) * 1,5 ;b = БелыйШум.ar * Env ( [ 1.0 , 1.0 , 0.0 ] , [ 0.01 , 0.01 ] , \ step ) .ar ( 0 , Импульс.ar ( 1 ) ) ; b = СвободныйГлагол.ar ( b , 0.5 , 0.4 ) * 2.5 ; c = SinOsc.ar ( 40 ) * Env.perc ( 0.01 , 0.2 ) .ar ( 0 , TDuty.ar ( Dseq ( [ 1/4 , 1/2 , 1/8 , 1/8 ] , inf ) ) ) ; 5.do { c = ( c.distortion + c ) * 0.75 } ; c = c * 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 ) } ! н )). сумма * 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 ;f = Blip.ar ( 100 ) * Blip.ar ( 100 ) * Env ( [ 0.0 , 0.0 , 1.0 ], [ 8 , 8 ] , [ \ step , \ linear , \ step ] ) .ar ( 0 , Импульс.ar ( 1/16 ) ) * 2 ; вых = (( а + б + в + е ) ! 2 ) + г + е ; вых = вых * 0,2}. играть )
Как универсальный динамический язык программирования , SuperCollider может использоваться для живого кодирования , т. е. представлений, которые включают в себя изменение и выполнение кода исполнителем на лету. [18] Определенные виды прокси служат в качестве высокоуровневых заполнителей для объектов синтеза, которые могут быть заменены или изменены во время выполнения. Среды позволяют совместно использовать и изменять объекты и обрабатывать объявления по сетям. [19] Различные библиотеки расширений поддерживают различные абстракции и доступ к звуковым объектам, например, dewdrop_lib [20] позволяет создавать и изменять псевдоклассы и псевдообъекты в реальном времени.