6.3 Usando Seus Próprios Synthdefs🔗
Criando um SynthDef🔗
Embora o FoxDot venha com seu próprio conjunto de SynthDefs para você controlar, talvez você queira escrever o seu próprio ou usar um que já tenha criado. Esta página mostra como escrever um SynthDef para ser usado com o FoxDot. Será necessário um conhecimento básico sobre SynthDefs do SuperCollider; se quiser saber mais, você pode visitar a documentação do SuperCollider sobre o assunto.
Vamos começar com um SynthDef muito básico escrito em SuperCollider, feito a partir de uma onda senoidal e um envelope percussivo básico. Se estivermos controlando a amplitude e o panorama também, ele poderá ficar mais ou menos assim:
SynthDef.new(\sine, {|amp=1, sus=1, pan=0, freq=0|
var osc, env;
osc=SinOsc.ar(freq, mul: amp);
env=EnvGen.ar(
Env.perc(attackTime: 0.01, releaseTime: sus),
doneAction: 2
);
osc=(osc * env);
osc = Pan2.ar(osc, pan);
Out.ar(0, osc);
}).add;
Para acionar mensagens de sintetizador no SuperCollider a partir do FoxDot, basta fornecer ao FoxDot uma referência ao SynthDef. Você pode fazer isso executando o seguinte código no FoxDot:
O sine à esquerda é como o FoxDot se referirá ao sintetizador, e o "sine" entre parênteses à direita é o nome do SynthDef no SuperCollider. Eles não precisam ter o mesmo nome, mas faz sentido manter a consistência. Depois de ter o SynthDef sine no FoxDot, você pode usá-lo com um objeto player como qualquer outro. Por exemplo:
No entanto, se você tentar usar efeitos no FoxDot, verá que não funciona:
Para poder "encadear" efeitos, você precisa fazer alguns ajustes no SynthDef do SuperCollider. Primeiro de tudo, você precisa fornecer ao SynthDef um argumento de bus, que armazenará a saída do sintetizador à medida que os efeitos forem adicionados. Em seguida, você precisa usar In.kr para o valor freq (você está atualmente lendo-o de um bus, não fornecendo-o diretamente) e, então, ReplaceOut.ar em vez de Out.ar na última linha, para que possamos gravar o sinal de áudio no barramento de efeitos em vez do dispositivo de áudio do seu computador. Seu novo SynthDef deve ficar mais ou menos assim:
SynthDef.new(\sine, {|amp=1, sus=1, pan=0, bus=0, freq=0|
var osc, env;
freq = In.kr(bus, 1);
osc=SinOsc.ar(freq, mul: amp);
env=EnvGen.ar(
Env.perc(attackTime: 0.01, releaseTime: sus),
doneAction: 0
);
osc=(osc * env);
osc = Pan2.ar(osc, pan);
ReplaceOut.ar(bus, osc);
}).add;
Salvando seu SynthDef🔗
Se você deseja salvar seu SynthDef (ou já o salvou) e deseja carregá-lo na memória do FoxDot, você pode usar a classe FileSynthDef. Você precisará nomear o arquivo com o mesmo nome do SynthDef. Portanto, no nosso exemplo acima, precisaríamos salvá-lo como sine.scd. O arquivo precisa ser salvo em FoxDot/osc/scsyndef, onde você encontrará os outros arquivos .scd usados pelo FoxDot. Você pode encontrá-lo acessando o diretório de instalação do Python e, em seguida, indo para /site-packages/FoxDot/osc/scsyndef.
Para carregar o SynthDef durante uma sessão FoxDot, crie o SynthDef e use o método .add() para carregá-lo no SuperCollider da seguinte maneira:
Importante🔗
Certifique-se de que todos os argumentos doneAction estejam definidos como 0 para que o nó não seja liberado imediatamente. Efeitos como reverb ou echo exigem que o sintetizador não seja liberado até mais tarde. Usar um valor doneAction de 4 não liberará todos os nós e fará com que o SuperCollider fique sem memória – entao, tenha cuidado! Agora tente executar o código FoxDot abaixo e você deverá ouvir o som com os efeitos aplicados!