User Tools

Site Tools


supercollider

This is an old revision of the document!


Directions

Use the jmg/supercollider branch until it's merged into main.

  • git checkout jmg/supercollider

Install supercollider, the alsa utilities, and tcl-udp through apt.

  • sudo apt install supercollider alsa-utils tcl-udp

Add yourself to the audio group and reboot.

  • sudo usermod --group --append audio folk
  • reboot

Configure jack to use your audio device in folk/virtual-programs/music.folk. Ignore the tidal error for now (TODO: handle this more gracefully).

  • This is a bit more involved.
  • Start by running aplay -L.
  • You'll get a huge list of audio device. Try and find one that says something about HD-Audio, being generic, and being analog. You'll want the string that looks like hw:CARD=Generic_1,DEV=0 and starts with hw.
  • Now, go to virtual-programs/music.folk and look for the big block of if-elseif checks, and add your own instance
    • Add a section that looks like this:
    • [... top of ifs]
      } elseif {$::thisNode eq "folk-<your node>" } {
              exec jack_control dps device hw:CARD=Generic_1,DEV=0
              exec jack_control dps period 256
      }
      [... rest of ifs]
  • It should be set up!

Starting code to make audio:

Wish Supercollider plays sound foo {
    Pan2.ar(SinOsc.ar(440) * 0.5, 0.0); // This is Supercollider synth code
}

Code to play a note when it is wished for:

When /player/ wishes to play note /note/ {
    set noteAscii [scan $note %c]
    set noteIdx [expr { $noteAscii - 0x41 }]
    set noteFreq [expr { 440.0 * (2.0 ** ($noteIdx / 12.0)) }]
    Wish $player is labelled "noteFreq is $noteFreq"
    set soundName note-$player-$note
    Wish Supercollider sound $soundName attr freq is $noteFreq
    Wish Supercollider plays sound note-$player-$note {
        arg freq = 440.0;
        var envgen;
        envgen = EnvGen.kr(Env.adsr(sustainLevel: 0.2));
        Pan2.ar(SinOsc.ar(freq) * 0.5 * envgen, 0.0);
    }
}

Troubleshooting

May need to kill/restart jackdbus randomly.

For testing, try running the Supercollider interpreter separately with QT_QPA_PLATFORM=offscreen sclang.

If you just can't get it working you can run Supercollider as a server on a separate device and connect.

  • To do that, start by installing Supercollider on your host device of choice, and write down its IP.
  • Now, run the server side using this code:
  • s.options.protocol = \tcp; // set to use tcp
    s.options.bindAddress = "0.0.0.0"; // allow connections from any address
    s.options.maxLogins = 2; // set to correct number of clients
    s.boot();
  • Moving back to the folk side, you'll have to edit music.folk
  • There will be a block labelled after 500, put this in there where it says ::Music::scExec { before the rest of that block.
  • o = ServerOptions.new;
    o.protocol_(\tcp);
    t = Server.remote(\remote, NetAddr("Host IP Address", 57110), o); // set to correct address and port
    t.addr.connect;
    t.startAliveThread( 0 );
    t.doWhenBooted({ "remote tcp server started".postln; t.notify; t.initTree });
    Server.default = t;
    s = t;
supercollider.1726428389.txt.gz · Last modified: 2024/09/15 19:26 by discord

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki