Puredata! (thread)


I think I figured out something novel about software audio rate sequencing, since the input is driven by some kind of oscillator, there can be arbitrary signal processing stages prior to the signal reaching the [threshold~ ] which could make for very interesting timings. The 1ms tick rate limitation shouldn’t really matter since 1kHz seems like a decent upper bound for a sequencer.

I’ve already encountered the digital aliasing situation, though driving a sequencer is the first application where it has real world consequences. I think PD does what you describe with that special wavetable sinesum 1 ... n message to an array.

And yeah, I’m totes down to build a Buchla246 analog sequencer. I’m sort of tempted to go down the Buchla modular route solely to be contrarian to the tower of Eurorack trend on Youtube.


since the input is driven by some kind of oscillator

yeah indeed, that’s a super cool but also fundamental feature. it’s what i mean by “driven with an arbitrary phasor” in 246. the phasor doesn’t need to be a sawtooth.

at audio rate in digital, manipulating phasor gives you so-called “phase distortion synthesis,” which was famously capitalized on (and coined) with casio cz series as workaround strategy for yamaha/stanford’s FM patent.

PD does what you describe

sure you can implement bandlimiting via additive synthesis in PD, either with sinesum or freq domain. this is again fundamental stuff for any computer music environment since early days of csound or digital hardware like TG77, PPG.

(my favorite implementation of additive waveform definition is probably in supercollider, cause it has powerful array methods. i dunno if you’ve used SC but in general i think you would like it. it’s trivial to make arbitrary (audio) rate sequencer: { arg rate=10; var seq = Dseq(Array.rand(16),inf); Demand.ar(Impulse.ar(rate), 0, seq); }.play; …but, wrong thread…)

maybe my main point is just that “audio rate sequencing” is “wavetable synthesis,” you are just defining the wavetable in a novel way. one nice thing about pure analog is that these are really the same thing and don’t require special treatment.

anyway, fun stuff :slight_smile:


Well yeah, I’ve been ignoring computer music for a while and my fundamentals are rusty. I did a thesis project in college circa the year 1999 in Csound but I took a 10 year break.

To bring it back to PD, I’m less interested in the “analog versus digital” prose poem and more interested in the “use computers to model analog, as a prototyping environment for building hardware”. I literally built a whole PD modular setup from the hours of 8PM to 2AM last night, missing the SF Tape Music Festival in the process :wink: When I hooked up a physical controller with a patch bay to the computer, it all made sense. This is somehow far more satisfying than the trope of “I have $5000 what modules should I buy?”

I’m probably still going to buy some hardware modules but at least I have some sonic reference before I get seduced by the pretty metal panels with arrows.

I did some work with SC2 back in the day and started some studies with SC3 a few years ago, notably working with the exact UGens you pasted.


well indeed, indeed. ye olde analog/digital thing is usually a crummy kind of discussion but i have to bring it up in such a starkly applicative context.


and look, i’m actually not some kind of analog fanboy and generally resent the naive deployment of this dichotomy when in fact “digital” semiconductor-based design elements have been integral to “analog” synthesis since they were invented.

at the same time, one ignores the sampling theorem at one’s peril when the goal is “modelling hardware synthesizers in software.” so it’s not really a waste of time to consider the last 30 years of prior art in that problem domain.

and sure, if the real goal is towards prototyping hardware that will not ultimately suffer from sampling rate problems, then i guess just ignore the inevitable aliasing artifacts in the software prototype. (which you couldn’t afford to do if the thing your making is really “the thing.”)

and heck, i’m definitely not saying “you have to buy hardware” or some crap. (personally i am sort of gnerally anti-“gear.”) you can make analog synth hardware. my dad didn’t want to make analog synth hardware in 1999 because it was too easy and the schematics are right there online, requiring minimal generic components.

btw, the [details] and <details> tags are suddenly broken here. even for old posts that used to display correctly.


but to really bring it back to PD and analog modelling, i think what you want is something with tabread~ or its interpolated cousins, for audio rate sequencing, and avoid passing messages altogether if you can.

if you want to avoid aliasing artifacts you need something kind of involved, like periodically low-passing the content of the table indexed by tabread~, based on the predicted maximum rate of indexing.

some kind of slew filtering of the output of the tabread~ would be the poor man’s version of bandlimiting, getting you pretty far. (i’d try maybe interpolation by raised cosine segment.) in my mind it all starts looking like a C program pretty quickly. and yeah, i’m literally thinking that you want to make a sequencer that can be cranked up to arbitrary audio rates without sounding “like software.”

PD is arguably not the best environment for this because so much its functionality is at the message level.


