ChucK Joystick Control

148 Views Asked by At

I am trying to receive input from joystick. After input has been received sound should be generated. This works, but it responds to both push and release of buttons of the joystick. How do I get it to respond to only pushes and not releases.

More so, How do I get the event listener to respond to 180 degree movements of the joystick. Currently when I move the joystick it continues generating sound, even long after I have released it

 Hid myHid;

HidMsg msg;

0=>int device;

if(!myHid.openJoystick(device)){
<<<"Couldn't">>>;
me.exit();
}

<<<"Ready">>>;

SndBuf coin=>dac;
  0.6=>coin.gain;
0=>coin.pos;



while(1){

    myHid=>now;
    while(myHid.recv(msg)){
        <<<"Rev">>>;

        me.dir()+"/audio/smw_jump.wav"=> coin.read;
        .2::second=>now;


        }

    }
1

There are 1 best solutions below

0
On
  // make HidIn and HidMsg
      Hid hi;
    HidMsg msg;

   SndBuf jump=>dac;
  SndBuf coin=>dac;
 SndBuf power_up=>dac;
  SndBuf blaster=>dac;


0.85=>coin.gain;
0=>coin.pos;

.6=>jump.gain;
 0=>jump.pos;

.85=>power_up.gain;
0=>power_up.pos;

.6=>blaster.gain;
0=>blaster.pos;

 // which joystick
  0 => int device;
 // get from command line
 if( me.args() ) me.arg(0) => Std.atoi => device;

 // open joystick 0, exit on fail
 if( !hi.openJoystick( device ) ) me.exit();

<<< "joystick '" + hi.name() + "' ready", "" >>>;

 // infinite event loop
  while( true )
 {
// wait on HidIn as event
hi => now;

// messages received
while( hi.recv( msg ) )
{
    // joystick axis motion
    if( msg.isAxisMotion() )
    {

        //this is where we pan
        <<< "joystick axis", msg.which, ":", msg.axisPosition >>>;
        // OR
        //if (msg.which == 0) <<< "joystick axis", msg.which, ":",    msg.axisPosition >>>;
        //if (msg.which == 1) <<< "joystick axis", msg.which, ":", msg.axisPosition >>>;
    }

    // joystick button down
    else if( msg.isButtonDown() )
    {

        <<< "joystick button", msg.which, "down" >>>;

        if(msg.which==0){
            me.dir()+"/audio/Laser Blasts-SoundBible.com-108608437.wav"=> blaster.read;
        .2::second=>now;

            }

            if(msg.which==4 || msg.which==2 ||msg.which==3 ||msg.which==5){
                me.dir()+"/audio/smw_coin.wav"=> jump.read;
                .2::second=>now;
            }

    }

    // joystick button up
    else if( msg.isButtonUp() )
    {
        <<< "joystick button", msg.which, "up" >>>;
    }

    // joystick hat/POV switch/d-pad motion
    else if( msg.isHatMotion()  && msg.idata==0)
    {
        <<< "joystick hat", msg.which, ":", msg.idata >>>;
        me.dir()+"/audio/smb_powerup.wav"=> power_up.read;
                .2::second=>now;

    }
}
}