pulusound

<<< back to home page

Algorave Helsinki meetup, 2025-03-07

posted 2025-03-07, updated 2025-03-20

Algorave Helsinki met again, and i thought it would be useful to collect here links and materials that came up, for easy reference and sharing. no promises i'll have time to do this every time ;)

Ptuple

Joonas (Forces) showed how to use Ptuple to easily send different sequences to different MIDI channels in a single pattern.

SuperClean

Joonas also briefly introduced Daniel M Karlsson's SuperClean, a fork of SuperDirt that allows writing patterns directly in SuperCollider.

SuperCollider MIDI input

i wrote a quick example of how to make a polyphonic, MIDI-playable synth in SuperCollider:

// connect all midi inputs
MIDIIn.connectAll;

// show available inputs
MIDIClient.sources;

// print all incoming midi data
MIDIdef.trace;

// stop printing
MIDIdef.trace(false);

(
// define a synthdef with a gated envelope
SynthDef(\chip, { |freq=220, gate=1, amp=0.2|
  var sig;
  sig = Pulse.ar(freq)
  * EnvGen.ar(Env.adsr(0.001, 0.2, 0.8, 1.0), gate, doneAction: Done.freeSelf)
  * amp ! 2;
  Out.ar(0, sig);
}).add;

// keep track of playing notes
~notes = Dictionary();

// spawn synth on note-on
MIDIdef.noteOn(\noteOn, { |vel, num|
  ~notes[num] = Synth(\chip, [freq: num.midicps, amp: vel/127*0.2]);
});

// release synth on note-off
MIDIdef.noteOff(\noteOff, { |vel, num|
  ~notes[num].release;
});
)

SuperCollider sensor input

the topic of sensor input also came up. we discussed various ways to achieve this.

  • Raspberry Pi with sensors connected to GPIO pins
    • not sure if SuperCollider has any direct way of reading the GPIOs, might need a separate program (e.g. in Python) which reads the data and sends OSC messages to SuperCollider
  • a microcontroller board such as Raspberry Pi Pico or ESP32
    • the board can act for example as a USB MIDI device, making it compatible with anything that takes MIDI input
    • MIDI resolution could be an issue, using NRPN or MIDI 2.0 may help

in Finland, Partco sells some of this stuff. personally i have often ordered from Electrokit in Sweden.

sapf

i gave an introduction to sapf (Sound As Pure Form), James McCartney's recently published postfix/stack-based audio programming language. i have a dedicated post about sapf where i collect related materials.

Julia & circuit modeling

George / Archit3ch has been exploring Julia as a DSP platform, including utilizing the uniform memory architecture on Apple Silicon for circuit modeling. some recent updates:

  1. we can now Revise structs in Julia: https://github.com/JuliaLang/julia/pull/57253
  2. Julia -> native binary compilation: https://arxiv.org/abs/2502.01128
  3. Julia is now in Google Colab (you had to install it before): https://github.com/googlecolab/colabtools/issues/965#issuecomment-2702159354

The Boyle OpAmp model I implemented. Note:

  • Simple enough for realtime
  • Swap the input BJTs for JFETs to get JFET OpAmps!
  • Programmable current, so that we can implement "controlled slew rate" capacitorless filters (e.g. Polivoks)

https://ieeexplore.ieee.org/document/271061

the NESS physical modeling project is now open source: https://github.com/tommmmudd/ness-tools

Voltage starving links:

danmakurave

i showcased danmakurave, the bullet hell music-game performance me and my partner played at Duibadaiba vol. 2 a couple of weeks ago. the music livecoder writes TidalCycles patterns, which spawn enemies in the game that shoot at the player in time with the sounds. the player tries to defeat the enemies, which causes the corresponding patterns to stop and become deleted from the livecoder's editor.

i don't have footage from the event, but here is a demo from an early build: