SuperCollider




body.skin-minerva .mw-parser-output table.infobox caption{text-align:center}




































SuperCollider
開發者
James McCartney 和其他
初始版本
1996
穩定版本

穩定版本
3.9.0
(2018年1月14日,​12個月前​(2018-01-14


操作系统
Linux, OS X, Windows
许可协议
GNU通用公共许可协议
網站
http://supercollider.github.io/
源代码库
  • https://github.com/SuperCollider/SuperCollider
編輯維基數據鏈接

SuperCollider 是一个最初由 James McCartney 在1996年发布的编程语言和声音编程环境,主要用于实时声音合成和算法作曲。[1][2]


自此之后,它逐步变成一个被科学家与艺术家们共同开发和操作声音的系统。这个高效且有表现力的动态语言,为声学、 算法音乐和交互式编程英语Interactive programming提供了一个框架。[3]


在2002年以GNU通用公共许可协议发布,SuperCollider 是自由软件。




目录






  • 1 架构


    • 1.1 SuperCollider 合成器服务器 (scsynth)


    • 1.2 SuperCollider 编程语言 (sclang)




  • 2 示例代码


  • 3 参考资料


  • 4 外部链接





架构


从版本3开始,SuperCollider被分为两部分:一个服务器,scsynth;一个客户端,sclang。两者通过OSC(Open Sound Control英语Open Sound Control)通信。


SC 的语言结合了 Smalltalk 的面向对象特性、来自函数式编程语言的特性和类C语言的语法。


SC 的服务器支持简单的C扩展API,使它很简单的编写高效的声音算法。因为外界对服务器的操作都经过OSC,所以很方便地使用其他语言或应用操作它。



SuperCollider 合成器服务器 (scsynth)


SuperCollider的声音产生捆绑在一个优化的命令行可执行程序(scsynth)。大部分情况下它将被SuperCollider编程语言控制,但也可以被独立地使用。这个音频服务器有下列的特点:[3]




  • Open Sound Control英语Open Sound Control 接入

  • 简单的 ANSI C 插件 API

  • 支持任意数量的输入和输出频道[4]

  • 一个以合成节点构成的有序树结构定义了执行的顺序

  • 能动态重建信号流向的总线系统

  • 可供读写的缓冲块

  • 根据需要以不同的速率计算:音频速率、控制速率和需求速率



SuperCollider 编程语言 (sclang)


SuperCollider 编程语言是一个类似于 Smalltalk 的动态类型、 垃圾回收、 单继承的面向对象和函数式编程语言,[2] 它的语法类似LISP或者C语言。它的架构是在实时计算需求和抽象语言的灵活、简洁性之间的折衷。和许多函数式编程语言类似,它实现了函数作为一级对象,使得函数可以复合。函数和方法支持缺省参数、可变参数,调用时可以使用任意次序的关键词参数。 闭包 是词法的, 作用域 既有词法作用域和动态作用域。也支持函数式编程语言的其他典型特性,包括尾调用优化,列表解析英语List comprehension和协程。 它特有功能包括隐式的元组扩展和无状态的模式系统。它的常量时间的消息查找和实时的垃圾回收 让大型系统保持高效与信号处理的灵活。[3]





示例代码


// 打印 "Hello world!"
"Hello world!".postln;

// 播放一个800Hz正弦波与粉噪音的混合
{ 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 } };





参考资料





  1. ^ J. McCartney, SuperCollider: A new real time synthesis language, in Proc. International Computer Music Conference (ICMC’96), 1996, pp. 257–258.


  2. ^ 2.02.1 J. McCartney, Rethinking the computer music language: SuperCollider, Computer Music Journal, 26 (2002), pp. 61–68.


  3. ^ 3.03.13.2 Scott Wilson; David Cottle; Nick Collins. The SuperCollider Book. The MIT Press. 2011 [2013-10-13]. ISBN 978-0-262-23269-2. (原始内容存档于2011-05-01). 


  4. ^ BEASTmulch tools for multichannel audio 互联网档案馆的存檔,存档日期2009-11-06.




外部链接



  • SuperCollider 官方网站

  • SuperCollider 用户邮件列表

  • Nick Collins 关于 SuperCollider 的工作坊

  • SuperCollider 在线帮助文件




Comments

Popular posts from this blog

Information security

Volkswagen Group MQB platform

刘萌萌