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
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
{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
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 .......
y
Dernière modification par {yv} (2012-10-18 19:23:50)
Hors ligne
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
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
Je comprends mieux ta confusion entre SynthDef et Synth
bonne chance!
y
Hors ligne
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