stringtranslate.com

СуперКоллайдер

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'ом упакована в оптимизированный исполняемый файл командной строки (названный scsynth ). В большинстве случаев он управляется из языка программирования SuperCollider, но может использоваться независимо. Аудиосервер имеет следующие функции: [6]

Supernova, независимая реализация архитектуры сервера, [8] добавляет поддержку многопроцессорности посредством явной параллельной группировки узлов синтеза.

Язык программирования SuperCollider (склань)

Язык программирования SuperCollider — это динамически типизированный , собирающий мусор , объектно-ориентированный и функциональный язык с одним наследованием , похожий на Smalltalk , [5] с синтаксисом, похожим на Lisp или язык программирования C. Его архитектура обеспечивает баланс между потребностями вычислений в реальном времени и гибкостью и простотой абстрактного языка. Как и многие функциональные языки, он реализует функции как объекты первого класса , которые могут быть составлены . Функции и методы могут иметь значения аргументов по умолчанию и списки аргументов переменной длины и могут вызываться с любым порядком ключевых аргументов. Замыкания являются лексическими, а область действия является как лексической, так и динамической. Поддерживаются дополнительные функции, типичные для функциональных языков, включая создание замыканий с помощью частичного применения (явное каррирование ), оптимизацию хвостового вызова , списочные включения и сопрограммы . К особенностям относятся неявное расширение кортежей и система шаблонов без сохранения состояния. Его постоянный поиск сообщений и сборка мусора в реальном времени позволяют большим системам быть эффективными и гибко обрабатывать обработку сигналов. [6]

Поддерживая методы рефлексивного , разговорного и грамотного программирования , SuperCollider позволяет относительно легко находить новые звуковые алгоритмы [9] и разрабатывать пользовательское программное обеспечение, а также пользовательские фреймворки. Что касается знаний, специфичных для предметной области, они являются как общими (например, они позволяют представлять такие свойства, как время и высота тона в различных степенях абстракции), так и имеют многочисленные примеры реализаций для конкретных целей. [6]

Система графического интерфейса пользователя

Скриншот SuperCollider, на котором запущены инструменты графического интерфейса ixiQuarks.

Язык 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 на Mac OS X с различными элементами графического интерфейса, созданными пользователем.

SuperCollider работает на macOS , Linux , Windows и FreeBSD . Для каждой из этих операционных систем существует несколько сред редактирования языка и клиентов, которые можно использовать с SuperCollider (см. ниже). [6]

Также было продемонстрировано, что SuperCollider может работать на Android [13] и iOS . [14]

Редактирование сред

Скриншот SuperCollider Vim на puredyne linux .

Код 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] позволяет создавать и изменять псевдоклассы и псевдообъекты в реальном времени.

Смотрите также

Ссылки

  1. ^ "Releases". Github . Получено 8 января 2022 г. .
  2. ^ asynth. "SuperCollider" . Получено 20 июня 2015 г. .
  3. ^ "SuperCollider Licensing". Архивировано из оригинала 2020-08-07.
  4. ^ Дж. Маккартни, SuperCollider: новый язык синтеза в реальном времени, в Трудах Международной конференции по компьютерной музыке (ICMC'96), 1996, стр. 257–258.
  5. ^ аб Дж. Маккартни, Переосмысление языка компьютерной музыки: SuperCollider, Computer Music Journal, 26 (2002), стр. 61–68.
  6. ^ abcdefghi Скотт Уилсон; Дэвид Коттл; Ник Коллинз (2011). Книга о СуперКоллайдере. Издательство MIT. ISBN 978-0-262-23269-2. Архивировано из оригинала 2011-05-01 . Получено 2011-05-26 .
  7. ^ "Списки рассылки SuperCollider". Архивировано из оригинала 6 ноября 2009 года . Получено 20 июня 2015 года .
  8. ^ Т. Блехманн, supernova, сервер синтеза с поддержкой многопроцессорной обработки для SuperCollider, Труды конференции Linux Audio, Утрехт, 2010.
  9. ^ J. Rohrhuber, A. de Campo и Renate Wieser. Algorithms Today. Notes on Language Design for Just in Time Programming. Архивировано 28 июля 2011 г. в Wayback Machine . В трудах Международной конференции по компьютерной музыке , Барселона, 2005 г.
  10. ^ Интерфейс векторной графики предоставляется классом Pen. Различные примеры можно найти в Audiovisuals with SC Архивировано 2020-06-09 на Wayback Machine , блог Фредрика Олофссона, 02.05.2009 (обновлено 11.05.2012)
  11. ^ Рутц, ХХ (2010). «Переосмысление клиента SuperCollider...». Труды симпозиума SuperCollider . Берлин. CiteSeerX 10.1.1.186.9817 . 
  12. ^ "Системы, взаимодействующие с SC" . Получено 20 июня 2015 г.
  13. ^ Проект Android SuperCollider на GitHub
  14. ^ Tiny Music System - блог Cylob, 04.11.2009
  15. ^ "SuperCollider with emacs: scel" . Получено 20 июня 2015 г. .
  16. ^ "суперколлайдер". Атом . Получено 20 июня 2015 г.
  17. ^ "jleben/Scate". GitHub . 13 ноября 2013 г. Получено 20 июня 2015 г.
  18. ^ Коллинз, Н., Маклин, А., Рорхубер, Дж. и Уорд, А. (2003), Методы живого кодирования для производительности ноутбука, Organised Sound 8(3): стр. 321-30. doi :10.1017/S135577180300030X
  19. ^ J. Rohrhuber и A. de Campo. Ожидание и неопределенность в компьютерных музыкальных сетях. Архивировано 14 марта 2006 г. в Wayback Machine . В трудах Международной компьютерной музыкальной конференции , Майами, 2004 г.
  20. ^ Одна из многочисленных библиотек, созданных пользователями, известная как «Quarks» и опубликованная в репозитории SuperCollider Quarks.

Внешние ссылки