Annonce

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


#1 2012-03-14 10:22:25 probleme de code avec mon controller

yau
membre
Date d'inscription: 2011-01-24
Messages: 48

probleme de code avec mon controller



salut j'ai posté mon problème sur la mailinglist de scuser mais pas de réel solution du coup je tente ici,,
je ne pense pas que ça soit un problème si compliqué c'est juste que j'ai toujours des lacunes ...
j'éspère que quelqu'un pourrait m'aider. J'essaye juste de pouvoir appliquer ce pad xy, et de le pouvoir l'utiliser avec un pad (usb, ex:Korg) en utilisant CCresponder:

Le code c'est un pad XY qui te permet de morpher entre 4 preset de 10 paramètre d'un synthe
mon problème c'est qu'avec CCresponder j'arrive à modifier le GUI mais ça ne modifie pas les paramètres du synthe je voulais savoir qu'elle est la bonne manière d'écrire

voici mon problème:

///////////////////////o ///////////////////// 
~c11C.remove; 
~c11C= CCResponder({arg src, chan, num, val;  defer {~slider.action ; t.x_(val/127);  };},num: 0); //ne fonctionne pas
 ~c11D= CCResponder({arg src, chan, num, val;  defer {~slider.action ;t.y_(val/127);  };},num: 24);///
///////////////////////////////////2d array//////////////////////

//le reste du code

(
////GROUPS/////////
~synthgroup = Group.head(s);
~busgroup = Group.tail(s);
~fxgroup = Group.tail(s);
						
/////SAMPLE GRANULATOR //////
~samples1 = "sounds/*".pathMatch; 
~samples_buffers1= List.new; //collection of buffers 
~samples1.do{|item| 
        var sf= SoundFile.new; 
        if(sf.openRead(item), { 
                if(sf.numChannels==2, { //mono file 
                        ~samples_buffers1.add(Buffer.readChannel(s, item, channels:[0])); //read left channel into both left and right 
                }, { //stereo file 
                        ~samples_buffers1.add(Buffer.readChannel(s, item, channels:[0])); //read both left and right channels 
                }); 
        }, { 
                ("file"+item+"could not be loaded").warn; 
        }); 
        sf.close; 
};  
~samples1_buffers.do{|x| x.postln};
SynthDef(\grain, {arg gate = 1,outbus=0,amp = 1,freqScale=0.1, level = 1,dur=0.1,pos=0,rate=1,interp=2,sndbuf, envbuf; 
var pan, env, freqdev, source, out; 
// a custom envelope  
var winenv; 
winenv = Env([0, 1, 0], [0.5, 0.5], [8, -8]); 
z = Buffer.sendCollection(s, winenv.discretize, 1); 
// use mouse x to control panning 
pan = MouseX.kr(-1, 1); 
env = EnvGen.kr( 
Env([0, 1, 0], [1, 1], \sin, 1), 
gate, 
levelScale: amp, 
doneAction: 2); 
 source = GrainBuf.ar(2, Impulse.kr(10), dur, sndbuf, rate/*LFNoise1.kr.range(0.5, 2)*/, 
pos+LFNoise2.kr(0.1).range(0, 1), 2, pan, envbuf);
out = Out.ar(outbus, 
PitchShift.ar(source,0.2, freqScale,0,0,0001)* env*level);
out = Mix.ar([DelayC.ar(out,0.01,0.01),DelayC.ar(out,0.02,MouseX.kr(0.02,0))]);
}).send(s); 
)


(  //Control Spec
~j1 = ControlSpec (0.01,0.5);
~k1 = ControlSpec (-25,25);
~l1 = ControlSpec (0.01,0.8);
~m1 = ControlSpec (0.1,0.5);

~n1 = ControlSpec(0,0.04);
~o1 = ControlSpec(0,2);
~p1 = ControlSpec(0.1,4);
~q1 = ControlSpec(0.1,100);
~r1 = ControlSpec(0.01, 1);
~s1 = ControlSpec(0.1, 25);
~t1 = ControlSpec(0.1, 4);
~u1 = ControlSpec(0, 13);
~v1 = ControlSpec(0,1);
~w1 = ControlSpec(0,10);
~x1 = ControlSpec(20,20000,\exp);
~y1 = ControlSpec(1,8,\lin,1);
~z1 = ControlSpec(1,300);
)
////sliders GUI
b = Array.fill(10,0);
x = Array.fill(10, {arg i; 30 * i + 10 }); y = 10; w = 20; h = 100;
v = Window("test stuff", Rect(128, 64, 320, 120)).front;
c = Array.fill( 10, { arg i;
 ~slider = Slider( v, Rect(x[i],y,w,h) ).action_({|v|
           b[i] = v.value;                                                             
	   b[8]=1;
	   b[3].postln;
~sourceA.setn(\rate,b[0],\freqScale,b[1],\sndbuf,~s1.map(b[2]),\pos,b[3],\dur,[4],\interp,b[5],\pos,b[6],\amp,b[7],\level,b[8],\pan,b[9]);

                                                                        });

});

