Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2012-10-16 23:32:15 rrand...

nitefish
membre
Date d'inscription: 2011-01-13
Messages: 48

rrand...



Voilà,
je suis toujours en train de me battre avec le Lemur:cool:
(sur mon IPod touch).

Cette fois j'essaie de transposer le "Glisson Synthesis" de notre ami {yv}:
http://vimeo.com/20830088

J'ai un peu démonté le fichier jusque là pour avoir un truc qui fonctionne,

~lemur = Lemur.new("MyLemur", "adresse IP de l'IPod");


(
~a =SynthDef(\glisson, { |out=0, freq_s=2220, freq_e=2220, amp=0.82, dur=0.1, pan=0|
		var env, freq, snd;
		// try other enveloppes
		env  = EnvGen.kr(Env.sine(dur), doneAction: 2);
		freq = Line.kr(freq_s, freq_e, dur * 0.98);
		snd  = SinOsc.ar(freq, 0, amp);
		snd  = Pan2.ar(snd * env, pan);
		Out.ar(out, snd * 0.8);
	}).add;


	// task
	t = Task({
		inf.do{
			Synth(\glisson,[
			\freq_s, rrand(41,81),
			\freq_e, rrand(65,70),
			\dur,    rrand(0.01,4.06),
			\pan,    rrand(-1,1)]);
		rrand(0.001,6.02).max(0.001).wait

	}
	});

~lemur.addResponder("/synthstart/x", {
    arg array;
	if ( array.at(0) == 1, {
		t.play(SystemClock);
	},{
		t.stop; t.reset;
	});
});

)

~lemur.removeAllResponders;
~a.free;

en me disant que je n'aurai plus qu'à remplacer les nombres des "rrand()" par des variables que je mapperai ensuite sur les RangeSliders du Lemur.

Et ben ça marche pas.

J'ai "message rrand not understood"dans la fenetre "post".
je ne peux pas mettre de variable "x" avec rrand?
il faut ou des nombres ou des "~x" ?
Quelqu'un pourrait m'expliquer?
Merci d'avance.

Hors ligne

 

#2 2012-10-18 10:44:28 Re : rrand...

{yv}
membre
Lieu: Berlin
Date d'inscription: 2011-04-01
Messages: 219
Site web

Re: rrand...



nitefish a écrit:

J'ai "message rrand not understood"dans la fenetre "post".

Il manque la partie intéressante de l'Erreur, qui indique qui recoit le message rrand
et ne le comprend pas.
Tu peux poster le message d'erreur entier porfa ? (ici ou dans http://pastie.org)

Sinon j'ai l'impression que tu n'as pas posté tout ton code, ou pas le même exactement..

y

Hors ligne

 

#3 2012-10-18 18:02:21 Re : rrand...

nitefish
membre
Date d'inscription: 2011-01-13
Messages: 48

Re: rrand...



{yv},merci pour l'intérêt.
Le code que j'ai posté ne donne pas de message d'erreur.
C'est le code d'origine de "Glisson Synthesis" sans la partie "GUI".
Je pensais qu'il me suffisait de déclarer des variables(b,c,d,e,etc),de les placer dans les parenthèses des "rrand" et de les mapper sur les sliders du Lemur.

Et c'est là que j'ai l'erreur:

ERROR: Message 'set' not understood.
RECEIVER:
Instance of SynthDef {    (0x116474448, gc=7C, fmt=00, flg=00, set=04)
  instance variables [16]
    name : "glisson"
    func : nil
    controls : instance of Array (0x1104296f8, size=6, set=3)
    controlNames : nil
    allControlNames : instance of Array (0x11042b618, size=6, set=3)
    controlIndex : Integer 6
    children : instance of Array (0x106418708, size=12, set=4)
    constants : instance of Dictionary (0x1167818e8, size=2, set=2)
    constantSet : instance of Set (0x116781aa8, size=2, set=2)
    maxLocalBufs : nil
    available : instance of Array (0x1167ae218, size=0, set=2)
    variants : nil
    widthFirstUGens : nil
    rewriteInProgress : nil
    desc : instance of SynthDesc (0x10f1d5bb8, size=15, set=4)
    metadata : nil
}
ARGS:
Instance of String {    (0x1165ff628, gc=7C, fmt=07, flg=10, set=02)
  indexed slots [1]
      0 : j
}
   Float 0.040493   20000000 3FA4BB7E
