*** empty log message ***
[chuck-blob.git] / v2 / examples / hid / joy-fm.ck
blob828ffa4c3fee767a4711f91f0ec32900a2a0c944
1 // name: joy-fm.ck
2 // desc: uses first 3 axes of a joystick to control mf, cf, and index for FM
3 // author: Spencer Salazar
5 // which joystick
6 0 => int device;
7 // get from command line
8 if( me.args() ) me.arg(0) => Std.atoi => device;
10 // modulator to carrier
11 SinOsc m => SinOsc c => Envelope e => dac;
13 // carrier frequency
14 220 => c.freq;
15 // modulator frequency
16 550 => m.freq;
17 // index of modulation
18 1000 => m.gain;
20 // phase modulation is FM synthesis (sync is 2)
21 2 => c.sync;
23 // attack
24 10::ms => e.duration;
25 .5 => e.gain;
26 // variables
27 int base;
28 float a0;
29 float a1;
30 float a2;
31 int count;
33 // start things
34 set( base, a0, a1, a2 );
36 // hid objects
37 Hid hi;
38 HidMsg msg;
40 // try
41 if( !hi.openJoystick( device ) ) me.exit();
42 <<< "joystick '" + hi.name() + "' ready...", "" >>>;
44 // infinite time loop
45 while( true )
47     // wait on event
48     hi => now;
49     // loop over messages
50     while( hi.recv( msg ) )
51     {
52         if( msg.isAxisMotion() )
53         {
54             if( msg.which == 0 ) msg.axisPosition => a0;
55             else if( msg.which == 1 ) msg.axisPosition => a1;
56             else if( msg.which == 2 ) msg.axisPosition => a2;
57             set( base, a0, a1, a2 );
58         }
60         else if( msg.isButtonDown() )
61         {
62             msg.which => base;
63             count++;
64             if( count == 1 ) e.keyOn();
65             set( base, a0, a1, a2 );
66         }
68         else if( msg.isButtonUp() )
69         {
70             msg.which => base;
71             count--;
72             if( !count ) e.keyOff();
73         }
74     }
77 // mapping function
78 fun void set( int base, float v0, float v1, float v2 )
80     // modulator frequency
81     ( 500 + 5*base + ( 500 * v0) ) => m.freq;
82     // carrier frequency
83     ( 220 + (220 * v2) ) => c.freq;
84     // index of modulation
85     ( 1000 * (v1+1) ) => m.gain;
86     <<< "carrier:", c.freq(), "modulator:", m.freq(), "index:", m.gain() >>>;