Projetando sons no SuperCollider/Toques de telefone

Nos exemplos a seguir apresentaremos diferentes maneiras de se fazer a mesma coisa

Fig 25.2: CCITT

editar

Atente para o conceito de expansão multicanal no SC: inserindo Arrays nos UGens estaremos alocando cada elemento em canais diferentes:

Método por funções

editar
{SinOsc.ar([440, 350])}.play //duas senóides diferentes em canais diferentes

{Mix.new([SinOsc.ar(350), SinOsc.ar(440)])}.play // A classe Mix permite mixar tudo num mesmo canal

{Pan2.ar(Mix.new([SinOsc.ar(350), SinOsc.ar(440)]), 0, 0.4)}.play //colocando em dois canais


Método através das classes SynthDef/Synth

editar
//Aqui criaremos uma definição para futuras instâncias
(
SynthDef(\ccitt, {arg freq1, freq2, vol = 1;
	var sin1, sin2, mix, pan;
	sin1 = SinOsc.ar(freq1);
	sin2 = SinOsc.ar(freq2);
	mix = Mix.new([sin1, sin2]);
	pan = Pan2.ar(mix, 0, vol);
	Out.ar(0, pan);
	}).send(s)
)

//criando uma instância do SynthDef anterior: tente mudar os argumentos!
x = Synth(\ccitt, [\freq1, 440, \freq2, 350, \vol, 0.4]);
x.free;


Método através da classe Ndef (definindo nós dentro do servidor)

editar
(
Ndef(\dialtone, {
	Pan2.ar(SinOsc.ar([350, 440], 0, 0.2).sum)
}).play
)

// Para parar o som:
Ndef(\dialtone).free;