CALL STACK:
    DoesNotUnderstandError:reportError   0x10e69c3d8
        arg this = <instance of DoesNotUnderstandError>
    Nil:handleError   0x10e659248
        arg this = nil
        arg error = <instance of DoesNotUnderstandError>
    Thread:handleError   0x10b595ae8
        arg this = <instance of Thread>
        arg error = <instance of DoesNotUnderstandError>
    Object:throw   0x10b595988
        arg this = <instance of DoesNotUnderstandError>
    Object:doesNotUnderstand   0x10b5c8cd8
        arg this = <instance of SynthDef>
        arg selector = 'set'
        arg args = [*2]
    OSCresponderNode:value   0x10f120318
        arg this = <instance of OSCresponderNode>
        arg time = 735405053.22213
        arg msg = [*2]
        arg addr = <instance of NetAddr>
    ArrayedCollection:do   0x10b595e58
        arg this = [*1]
        arg function = <instance of Function>
        var i = 0
    OSCMultiResponder:value   0x10f104188
        arg this = <instance of OSCMultiResponder>
        arg time = 735405053.22213
        arg msg = [*2]
        arg addr = <instance of NetAddr>
        var iterlist = [*1]
    < FunctionDef in Method Meta_OSCresponder:respond >   0x10b61ac68
        arg resp = <instance of OSCMultiResponder>
    < FunctionDef in Method Set:do >   0x10e1c5ad8
        arg item = <instance of OSCMultiResponder>
    ArrayedCollection:do   0x10b790cc8
        arg this = [*32]
        arg function = <instance of Function>
        var i = 21
    Set:do   0x10b71d4f8
        arg this = <instance of Set>
        arg function = <instance of Function>
        var i = 9
    Meta_OSCresponder:respond   0x10f1119a8
        arg this = <instance of Meta_OSCresponder>
        arg time = 735405053.22213
        arg addr = <instance of NetAddr>
        arg msg = [*2]
        var cmdName = '/waitstart/wa'
        var hit = false
    Main:recvOSCmessage   0x10f0d7518
        arg this = <instance of Main>
        arg time = 735405053.22213
        arg replyAddr = <instance of NetAddr>
        arg recvPort = 57120
        arg msg = [*2]
    ArrayedCollection:do   0x10b5e3248
        arg this = [*1]
        arg function = <instance of Function>
        var i = 0
    Main:recvOSCbundle   0x10f0dbb68
        arg this = <instance of Main>
        arg time = 735405053.22213
        arg replyAddr = <instance of NetAddr>
        arg recvPort = 57120
        arg msgs = [*1]
^^ The preceding error dump is for ERROR: Message 'set' not understood.
RECEIVER: SynthDef:glisson


Dernière chose:
Je peux tout évaluer sans problème
il faut que je touche un controle du Lemur pour avoir l'erreur.

je met le code que j'utilise:

~lemur = Lemur.new("MyLemur", "IP de mon Ipod");

(
	~lemur.sendMsg(["/wait.x",0.05,0.06]);
	~lemur.sendMsg(["/duration.x",0.05,0.06]);
	~lemur.sendMsg(["/freqstart.x",200,300]);
	~lemur.sendMsg(["/freqend.x",250,300]);
	~lemur.sendMsg(["/pan.x",-1,1]);
	~lemur.sendMsg(["/synthstart.x", 0]);
	~lemur.sendMsg(["/waitrange.x", 0]);
	~lemur.sendMsg(["/durationrange.x", 0]);
	~lemur.sendMsg(["/rangefreqstart.x", 0]);
	~lemur.sendMsg(["/rangefreqend.x", 0]);
	~lemur.sendMsg(["/rangepan.x", 0]);
)

(
s.waitForBoot{
	var t,b,c,d,e,f,g,h,i,j,k;

	 ~a = SynthDef(\glisson, { |out=0, freq_s=222, freq_e=222, amp=0.82, dur=0.1, pan=0|
		var env, freq, snd;
		// try other enveloppes
		env  = EnvGen.kr(Env.sine(dur), doneAction: 2);
		freq = Line.kr(freq_s, freq_e, dur * 0.98);
		snd  = SinOsc.ar(freq, 0, amp);
		snd  = Pan2.ar(snd * env, pan);
		Out.ar(out, snd * 0.8);
	}).add;


	// task
	t = Task({
		inf.do{
			Synth(\glisson, [
				\freq_s, rrand(b,c),
				\freq_e, rrand(d,e),
				\dur,    rrand(f,g),
				\pan,    rrand(h,i)
			]);
			rrand(j,k).wait;
		}
	});
}
);

