Ordre d'execution <
Index >
OSC
Bus
- rappel : il existe deux ensembles (audio et controle) indexables de bus, servant d'intermediaires entre les synths.
- similarite avec les bus d'une table de mixage : ils conduisent des donnees d'un point a un autre.
- (un bus sur le serveur est un paquet de donnees a vitesse audio ou de controle, lisible et inscriptible, atteignable par index dans l'array correspondant (audio ou control busses) [~])
- le nombre de bus audio et control est fixe au lancement du serveur
- parametrable avec ServerOptions∞
- par defaut : 128 bus audio et 4096 bus de controle
organisation des bus Audio sur le serveur
- prends en compte la carte son disponible
les premiers bus dans l'array sont respectivement:
- les sorties vers la carte son (nombre defini dans ServerOptions , 8 par defaut)
- les entrees de la carte son (nombre defini dans ServerOptions, 8 par defaut)
- les bus suivant sont des bus "prives", servant de communication entre les synths
In, Out
- on utilise les UGens In et Out dans les Def pour lire et ecrire dans les bus.
- Out.ar([0, 1]) "attaque" les deux premieres sorties de la carte son.
- In.ar(8) (dans le cas de la configurtion par defaut) lit le signal venant du 1er canal de la carte son.
- deux arguments: index (offset dans l'array), et array de signaux audio.
(
SynthDef.new("tutorial-SinOsc-stereo", { var outArray;
outArray = [SinOsc.ar(440, 0, 0.2), Saw.ar(442, 0.2)];
Out.ar(0, outArray); // ecrit sur les bus 0 et 1
}).play;
)
OutputProxy [~]
AudioIn
- prends en compte les link building service∞ entrees physiques sans se soucier du nombre d'entrees-sorties definis dans ServerOptions∞ [...]
- AudioIn∞.ar([1, 2]) lit les deux premieres entrees de la carte son.
Multicanaux
- il n'y a pas de bus multicanal en soi sur le serveur
- la creation d'un objet Bus multicanal [...ex...] alloue plusieurs bus contigus sur le serveur
- les objets In et Out multicanaux [...ex...] fonctionnent de meme
L'objet Bus
- representation dans sclang d'un bus de controle ou audio du serveur
- integre (encapsulate) tout les messages osc valides pour un bus sur le serveur
- l'objet Bus facilite l'allocation et la deallocation des bus buy term paper∞
- a priori pas necessaire, l'interconnexion de deux synths peut se faire en utilisant respectivement un objet Out.ar et un objet In.ar avec le meme index ( et le meme nombre de canaux)
[...ex...]
- la creation de l'objet Bus alloue automatiquement un index _libre_ sur le serveur
- la suppression de l'objet libere automatiquement cet index pour une utilisation future
- reste que l'affectation d'un bus a un synth se fait par son index
[...ex...]
creation
b = Bus.control(s, 2); // Get a two channel control Bus
c = Bus.audio(s); // Get a one channel private audio Bus (one is the default)
liberation
b.free
c.free
autres methodes
(
SynthDef("inFreq", { arg bus, freqOffset = 0;
Out.ar(0, SinOsc.ar(In.kr(bus) + freqOffset, 0, 0.5));
}).send(s);
SynthDef("outFreq", { arg freq = 400, bus;
Out.kr(bus, SinOsc.kr(1, 0, freq/40, freq));
}).send(s);
b = Bus.control(s,1);
)
(
x = Synth.new("outFreq", [\bus, b.index]);
y = Synth.after(x, "inFreq", [\bus, b.index]);
z = Synth.after(x, "inFreq", [\bus, b.index, \freqOffset, 200]);
)
x.free; y.free; z.free; b.free;
(
var busIndex = 0; //vous etes responsable de l'allocation (->verifier que l'index est libre)
x = Synth.new("outFreq", [\bus, busIndex]);
y = Synth.after(x, "inFreq", [\bus, busIndex]);
z = Synth.after(x, "inFreq", [\bus, busIndex, \freqOffset, 200]);
)
x.free; y.free; z.free;
(
// deux bus de controle, de valeur 880 et 884.
b = Bus.control(s, 1); b.set(880);
c = Bus.control(s, 1); c.set(884);
// creation d'un synth avec deux arguments de frequence
x = SynthDef("tutorial-map", { arg freq1 = 440, freq2 = 440;
Out.ar(0, SinOsc.ar([freq1, freq2], 0, 0.1));
}).play(s);
)
// brancher ('map') les deux args de freq sur les deux bus
x.map(\freq1, b.index, \freq2, c.index);
// Creation d'un Synth ecrivant dans un des bus
y = {Out.kr(b.index, SinOsc.kr(1, 0, 50, 880))}.play(addAction: \addToHead);
// liberation de y, b garde sa derniere valeur
y.free;
// la methode **Bus-get** permet de visualiser cette valeur (->Post Window)
b.get({ arg val; val.postln; f = val; });
// changement direct defreq2, cela 'debranche ' l'argument du bus **c**
x.set(\freq2, f / 2);
// freq2 est debranche, la valeur de c n'a plus d'effet sur le synth
c.set(200);
x.free; b.free; c.free;
Ordre d'execution <
Index >
OSC
There are no comments on this page. [Add comment]