SuperCollider 经验分享

你想象SC有多牛逼,它就比你想象的牛逼一万倍。

-∞. 想到什么说什么,绝对没关联,铁定有遗漏。记住,一切貌似神乎其神的高级玩意当你真正用心去了解学习之后,都不过如此。

-8. 从版本3.6开始,载入一个音频文件得这么写:

~chooston = Buffer.read(s, Platform.resourceDir +/+ "sounds/a11wlk01.wav");

之前的代码在3.6中是无效的。

-7. 从版本3.6开始,把鼠标输入位置放在代码块的圆括号里按下 command + enter 会自动执行括号内的全部内容,无需选中全部代码再执行。

Continue reading SuperCollider 经验分享

SuperCollider:例程和任务

在开始本课之前,请确保你已载入了上一课的\bleep SynthDef

目前为止,调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段,一个具备一定量执行阶段的函数是很有帮助的。通过.value,它并非一次性被全部评估,但能够在每个多阶段中“产出(yield)”它的当前值。

Continue reading SuperCollider:例程和任务

SuperCollider:调度

Scheduling

一些相关的帮助文档
[SystemClock]
[TempoClock]
[AppClock]

// 载入我先——这个声音将被用于记下来的调度小样
// 我们现在运用SynthDef和Synth,这很重要
// 注意doneAction!
(
SynthDef(\bleep,{ arg out=0, note=60, amp=0.5, pan=0.0;
	var freq, env;
	freq = note.midicps;
	env = EnvGen.ar(
					Env([0,1,1,0],[0.01, 0.1, 0.2]),
					levelScale:amp,
					doneAction:2
				);
	Out.ar(out,
		Pan2.ar(Blip.ar(freq) * env, pan)
	)
}).load(s);
)

这个SynthDef使用了一个doneAction为2的包络,这使得一个合成器由定义制造,并且在包络结束后释放(deallocate)自身。这至关重要,否则在我们载入它后它会永远挂在那!


你可以非常方便的建立一个重复机制。全局的SystemClock以秒进行调度。SystemClock是最值得信赖的时钟。

// 从距现在0秒开始一个进程,之后每1秒重复一次
(
SystemClock.sched(0.0,//从距现在0秒开始一个进程,即,立马
	{//一个表明你希望调度什么的函数
		Synth(\bleep);
		1		//每10秒重复一次
	}
)
)

(最后从函数返回的东西是函数被调用的间隔时间;你可以返回一个数字,或nilnil将停止调度)

Continue reading SuperCollider:调度

SuperCollider:合成器定义

SynthDef

{}.play 标志法并非SuperCollider 3的首选标记法,但他却允许我们对合成快速上手。从现在起,你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建,这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。
Continue reading SuperCollider:合成器定义