Hello Oba,
I think I've ran into this before, the instance of mymidivals you create at
the bottom of midivaltest.ck goes out of scope at the end of the
Machine.add call. When running the test score file you may notice that
Machine.add creates a new shred.
To fix this you could either move the instance declaration to the test
score file or make the midivals function static.
Or perhaps someone else might have better advice, because I still have
problems with initializers and statics. For example, this package of
classes is all sorts of broken
https://github.com/heuermh/lick/tree/master/lick/tuning
michael
On Fri, Nov 13, 2015 at 8:57 AM, Oba Ozai
Hi, Im stuck with something simple, i cant figure out :)
This works fine => // test score // sound chain; SinOsc s => dac; // create class with a function to return midi values //given and input string class mymidivals { int result; fun int midivals (string x){ if (x == "c4") 60 => result; if (x == "d4") 62 => result; if (x == "e4") 64 => result; if (x == "f4") 65 => result; if (x == "g4") 67 => result; if (x == "a4") 69 => result; if (x == "b4") 71 => result; if (x == "c5") 72 => result; return result; } // fun }// class
//define object mymidivals midivals; // create array with the melody notes ["c4","d4","e4","f4","g4","a4","b4","c5" ] @=> string song[]; song.cap() => int songcap; for (0 => int i; i < songcap ; i++) { 0.2 =>s.gain; Std.mtof(midivals.midivals(song[i])) => s.freq; 0.5::second => now; =================================== But if i put the function mymidivals on a .ck file like this //midivaltest.ck // create class with a function to return midi values //given and input string public class mymidivals { int result; fun int midivals (string x){ if (x == "c4") 60 => result; if (x == "d4") 62 => result; if (x == "e4") 64 => result; if (x == "f4") 65 => result; if (x == "g4") 67 => result; if (x == "a4") 69 => result; if (x == "b4") 71 => result; if (x == "c5") 72 => result; return result; } // fun }// class mymidivals midivals; ============================================= and if call it this way, it does not work, error => undefined variable "midivals"
// test score // sound chain; SinOsc s => dac;; // midivaltest.ck lives on same dir as this code Machine.add(me.dir() + "midivaltest.ck"); // create array with the melody notes ["c4","d4","e4","f4","g4","a4","b4","c5" ] @=> string song[]; song.cap() => int songcap; for (0 => int i; i < songcap ; i++) { 0.2 =>s.gain; Std.mtof(midivals.midivals(song[i])) => s.freq; 0.5::second => now; }
------------------------------------------------------- any ideas ? Thanks
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users