SuperCollider:开始吧

使用的是Nick Collins的教材,可在线浏览。在学习中建议下载该教程到本地并在SC3的环境中边看边实时运行这份笔记中的每个例子。看了其它几个我能找到的,目前觉得这本是最容易上手的,因为写的比较简洁,废话较少,所以本人的工作基本属于翻译。碰到难解的,也会加上本人的理解与方法。什么?你还不知道SuperCollider是什么?


“精华”

这是SC3,也被称为SC服务器。

它是一种专注声音合成的解释型编程语言。你不得不学习这门语言,因为:
1)愚蠢的电脑将仅能接受这门语言语法正确的表述。
2)你必须变得开始注意计算机语言的标准机制,例如迭代、条件执行、格式处理(messaging)以及容器。
3)如果你心中已有了确切的音乐上的目标,而又不得不使用这门计算机语言来制作,会让你感到挫败。

但回报是:
1)你可以使用常规软件没有给你的选项来探索音乐的任务。
2)你可以一边玩一边同时学习编程语言。
3)你正在使用的是非常易于扩展的免费软件。

在跑任何一条代码前,你需要知道三件事(Mac版,Linux/Windows键盘快捷方式可能会有变化):
1. 使用enter(fn+return),而不是return,来运行代码。[windows- alt+enter]
2. 在做任何声音合成之前,点击”Boot”按钮开启localhost server(屏幕左下角)。
3. 要停止程序运行,使用command+句号(苹果键+.)[win: alt+.]


以下是几个热身练习:

2+2   //把光标移动到这行,然后按enter —— 一个4应该出现在post窗口内
"fuck you baby".speak	 // 按下enter运行
{Pan2.ar(SinOsc.ar(440,0,0.1),0.0)}.play // 同样的, 组合一个正弦波
// SuperCollider的一个强大之处在于互动的方便:在此我用鼠标替代了原来表述频率的常量
{Pan2.ar(SinOsc.ar(MouseX.kr(440,880),0,0.1),0.0)}.play

// 另一个更复杂一些的例子。鼠标双击下边的第一个圆括号以选中全部的代码块,他们需要一次性全部运行。
//你不能用enter运行这个例子里的单行代码,因为它是由多行代码组成的一个程序。
(
{var n;
n=10;

Resonz.ar(
Mix.arFill(n,{
var freq, numcps;

freq= rrand(50,560.3);
numcps= rrand(2,20);
Pan2.ar(Gendy1.ar(6.rand,6.rand,1.0.rand,1.0.rand,freq ,freq, 1.0.rand, 1.0.rand, numcps, SinOsc.kr(exprand(0.02,0.2), 0, numcps/2, numcps/2), 0.5/(n.sqrt)), 1.0.rand2)
})
,MouseX.kr(100,2000), MouseY.kr(0.01,1.0))
;
}.play
)

SuperCollider非常强大,又因其能够在一个包内方便的完成实时合成、互动和算法创作而广受喜爱。

SC3与MAX/MSP或PD享有同样的操控自由,除了其语言为UGen图像生成(连接建立一个声音生成器及处理器的流图(flow graph))产生的强劲动力。

缺点方面,图形的可视化显示非常有限或根本不存在——我希望你不会在一个基于文本的界面下对此感到讶异。我保证你会慢慢熟悉这一切,结构会慢慢存在于你的心里,任何时候如果你感到不爽,试着在纸上画出你想法的图解。


如果看到这里,我希望你已经处于SuperCollider的环境之中了。我们将代码写为文本(Mac上为.rtf文件),当我们指导代码运行的时候,SuperCollider便迅速的解释并执行它。

SuperCollider与你也许知道的其它编程语言有着相似的控制结构,比如条件执行和循环。这是一门基于Smalltalk和C的面向对象编程语言,并且拥有很强大的Collection类,例如数组。

在这一课里,我们将尝试着使你熟悉语法,然后尽快弄出点动静来。


// 这是一个注释
/* 这同样是一个注释 */

