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.

68 lines
1.6KB

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