跳转到内容

在 SuperCollider/Fire 中设计声音

来自维基教科书,开放世界中的开放书籍

图 34.3:最简单的随机嘶嘶声

[编辑 | 编辑源代码]
{WhiteNoise.ar(LFNoise2.kr(1))}.play

图 34.4:平方它

[编辑 | 编辑源代码]

对噪声进行平方运算可以使其具有更有用的动态范围,偶尔会有响亮的爆发

{WhiteNoise.ar(LFNoise2.kr(1).squared)}.play

图 34.5:更多

[编辑 | 编辑源代码]

添加另一个 .squared 以对动态范围产生更强的效果,并使用高通滤波器使嘶嘶声更加嘶嘶

{HPF.ar(WhiteNoise.ar, 1000) * LFNoise2.kr(1).squared.squared}.play

图 34.6:一个简单的爆裂声

[编辑 | 编辑源代码]
{WhiteNoise.ar * Line.ar(1, 0, 0.02, doneAction: 2)}.play

图 34.7:多个爆裂声

[编辑 | 编辑源代码]

如果我们使用适当的包络发生器而不是简单的直线,我们可以使用 Dust 随机重新触发它,从而产生可控密度的随机爆裂声

{WhiteNoise.ar * EnvGen.ar(Env.perc(0, 0.02, curve: 0), Dust.kr(1))}.play

图 34.8:更多变化

[编辑 | 编辑源代码]

通过调制每个事件的持续时间和滤波器频率来添加更多变化

(
{
	var trigs, durscale, son, resfreq;
	trigs = Dust.kr(1);
	durscale = TRand.kr(1, 1.5, trigs); // vary duration between default 20ms and 30ms
	resfreq = TExpRand.kr(100, 1000, trigs); // different resonant frequency for each one
	son = WhiteNoise.ar * EnvGen.ar(Env.perc(0, 0.02, curve: 0), trigs, timeScale: durscale);
	son = son + BPF.ar(son, resfreq, 20);
}.play
)

图 34.9:呜呜声

[编辑 | 编辑源代码]

简单尝试火焰本身发出的低沉“呜呜”声

{LPF.ar(WhiteNoise.ar, 30) * 100}.play

图 34.10:呼啸声

[编辑 | 编辑源代码]

// 我们可以用来构建火焰声音的另一个组件

{BPF.ar(WhiteNoise.ar, 30, 0.2) * 20}.play

图 34.11:形状

[编辑 | 编辑源代码]

塑造动态范围并丢弃一些低频,允许少量削波以产生不那么静态的声音。

{LeakDC.ar(LeakDC.ar(BPF.ar(WhiteNoise.ar, 30, 0.2) * 50).clip2(0.9)) * 0.5}.play

图 34.12:将所有内容整合在一起

[编辑 | 编辑源代码]
(
~firegen = {
	var trigs, durscale, resfreq;
	var noise, hissing, crackles, lapping;
	// A common noise source
	noise = WhiteNoise.ar;
	// Hissing
	hissing = HPF.ar(noise, 1000) * LFNoise2.kr(1).squared.squared;
	// Crackle
	trigs = Dust.kr(1);
	durscale = TRand.kr(1, 1.5, trigs); // vary duration between default 20ms and 30ms
	resfreq = TExpRand.kr(100, 1000, trigs); // different resonant frequency for each one
	crackles = noise * EnvGen.ar(Env.perc(0, 0.02, curve: 0), trigs, timeScale: durscale);
	crackles = crackles + BPF.ar(crackles, resfreq, 20);
	// Flame
	lapping = LeakDC.ar(LeakDC.ar(BPF.ar(noise, 30, 0.2) * 50).clip2(0.9)) * 0.5;
	// Combine them:
	([crackles, hissing, lapping] * [0.1, 0.3, 0.6]).sum * 3
};
~firegen.play
)

图 34.13:多音

[编辑 | 编辑源代码]

让我们有四个以上,每个都经过不同的滤波,以产生复合效果

(
{
	BPF.ar(~firegen,  600, 1/0.2) +
	BPF.ar(~firegen, 1200, 1/0.6) +
	BPF.ar(~firegen, 2600, 1/0.4) +
	HPF.ar(~firegen, 1000)
}.play
)
华夏公益教科书