~lemur.addResponder("/synthstart/x", {
    arg array;
	if ( array.at(0) == 1, {
		t.play(SystemClock);
	},{
		t.stop; t.reset;
	});
});


~lemur.map(~a, "j", "/waitstart/wa");
~lemur.map(~a, "k", "/waitend/wb");
~lemur.map(~a, "f", "/durationstart/da");
~lemur.map(~a, "g", "/durationend/db");
~lemur.map(~a, "b", "/freqstartstart/sa");
~lemur.map(~a, "c", "/freqstartend/sb");
~lemur.map(~a, "d", "/freqendstart/ea");
~lemur.map(~a, "e", "/freqendend/eb");
~lemur.map(~a, "h", "/panleft/pa");
~lemur.map(~a, "i", "/panright/pb");

~lemur.removeAllResponders;
~a.free;

Hors ligne

 

#4 2012-10-18 19:21:38 Re : rrand...

{yv}
membre
Lieu: Berlin
Date d'inscription: 2011-04-01
Messages: 219
Site web

Re: rrand...



c'est un problème de scope.
Une variable n'existe que dans le block ou elle est déclarée..

Example:

Autre erreur qui est compréhensible grâce à ton Stack:

nitefish a écrit:

ERROR: Message 'set' not understood.
RECEIVER:
Instance of SynthDef
[...]
^^ The preceding error dump is for ERROR: Message 'set' not understood.
RECEIVER: SynthDef:glisson

-> tu envoies le message 'set' à un SynthDef et non à un Synth...

Comme la Task créé des Synth très court, le mieux pour changer les paramètres est d'utiliser des variables globales pour les paramètres, et non pour le SynthDef, qui lui n'est créé qu'une seule fois.

Example:

j'espère que c'est comprehensible roll .......

y

Dernière modification par {yv} (2012-10-18 19:23:50)

Hors ligne

 

#5 2012-10-18 20:08:31 Re : rrand...

nitefish
membre
Date d'inscription: 2011-01-13
Messages: 48

Re: rrand...



Super,merci

J'ai surement des trucs à intégrer,mais déjà,au moins,le code original de Glisson est plus clair pour moi et je saisi bien la différence Synth/SynthDef avec ton explication,cela m'avait déjà posé problème...
Pour le Lemur,je continue...
Surtout que si j'arrive à me servir de la classe "lemur" que j'ai trouvé là:
http://www.jazzmutant.com/workshop_tuto … ercollider
,j'ai bien conscience qu'elle n'est pas récente et qu'elle n'utilise pas la nouvelle façon de se servir d'OSC dans SuperCollider.Je vais souvent relire les articles dans l'aide mais bon...Ya du taf!

merci encore


Au fait j'ai reçu en début de semaine "Microsound" et la traduction française du"Computer Music Tutorial" de Curtis Road:"l'Audionumérique-Musique et Informatique".
De bonnes raison de quitter un peu l'écran...
(ma dernière session lecture-papier,je me suis retrouvé à chercher l'heure en regardant le coin en haut à droite de la page...grave:/)
Bonne soirée.

Hors ligne

 

#6 2012-10-18 20:33:52 Re : rrand...

{yv}
membre
Lieu: Berlin
Date d'inscription: 2011-04-01
Messages: 219
Site web

Re: rrand...



nitefish a écrit:

Pour le Lemur,je continue...
Surtout que si j'arrive à me servir de la classe "lemur" que j'ai trouvé là:
http://www.jazzmutant.com/workshop_tuto … ercollider
,j'ai bien conscience qu'elle n'est pas récente et qu'elle n'utilise pas la nouvelle façon de se servir d'OSC dans SuperCollider.

mmmh, je viens de regarder et surtout elle donne de très mauvais exemples sad

Je comprends mieux ta confusion entre SynthDef et Synth

bonne chance!
y

Hors ligne

 

#7 2012-10-26 19:06:11 Re : rrand...

nitefish
membre
Date d'inscription: 2011-01-13
Messages: 48

Re: rrand...



bon,je reprends à zero...
J'ai trouvé cette après midi comment envoyer des valeurs du Lemur vers SC avec sa nouvelle manière de gérer Open Sound Control.


un switch et un fader sur l'IPod:

n = NetAddr("Ip du Lemur", nil);
o = OSCresponderNode(n, '/Fader/x', { |t, r, msg| msg.postln }).add;
p = OSCresponderNode(n, '/Switches/x', { |t, r, msg| msg.postln }).add;
o.remove;
p.remove;

les valeurs qui s'affichent comme il faut dans le "post window"

déjà cela devrait être une base plus saine...

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024