1. A Camomile tip I learned the hard way: audio units built using camomile (and presumably VSTs and lv2s too) will stop working if you rename them, as they rely on the bundle filename, the .txt configuration file and the main .pd patch all sharing the same base name in order to function.

  2. Useful reference for anyone trying to get a monome grid working with vanilla puredata

    Perhaps when I have developed it a bit more I will contribute a new tutorial to the monome docs website, and create a [serialosc] object for easily managing devices and connections.

  3. Augmented Hurdy Gurdy Experiments


    As I can’t currently commit to building a new series of gurdies due to my living situation, I’ve been keeping myself busy developing the MIDI system for my instruments, to develop new extended, augmented playing techniques.

    This video is the first demonstration of some hybrid electronic-acoustic experiments using the prototype MIDI system installed on my hurdy gurdy.

    0:22 Technique: Pitch-shifting Polyphony

    Gurdy MIDI and Audio → Apogee ONE → Macbook running a puredata patch

    Monophonic acoustic gurdy signal is pitch-shifted down in real time to play chords and harmonies. Chords and intervals on the keyboard can also be used to pitch-shift the trompette signal (0:55) or the drones. Inspired by an idea from Sébastien Tron.

    1:18 Technique: Expressive MIDI Controller

    Hurdy Gurdy MIDI → DIY Hybrid Poly Synth based off Mutable Instruments Ambika

    The keyboard and wheel sensors send MIDI note, expression and polyphonic aftertouch messages to a polyphonic synthesizer. In this case a split keyboard effect is used to play two sounds.

    1:36 Technique: Layered Acoustic and Electronic Sound

    Hurdy Gurdy Acoustic audio, Gurdy MIDI → DIY Hybrid Poly Synth based off Mutable Instruments Ambika

    1:36 The acoustic string plays a melody, the bottom half of the keyboard controls a synthesizer with a long release for subtle held chords

    2:08 Using trompette technique can send MIDI messages, used here to play synthesized percussion on an Ambika voice assigned to MIDI channel 10, whilst the keyboard plays chords.

    2:30 Acoustic trompette and melody string sound layered over subtle polyphonic synthesized chords

    Playing, Instrument and Software: Barnaby Walters https://gurdy.is https://waterpigs.co.uk
    Polyphonic Pitch-shifting idea: Sébastien Tron
    Filming, editing: Adriana Borger

  4. Talking of [filterview] (gh), here’s the abstraction I made for it, incorporating stereo smooth filters and a nice mode switching UI made of a [hslider] hidden behind a bunch of canvases.

    Each canvas has a receive ID of $0- plus the symbol for the relevant filter mode, making the message sending for changing the colours easy.

  5. [biquad~] clicks and pops when changing coefficients, which is annoying when they’re coming from the [filterview] UI. The best way I found of smoothing them was to alternate between two biquad~ objects and crossfade between them over 3ms. This approach, while a little cludgy, is probably generalisable to a lot of similar Pd situations where smooth transitions are desirable.

  6. [freeverbcontrol] — I tried to make a little pd GUI abstraction for [freeverb~], but couldn’t find a simple (or even complicated) way of storing parameters which are unique per instance of the abstraction.

    The approach I eventually came with up is simple, if a little cludgier than I’d like: provide a template patch with the actual GUI as a subpatch, which must be copied/pasted into the patch you actually want to use it in.

    Download: freeverbcontrolpd.zip

  7. Barnaby Walters: typical Barnaby 01:00 insanity: implementing a patch browser and window manager in #puredata with weeeird semi-documented metaprogramming

    For those unfamiliar with , the equivalent in python would be creating a script which, in order to get user input, writes another python script containing a reference to the first, which, when run by the user, sends its output back to the first script. Which then launches another python process (based on the results of the first sub-script), and manages it’s status.

    It’s a programming paradigm which makes absolutely no sense in any other environment, but in puredata is surprisingly elegant — a pleasant side-effect of the programming environment and end-user environment being effectively the same.

    Btw, this is the first experimental step towards the most exciting project idea I’ve had in quite some time… watch this space!

  8. Initial draft of some musical experiments using puredata live with blockflute:

  9. I’m getting too used to (puredata.info) — I just right-clicked a python class and expected a hypermedia “help” option with params, example usage etc.

    Jetbrains PyCharm does have an inline documentation feature, which (when invoked via a complex keyboard “shortcut”), produces this gem:

    Even when this feature does work, it shows code “documentation” in a monospace font, typically with no usage example or links to other relevant documentation, as is standard in puredata.

    Our tools are inadequate.

    Update: added puredata documentation for comparison:

    In case it’s not clear from the screenshot, that usage example is live code — it can be interacted with, changed, copied and pasted, played with, experimented with. We typically can’t do that with existing text-based code, let alone mere usage examples.

    More thoughts I want to add to this, but I will write them up as a full article.

  10. My first puredata patch: Canoner! A cross between a delay and a looper, this patch allows you to play canons solo.

    Hit Start/Round as you start playing, then again at a round point, and the patch will continue to play what you played with that delay until you hit Stop.

    Extending the canoner to support n>2 part canons is left as an exercise for the reader.

    Patch code:

    #N canvas 405 217 363 240 10;
    #X obj 26 34 tgl 40 0 empty empty empty 17 7 0 10 -204786 -1 -1 0 1
    #X obj 26 84 route 1 0;
    #X obj 214 201 delwrite~ round 10000;
    #X obj 214 176 adc~;
    #X obj 26 117 timer;
    #X obj 26 148 delread~ round;
    #X obj 26 198 dac~;
    #X floatatom 165 149 5 0 0 0 - - -;
    #X floatatom 129 149 5 0 0 0 - - -;
    #X obj 26 174 *~ 0;
    #X obj 101 34 bng 40 250 50 0 empty empty empty 17 7 0 10 -260097 -1
    #X text 13 15 Start/Round;
    #X text 106 14 Stop;
    #X text 249 176 Input Stage;
    #X connect 0 0 1 0;
    #X connect 1 0 4 0;
    #X connect 1 1 4 1;
    #X connect 1 1 8 0;
    #X connect 3 0 2 0;
    #X connect 4 0 5 0;
    #X connect 5 0 9 0;
    #X connect 7 0 9 1;
    #X connect 8 0 9 1;
    #X connect 9 0 6 0;
    #X connect 9 0 6 1;
    #X connect 10 0 7 0;