要做音频合成,我们给SuperCollider一个建立合成器介绍的清单,即,一个有效的Unit Generators(或者说UGens)的网络。

 // 这个代码将一个正弦振荡器插入一个声相器内;
// 别急,这将在接下来的学习中进行解释。
{Pan2.ar(SinOsc.ar(440,0,0.1),0.0)}.play

(如果你运行这段代码,注意localhost GUI将显示重要的运行信息(比如CPU负载以及使用的合成器/UGens数量))


(		// 双击任何一个开始的括号以选中其中的所有内容
)
(		//选中圆括号内的所有内容
		//然后按enter
{
SinOsc.ar(440,0,0.1)
+
Pulse.ar(443,0.6,0.05)
}.play
)

所以,“选中”意味着一堆蓝色覆盖的区域或者当前光标所在行。


括号的类型

(  )  // 分组表达式
{  }  // 函数
[  ]  // 数组

SuperCollider代码与其他任何代码一样,都有很多嵌套表达式,你可以使用前文所述的方式查看代码块的范围。尝试双击下边这段代码中的任何一个括号试试:

(
if(4==4, {
	if(3==3, {
		"correct!".postln
	});
});
)

面对奇怪的代码对象我该怎么办?
使用Cmd+d调出帮助窗口:

LFSaw	// 选中并按Cmd+d

使用Cmd+j调出源码:

LFSaw 	// 选中并按Cmd+j

全部生成的文本将出现在post窗口内。按cmd+\(不是太好按)可以将它前置。


你常会看到postln和Post的介绍,它们对于检查变量运行状况及纠错很有帮助。

分别(以及联合)试试下边两段代码:

2.postln;
Post << [2,3,4,5] << nl;

之所以你会看到多于一个东西被发布出来,是因为当你执行代码的时候,SuperCollider始终会post出它最后处理的对象。即第一例里的“2",第二例里的”Post“运算符。如果你运行以下:

(
var freq;

freq=rrand(300,600);

{SinOsc.ar(freq,0,0.1)}.play;
)

你会看到在post窗口内出现对于一个Synth(代表在最后一行请求声音合成的对象)的描述。


当一切都错了会发生什么?

这将崩溃:

{SinOsc.ar(nil)}.play

还有这个:

Array.series(9,0,1)+nil

运行它们任一,在post窗口内你都会得到一堆线索(SuperCollider代码函数的执行顺序)。

这对告诉你什么造成了错误是很有效的。别被它吓到:每个人的代码都崩溃过,特别当你在研究它的时候。

有时候,你可能会使整个程序崩溃。很多都由死循环造成。这毛病没治,并且SuperCollider也没做错什么——相反,它忠实的完成了你的命令。但如果你无法参与到程序的结果中,类似这样的错误就有可能发生。这在某种程度上会发生在每个人身上,我们无法参与到我们所写代码每一行的方方面面!


Java界面
Java界面

我从哪开始探索呢?

按Cmd+O你可以打开文件。SuperCollider附带一个examples文件夹,里边有很多包含详尽帮助文档的例子。

最好试着跑几个例子,或者改改patch里那些个数字试试。

聆听发出了什么声音。

对于你们中的一些,将开始在学习的过程中学习声音合成和流程,另外的一些将对理论熟悉,但要掌握SuperCollider里边那些东西的执行方式,需要很多的时间和努力。

supercollider.sourceforge.net,在那里你能找到包含SuperCollider范例和扩展的很多各式各样的网站。


现在,如果你还有什么不确定的话,重读这篇教程,并且开始尝试一些例子。


通过SwingOSC,你可以创建一个控制patch的鼠标区域(如图):

假设经过SwingOSC官网的介绍,你把该放的东西都放在了它们应该在的位置,

SwingOSC.default.boot; // 运行以建立Java界面

JMouseBase.makeGUI // 运行我一次即可

{SinOsc.ar(JMouseX.kr(400,800),0,0.1)}.play // 鼠标在你刚创建的Java窗口内游走以控制声音

注意,这里使用的是JMouseX而不是MouseX

Be Sociable, Share!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.