//open dictionary
~store_preset = IdentityDictionary.new;
//fill sliders with random numbers and store them.
c.do({|i| i.valueAction_(0) });
~store_preset[\preset0] = b.copy;
//c.do({|i| i.valueAction_(1) });
b=[1,0.5,0.2,3,0.4,0.8,0.9,0.6,0.6,0.6];
~store_preset[\preset1] = b.copy;
//c.do({|i| i.valueAction_rrand(0,1.0) });
b=[0.9,0.3,0.1,0.2,0.9,0.5,0.1,0.1,0.6,0.7];
~store_preset[\preset2] = b.copy;
//c.do({|i| i.valueAction_(1)});	
b=[1,1,1,1,1,1,1,1,1,1];
~store_preset[\preset3] = b.copy;

~preset_lh = ~store_preset[\preset0];
~preset_rh = ~store_preset[\preset1];
~preset_lb = ~store_preset[\preset2];
~preset_rb = ~store_preset[\preset3];
~mix_output = Array.fill(10,0);

/////2 D SLIDER
w = Window(").+.(", Rect(100,Window.screenBounds.height-400, 300 ,300));
w.view.decorator = FlowLayout(w.view.bounds);
t = Slider2D(w, Rect(0, 0,292, 292))
                        .y_(rrand(0,1.0))
                        .x_(rrand(0,1.0))
                        .background_( Color.black )
                        .knobColor_(Color.red)
                        .action_({|v|
			   ~quad_array_mix.value(v.x,v.y,~preset_lh,~preset_rh,~preset_lb,~preset_rb,10); 
                        ~update_gui.();
                        });
w.front;
CmdPeriod.doOnce({w.close});

~update_gui = {
var count=0;
~mix_output.do({|i|  c[count].valueAction_(i); count = count + 1;  });
};

~quad_array_mix = {
arg x,y,lh,rh,lb,rb,n;
n.do({|i| ~mix_output[i] = ~quad_mix.(x,y,lh[i],rh[i],lb[i],rb[i]);
})};

~quad_mix = {
arg x,y,lh,rh,lb,rb;
var val1,val2,val3,val4,sum;
val1 = rh*x*y;  
val2 = lh*(1.0-x)*y;
val3 = rb*x*(1.0-y);
val4 = lb*(1.0-x)*(1.0-y);
sum = val1+val2+val3+val4;
};



////make sound///
~sourceA.free;
~sourceA= Synth.head(~synthgroup,\grain,[\freqScale,1,\level,1,\sndbuf, 2,\envbuf,-1,\rate,1,\dur,1,\pos,1]).publish(\sourceA);
	
   s.meter;

Merci tous        

yau

Dernière modification par yau (2012-03-15 01:12:10)

Hors ligne

 

#2 2012-03-14 18:11:43 Re : probleme de code avec mon controller

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

Re: probleme de code avec mon controller



salut yau.
le problème est que ton code est un peu trop compliqué, pas facile à comprendre. le mieux est d'isoler la partie qui ne fonctionne pas, ce sera plus simple de t'aider.
un autre conseil, poste ton code dans les balises *code*, c'est beaucoup plus lisible.