I completely forgot about aliasing in higher frequencies with digital audio. I just observed this in my setup and found an example to do some dynamic low pass filtering. This is really cool tho, discreet differences between a computer model and the real thing are exactly what I’m looking for. I imagine bumping up the sample rate would mitigate the aliasing problem.

I was thinking about the [tabread~ ] route but I got pretty far sticking to the 1000Hz message limit. I would like to sequence to arbitrary audio frequencies but not right now. Thanks for your advice, you’ve helped my de-rust process.


Try Juce, https://juce.com/


I’ve messed around with JUCE a little bit, but I’m less interested in writing a VST vs making VSTs work within puredata. It’s true that I could use JUCE with the VST Host sample app and then pipe midi to it and figure out rewire, or separately figure out how to make JUCE act as a VST host on top of a pd external, but both seem like a bit of a pain. Honestly I’ll probably lose steam in a week or two, right now I’m just trying to get some of the easier non-audio externals working. Making something that would actually host a VST is pretty daunting and probably would be a few months of daily effort out.


noooooo! not another programming language… really, really thought I was ready to stop faffing around with other people’s research and use my existing knowledge to finish building a noisy thing… but yea once you really start trying to use faust & puredata in anger, it starts to seem that all roads lead to pure-lang… just one more rabbit hole

To fend off Programming Language Acquisition Syndrome I uninstalled nodejs


TBH I haven’t spent much time on faust yet, but the quickest way I’ve found to compile faust programs into pd externals is using grame’s online compiler (http://faust.grame.fr/onlinecompiler/) with Architecture Windows puredata. (I’m mostly using Windows 10). No need to mess with make files and compilers.


I did it! Thanks @zebra! I made a sequencer that can be driven at arbitrary audio frequencies. It works. The aliasing thing is real but I have a 96kHz sound card that should be fine right?


Hey lazzarello

i noticed you are working with pure data lets chat!
I have not compiled any faust-pd stuff yet but i’d like to
can you share your process?



yeas sure, you have more “headroom” for aliasing with higher SR. but of course it will still alias to some extent, given arbitrary non-bandlimited signals like squarewaves or pulses.

guess i would try just putting a lowpass at like 1/2 nyquist if you want to sort of smoothly transition between “sequencer” and “oscillator.”

here’s a cool page on implementing good FIR brickwalls in pd, which may be useful in your quest

but an easier step would just be a butterworth lowpass at, i dunno, 10khz or 16khz or something. you can roll one by hand with cpole~ and czero~ and fixed coefficients (see http://msp.ucsd.edu/techniques/v0.11/book-html/node145.html and the butterworth example in pd sources)

or hm, looks like IEM lib includes handy abstractions for butterworths of arbitrary order.

using faust->pd on linux is really easy. i haven’t tried it on other platforms.

assuming m_pd.h is in your include path, and faust is fully and currently installed, this “just works” for me

> faust2puredata foo.dsp


i am linux64 now after years away
i started with redhat5 so right around 1996 i started my linux/unix/irix/neXt love affair
i learned Pure Data on an SGI o2 and had 8 channels of audio working with GEM then too

Now i built it from scratch. I have to say i am mystifed by faust though i want to make a granulator for VCV either with pd or faust.

I just recently built libpd against 48-1 annd everything worked SO much easier then when peter first wrote it. i want to say right around 2008? I could be blurring stuff


Sure, what’s up? The parent repo of the link I posted has some of my work with PD.


hi i looked there and tried to run one of your patches but it’s missing illuciaControl & the audio-rate-sequencer
any location for those? :slight_smile:


I’m coming late to the thread and have gotten about a third of the way through. How realistic would it be to create Automatonism patches in the computer, load them into an external device like a rasp pi device with a few knobs, and use it standalone?

Sort of thinking of a nord micro modular concept. I don’t want to get super deep into programming PD patches, so having a library of modules really appeals to me.

This all new to me, so any advice is appreciated (even “get an Atoloxi”).


It’s more than realistic, it’s a whole DIY modular system called Terminal Tedium

I’m building one with some friends. The soldering is hard for one of the ICs that has tiny legs. The whole board is surface mount. The software glue can use improvement. Dealing with patch I/O transfer is fine for Linux nerds like myself but very obscure for anyone else. I think a front panel USB port with some kind of mass storage device thing would be a better user interface than SSH over Wifi. The Pi Zero has a USB host mode.

If all you want is a small embedded computer with PD + Automatonism with MIDI or OSC hardware control, that’s much more simple from the hardware perspective.


Bela Eurorack is also in the works. Here’s a prototype:


If you’re looking for a more “standalone instrument”-y thing instead of something to hook into eurorack I believe automationism works with the critter and guitar organelle.