Projetando sons no SuperCollider/Reverb de Schroeder
Fig 14.28: Recirculando Reverb de Shoroeder
editarPrimeiro inicie o servidor, se você ainda não o fez:
s = Server.local; //escolhendo servidor 'localhost' como padrão;
s.boot; //
Iremos precisar de alguma fonte sonora; iremos utilizar um arquivo que vem junto com o SC, e é utilizado como padrão em vários exemplos:
b = Buffer.read(s, "sounds/a11wlk01-44_1.aiff");
// Testando o arquivo:
b.play
Abaixo é um código que cria um reverb em um simples Synth, com 4 delay-lines separados entrecruzando-se
(
x = {
var input, output, delrd, sig, deltimes;
// Escolha qual tipo de input você quer (des)comentando as seguintes linhas:
input = Pan2.ar(PlayBuf.ar(1, b, loop: 0), -0.5); // toca o buffer, localizado um pouco mais à esquerda
//input = SoundIn.ar([0,1]); // TOME CUIDADO COM O FEEDBACK ( use fones de ouvido )
//input = Dust2.ar([0.1, 0.01]); // impulsos aleatórios
// Para ler nossos sinais atrasados (em 4 canais) de volta a partir do feedback
delrd = LocalIn.ar(4);
// Este será nossa saída, onde as coisas também serão recirculadas
output = input + delrd[[0,1]];
// entrecruzamento dos 4 delay lines entre si
sig = [output[0]+output[1], output[0]-output[1], delrd[2]+delrd[3], delrd[2]-delrd[3]];
sig = [sig[0]+sig[2], sig[1]+sig[3], sig[0]-sig[2], sig[1]-sig[3]];
//Atenuando os delays para em um decay
sig = sig * [0.4, 0.37, 0.333, 0.3];
// Aqui temos tempos de delay em milisegundos, converta em segundos,
// e então compense com um ControlDur para um bloco de delay, que sempre irá
// ser introdzido quando usarmos o feedback loop com LocalIn/Out
deltimes = [101, 143, 165, 177] * 0.001 - ControlDur.ir;
// Aplique os delays e envie os sinais em um feedback loop
LocalOut.ar(DelayC.ar(sig, deltimes, deltimes));
// Para ouvir:
Out.ar(0, output);
}.play
)
Aqui temos uma forma alternativa de fazer a mesma coisa; dessa vez utilizaremos uma matriz para representar o entrecruzamento dos fluxos de delay. A matriz substitui todos os pontos positivos e negativos, então isso é uma forma elegante para representar a mistura - veja qual você acha mais legível.
(
x = {
var input, output, delrd, sig, deltimes;
// Escolha qual tipo de input você quer (des)comentando as seguintes linhas:
input = Pan2.ar(PlayBuf.ar(1, b, loop: 0), -0.5); // // toca o buffer, localizado um pouco mais à esquerda
//input = SoundIn.ar([0,1]); // TOME CUIDADO COM O FEEDBACK ( use fones de ouvido )
//input = Dust2.ar([0.1, 0.01]); // Impulsos aleatórios
// Para ler nossos sinais atrasados (em 4 canais) de volta a partir do feedback
delrd = LocalIn.ar(4);
// Este será nossa saída, onde as coisas também serão recirculadas
output = input + delrd[[0,1]];
sig = output ++ delrd[[2,3]];
// entrecruzamento dos 4 delay lines entre si
sig = ([ [1, 1, 1, 1],
[1, -1, 1, -1],
[1, 1, -1, -1],
[1, -1, -1, 1]] * sig).sum;
//Atenuando os delays para em um decay
sig = sig * [0.4, 0.37, 0.333, 0.3];
// Aqui temos tempos de delay em milisegundos, converta em segundos,
// e então compense com um ControlDur para um bloco de delay, que sempre irá
// ser introdzido quando usarmos o feedback loop com LocalIn/Out
deltimes = [101, 143, 165, 177] * 0.001 - ControlDur.ir;
// Aplique os delays e envie os sinais em um feedback loop
LocalOut.ar(DelayC.ar(sig, deltimes, deltimes));
//Para ouvir:
Out.ar(0, output);
}.play
)
x.free;