Sampler in ChucK
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.4KB

  1. // Effects chain
  2. adc => Gain g => dac;
  3. g => Gain feedback => DelayL delay => g;
  4. // Delay parameters
  5. 10::second => delay.max;
  6. 5::second => delay.delay;
  7. 1 => feedback.gain;
  8. 1 => delay.gain;
  9. // OSC listener class
  10. class OSCListener {
  11. fun void run(int port, string address) {
  12. OscRecv recv; port => recv.port; recv.listen();
  13. recv.event(address) @=> OscEvent oe;
  14. while (true) { oe => now; while (oe.nextMsg() != 0) { this.handle(oe); } }
  15. me.yield();
  16. }
  17. fun void handle(OscEvent oe){};
  18. }
  19. // define child class Y
  20. class InputListener extends OSCListener {
  21. fun void handle(OscEvent oe){
  22. oe.getFloat() => g.gain;
  23. oe.getFloat() => float a;
  24. <<< "Edit input" >>>;
  25. }
  26. }
  27. // define child class Y
  28. class DelayListener extends OSCListener
  29. {
  30. fun void handle(OscEvent oe){
  31. oe.getFloat()::second => delay.delay;
  32. oe.getFloat() => feedback.gain;
  33. <<< "Edit delay" >>>;
  34. }
  35. }
  36. // define child class Y
  37. class ChannelListener extends OSCListener
  38. {
  39. fun void handle(OscEvent oe){
  40. oe.getInt() => int channel;
  41. oe.getFloat();
  42. oe.getFloat();
  43. <<< "Edit channel" >>>;
  44. }
  45. }
  46. InputListener il;
  47. DelayListener dl;
  48. ChannelListener cl;
  49. spork ~ il.run(9000, "/input, f, f");
  50. spork ~ dl.run(9000, "/delay, f, f");
  51. spork ~ cl.run(9000, "/channel, i, f, f");
  52. // Loop forever
  53. while(true) { 1::second => now; }