[chuck-users] osc to keyboard

Kassen signal.automatique at gmail.com
Tue Dec 4 12:00:12 EST 2007

Hi, again, Core.

> // setting up the keyboard to trigger Osc
> // this should trigger a middle c tone when A key is pressed
> {
>     if (msg.is ButtonDown()) and if (msg.my_keynumber = 65 then
>     SinOsc s => Dac;
>     261 => s.freq;
>     1::second => now
> }
> it still giving me errors ? even when i running the kb.ck file in chuck
> any help would be great thanks

Well, it's giving you issues because it's not correct syntax. Unlike humans
programming languages demand that you write everything in a certain way. For
example I understand what you mean with "and" here but ChucK will only get
it if you write "&&" or if the structure of the program implicitly means we
want both things to be true (like below). Like with learning French or
Japanese in learning ChucK you will need to learn the right syntax. Like
with other languages there are definitions on what correct syntax is (the
manual) but also like other languages the best way to learn is to try to
figure out what others are saying (the examples directory) and simply trying
to speak it yourself.
65 => int mykeynumber; //define what key we are interested in for
SinOsc s;      //Let's define the oscillator outside of the loop, it will
save issues

    if (msg.isButtonDown() ) //detect the type of message
        if (msg.which == mykeynumber)
            //This bit will only get run if the message is a a button-down
one AND it refers to the right button
            //Structuring it like this means you can check for other buttons
as well in a cleaner way.

            s => dac; //notice "dac" is lowercase, it's not a Ugen as such.
            261 => s.freq;
            1::second => now;
             s =< dac; //disconnect once we are done
That's how I would rewrite what you wrote. I had to interpret it a bit as
I'm not 100% sure what you are after exactly but I think this is fairly

The advantage of this structure is that you could add something along the
lines of this bellow the paragraph that deals with detecting the key;

else if( msg.which == anothernumber) //you'll need to define this other
number, of course
    s => dac;
    330 => s.freq;  //another key another note.
    1::second => now;
     s =< dac;

This means we only have to check for the message type once which saves CPU
and leads to a cleaner program.

Did you have a look at the keyboard-organ example in the HID dir? That
example might be interesting to you too.

Oh, and don't worry about getting errors, everybody gets them, it's rare to
write something larger with no typos at all. Just take them on one by one
and try to figure out what the issue is, correct it and try again.

Hope this helps,
Happy ChucKing!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.cs.princeton.edu/pipermail/chuck-users/attachments/20071204/9e2bf5fb/attachment.htm 

More information about the chuck-users mailing list