par rapport à ton problème:
voilà un exemple avec une autre approche. les CCResponder changent les parametres du Synth et mettent à jour la GUI. l'idée est que tu peux faire la même chose soit avec la GUI, soit avec les Ctl MIDI, mais pas du MIDI vers la GUI vers ta fonction, c'est trop lent.
pas sûr que ce soit trèsclair ni ce que tu cherches mais on sait jamais (le code n'est *pas testé*...):

(
s.waitForBoot{
    SynthDef(\test, {|freq = 800, amp=0.3|
        var snd = SinOsc.ar(
            freq.lag(0.05), 0, amp.lag(0.05)
        );
        Out.ar(0, snd)
    }).add;
    // wait for Synth to be sent to the server
    s.sync;
    // create Synth
    x = Synth.new(\test);

    // GUI
    w = Window().front;
    t = Slider2D(w, 200@200);
    t.action_{ |sl|
        x.set(
            \freq, \freq.asSpec.map(sl.x),
            \amp, \amp.asSpec.map(sl.y)
        )
    };

    // CCResponders
    c = CCResponder({ |src, chan, num, val|
        //change synth params and update GUI without the action
        num.switch(
            0, {
                x.set(\freq, \freq.asSpec.map(val / 127));
                {t.x_(val / 127)}.defer;
            },
            24, {
                x.set(\amp, \amp.asSpec.map(val / 127));
                {t.y_(val / 127)}.defer;
            }
        )
    }, num: [0, 24]);
};
)

c.remove // cleanup CCResponder

Hors ligne

 

#3 2012-03-15 01:16:34 Re : probleme de code avec mon controller

yau
membre
Date d'inscription: 2011-01-24
Messages: 48

Re: probleme de code avec mon controller



salut yvan
merci bcp pour l'aide et les conseils!!
ça marche nickel !
big_smile

Hors ligne

 

#4 2012-03-15 01:34:14 Re : probleme de code avec mon controller

yau
membre
Date d'inscription: 2011-01-24
Messages: 48

Re: probleme de code avec mon controller



euh enfait nan
le truc c'est que le slider2D il fait bouger les faders normalement; et que si je bouge avec le controlleur le fader il bouge pas alors qu'avec la souris ça marche .. sad à moins que ça soit possible de modifier les 10 paramètre en utilisant des presets directement à partir du CCResponder ?
En tt cas je vois les choses un peu plus clairement déjà

b = Array.fill(10,0);
x = Array.fill(10, {arg i; 30 * i + 10 }); y = 10; w = 20; h = 100;
v = Window("test stuff", Rect(128, 64, 320, 120)).front;
c = Array.fill( 10, { arg i;
 ~slider = Slider( v, Rect(x[i],y,w,h) ).action_({|v|
           b[i] = v.value;                                                             
	   b[8]=1;
	   b[3].postln;
~sourceA.setn(\rate,b[0],\freqScale,b[1],\sndbuf,~s1,b[2],\pos,b[3],\dur,[4],\interp,b[5],\pos,b[6],\amp,b[7],\level,b[8],\pan,b[9]);

                                                                        });

});

plus loin ....

w = Window(").+.(", Rect(100,Window.screenBounds.height-400, 300 ,300));
w.view.decorator = FlowLayout(w.view.bounds);
t = Slider2D(w, Rect(0, 0,292, 292))
                        .y_(rrand(0,1.0))
                        .x_(rrand(0,1.0))
                        .background_( Color.black )
                        .knobColor_(Color.red)
                        .action_({|v|
			   ~quad_array_mix.value(v.x,v.y,~preset_lh,~preset_rh,~preset_lb,~preset_rb,10); 
                        ~update_gui.();
                        });
w.front;

Hors ligne

 

#5 2012-03-15 02:46:58 Re : probleme de code avec mon controller

yau
membre
Date d'inscription: 2011-01-24
Messages: 48

Re: probleme de code avec mon controller



yes  merci de ton aide du coup j'ai trouvé fallait juste rajouter

~quad_array_mix.value(
      0,val/127,~preset_lh,~preset_rh,~preset_lb,~preset_rb,10
      );

C'est claire que un code plus claire ça facilite pour l'instant c'est pas gagné mais je vais faire des efforts
merci
a bientot

(
~c11C.remove;
~c11C= CCResponder({
    arg src, chan, num, val; 
~quad_array_mix.value(0,val/127,~preset_lh,~preset_rh,~preset_lb,~preset_rb,10);  
defer { 
        t.x_(val/127);~update_gui.(); 
         };
 },
num: 0); 
~c11D.remove; 
~c11D= CCResponder({
                 arg src, chan, num, val; 
~quad_array_mix.value(
      0,val/127,~preset_lh,~preset_rh,~preset_lb,~preset_rb,10
      ); 
 defer {
             t.y_(val/127);~update_gui.();  
          };
  },
num: 24);
)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2018