New Year Gift : Ping Garden Software Instrument

Happy Chinese New Year! :izakaya_lantern: We wish you a great fruitful 2021. Here is a gift from us, it’s called Ping Garden, a software instrument utilizing Mac multitouch pad as playing interface. It uses filter pinging and FM for sound synthesis.

When I was working on Wing Pinger in last year’s CNY, factories were closed during the holiday, so I learned a bit of SuperCollider to kill time. That’s how Ping Garden was born.

Ping Garden makes rain falling sounds with gesturally controlled density. Here is a small video of me playing it. Hope you enjoy.

  1. Install SuperCollider And git :
    https://supercollider.github.io/download
    https://git-scm.com

  2. Open Terminal. Input these line by line :

     xcode-select --install
     git clone https://github.com/batuhan/tongsengmod.git
     cd tongsengmod
     make
     sudo make install
    

From now on, all opeations are in SuperCollider. Open this file in SC.
Meng Qi - Ping Garden.scd (4.0 KB)

  1. Put cursor in the line “Quarks.Install(“MultiTouchPad”);”, press Command + Enter;

  2. Put cursor in the line “s.reboot();”, press Command + Enter;

  3. Put cursor in the section below line 27, press Command + Enter;

  4. Put cursor in the section below line 85, press Command + Enter. Now the software interface should appear and you can start playing on the Touchpad.

Enjoy!

77 Likes

Thank you and Happy New Year!!

1 Like

hey @shreeswifty you and i were gonna chat about supercollider standalones the other day

here’s an interesting one!

1 Like

Thanks and Happy New Year to you!

1 Like

This would make a very interesting grid+norns synth.

2 Likes

Thank you, and Happy Chinese New Year! I added MIDI IN to play notes along with the Ping Garden using the following code:

s.boot;

(
var notes, on, off;

MIDIClient.init;
MIDIIn.connectAll;

notes = Array.newClear(128);    // array has one slot per possible MIDI note

on = MIDIFunc.noteOn({ |veloc, num, chan, src|
    notes[num] = Synth(\default, [\freq, num.midicps,
        \amp, veloc * 0.00315]);
});

off = MIDIFunc.noteOff({ |veloc, num, chan, src|
    notes[num].release;
});

q = { on.free; off.free; };
)

Similar Steps:

  1. Save a Copy of the Ping Garden .scd file and name it MENGQI-PINGGARDEN-MIDI, and Open it.
  2. Copy/paste this whole code to the end of the existing Ping Garden window.
  3. Place cursor at the end of s.boot; line, press Command + Enter.
  4. Place cursor at the beginning of var notes,on,off; line, press Command + Enter.
  5. Enjoy!
5 Likes

Thank you for the contribution! :+1:

2 Likes

Beautiful work. This would be so cool on Norns w/ a grid or sensel morph

9 Likes

Thank you! Love this.

1 Like

Thank you for the wonderful gift!

1 Like

so beautiful - happy new year!

1 Like

thank you @MengQiMusic! getting some really beautiful sounds out of this. makes me wish i had a touch sensing yoga mat to pair with it

oh yesss :drooling_face:

1 Like

Getting Ping Garden rolling this morning and ran into this error! It appears when I execute the final step of the process (CMD + Enter on line 85).

I should say that I have only installed SuperCollider this morning, for the purpose of running Ping Garden, and so there’s a chance this is a broader SC issue and not a Ping Garden issue (although I’m not sure how to test that idea).

If anyone could lend a hand in troubleshooting this, I’d really appreciate it.

code
  in interpreted text
  line 8 char 17:

  if (MultiTouchPad.guiOn, {"Touch Pad GUI On".postln}, {MultiTouchPad.gui});
                   
  
-----------------------------------
ERROR: Class not defined.
  in interpreted text
  line 8 char 68:

  if (MultiTouchPad.guiOn, {"Touch Pad GUI On".postln}, {MultiTouchPad.gui});
                                                                      
  
-----------------------------------
ERROR: Class not defined.
  in interpreted text
  line 11 char 14:

  	MultiTouchPad.stop;
                
  	oscDict.collect { arg item; item.free };
-----------------------------------
ERROR: Class not defined.
  in interpreted text
  line 77 char 13:

  MultiTouchPad.resetActions.start;
               
  
-----------------------------------
ERROR: Class not defined.
  in interpreted text
  line 79 char 13:

  MultiTouchPad.touchAction =
               
  {
-----------------------------------
ERROR: Class not defined.
  in interpreted text
  line 93 char 13:

  MultiTouchPad.untouchAction =
               
  {
-----------------------------------
ERROR: Class not defined.
  in interpreted text
  line 100 char 13:

  MultiTouchPad.setAction =
               
  {
-----------------------------------
-> nil```

Looks like you need to install the MultiTouchPad Quark. In the editor, type:

Quarks.install("https://github.com/supercollider-quarks/MultiTouchPad.git");

Or go through the Language menu. After installing, re-compile the class library, also in the Language menu.

1 Like

That did it, thanks so much :seedling:

Update: I’ve just had this running while I go about my day, breaking out into spontaneous rain drop jams intermittently. Hope for scattered showers the rest of my life :cloud_with_rain:

2 Likes

In case anyone wants to use their external trackpad I added:

MultiTouchPad.setDevice(\external);

at line 160

5 Likes

I finally got a laptop and installed SuperCollider for the first time. I followed all of the steps above with no issue and the trackpad window and other window pop for me and I can see where my fingers are touching the trackpad, but I’m getting no sound… any idea what I might have messed up? Thanks!

Double check you ran the synthdef at lines 27-81

1 Like

Thanks. I thought I did, but will go back through. I appreciate your response! Will check back later if I can’t figure it out.

I’ve never used Supercollider and somehow I missed this before now but the YouTube clip is more than enough justification for me to figure out how to get it going! Thank you so much for this, the sound is simply beautiful

EDIT: I suspect Windows is not the ideal environment to run this… Will fire up the Macbook when I get chance