PD's scheduler, timing, control-rate, audio-rate, block-size, (sub)sample accuracy,
Hello, 
this is going to be a long one.
After years of using PD, I am still confused about its' timing and schedueling.
I have collected many snippets from here and there about this topic,
-wich all together are really confusing to me.
*I think it is very important to understand how timing works in detail for low-level programming … *
(For example the number of heavy jittering sequencers in hard and software make me wonder what sequencers are made actually for ? lol )
This is a collection of my findings regarding this topic, a bit messy and with confused questions.
I hope we can shed some light on this.

- a)
The first time, I had issues with the PD-scheduler vs. how I thought my patch should work is described here:
https://forum.pdpatchrepo.info/topic/11615/bang-bug-when-block-1-1-1-bang-on-every-sample
The answers where:
„
[...] it's just that messages actually only process every 64 samples at the least. You can get a bang every sample with [metro 1 1 samp] but it should be noted that most pd message objects only interact with each other at 64-sample boundaries, there are some that use the elapsed logical time to get times in between though (like vsnapshot~)
also this seems like a very inefficient way to do per-sample processing..
https://github.com/sebshader/shadylib http://www.openprocessing.org/user/29118
seb-harmonik.ar posted about a year ago , last edited by seb-harmonik.ar about a year ago
• 1
whale-av
@lacuna An excellent simple explanation from @seb-harmonik.ar.
Chapter 2.5 onwards for more info....... http://puredata.info/docs/manuals/pd/x2.htm
David.
“
There is written: http://puredata.info/docs/manuals/pd/x2.htm
„2.5. scheduling
Pd uses 64-bit floating point numbers to represent time, providing sample accuracy and essentially never overflowing. Time appears to the user in milliseconds.
2.5.1. audio and messages
Audio and message processing are interleaved in Pd. Audio processing is scheduled every 64 samples at Pd's sample rate; at 44100 Hz. this gives a period of 1.45 milliseconds. You may turn DSP computation on and off by sending the "pd" object the messages "dsp 1" and "dsp 0."
In the intervals between, delays might time out or external conditions might arise (incoming MIDI, mouse clicks, or whatnot). These may cause a cascade of depth-first message passing; each such message cascade is completely run out before the next message or DSP tick is computed. Messages are never passed to objects during a DSP tick; the ticks are atomic and parameter changes sent to different objects in any given message cascade take effect simultaneously.
In the middle of a message cascade you may schedule another one at a delay of zero. This delayed cascade happens after the present cascade has finished, but at the same logical time.
2.5.2. computation load
The Pd scheduler maintains a (user-specified) lead on its computations; that is, it tries to keep ahead of real time by a small amount in order to be able to absorb unpredictable, momentary increases in computation time. This is specified using the "audiobuffer" or "frags" command line flags (see getting Pd to run ).
If Pd gets late with respect to real time, gaps (either occasional or frequent) will appear in both the input and output audio streams. On the other hand, disk strewaming objects will work correctly, so that you may use Pd as a batch program with soundfile input and/or output. The "-nogui" and "-send" startup flags are provided to aid in doing this.
Pd's "realtime" computations compete for CPU time with its own GUI, which runs as a separate process. A flow control mechanism will be provided someday to prevent this from causing trouble, but it is in any case wise to avoid having too much drawing going on while Pd is trying to make sound. If a subwindow is closed, Pd suspends sending the GUI update messages for it; but not so for miniaturized windows as of version 0.32. You should really close them when you aren't using them.
2.5.3. determinism
All message cascades that are scheduled (via "delay" and its relatives) to happen before a given audio tick will happen as scheduled regardless of whether Pd as a whole is running on time; in other words, calculation is never reordered for any real-time considerations. This is done in order to make Pd's operation deterministic.
If a message cascade is started by an external event, a time tag is given it. These time tags are guaranteed to be consistent with the times at which timeouts are scheduled and DSP ticks are computed; i.e., time never decreases. (However, either Pd or a hardware driver may lie about the physical time an input arrives; this depends on the operating system.) "Timer" objects which meaure time intervals measure them in terms of the logical time stamps of the message cascades, so that timing a "delay" object always gives exactly the theoretical value. (There is, however, a "realtime" object that measures real time, with nondeterministic results.)
If two message cascades are scheduled for the same logical time, they are carried out in the order they were scheduled.
“
[block~ smaller then 64] doesn't change the interval of message-control-domain-calculation?,
Only the size of the audio-samples calculated at once is decreased?
Is this the reason [block~] should always be … 128 64 32 16 8 4 2 1, nothing inbetween, because else it would mess with the calculation every 64 samples?
How do I know which messages are handeled inbetween smaller blocksizes the 64 and which are not?
How does [vline~] execute?
Does it calculate between sample 64 and 65 a ramp of samples with a delay beforehand, calculated in samples, too - running like a "stupid array" in audio-rate?
While sample 1-64 are running, PD does audio only?
[metro 1 1 samp]
How could I have known that? The helpfile doesn't mention this. EDIT: yes, it does.
(Offtopic: actually the whole forum is full of pd-vocabular-questions)
How is this calculation being done?
But you can „use“ the metro counts every 64 samples only, don't you?
Is the timing of [metro] exact? Will the milliseconds dialed in be on point or jittering with the 64 samples interval?
Even if it is exact the upcoming calculation will happen in that 64 sample frame!?
- b )

There are [phasor~], [vphasor~] and [vphasor2~] … and [vsamphold~]
https://forum.pdpatchrepo.info/topic/10192/vphasor-and-vphasor2-subsample-accurate-phasors
“Ive been getting back into Pd lately and have been messing around with some granular stuff. A few years ago I posted a [vphasor.mmb~] abstraction that made the phase reset of [phasor~] sample-accurate using vanilla objects. Unfortunately, I'm finding that with pitch-synchronous granular synthesis, sample accuracy isn't accurate enough. There's still a little jitter that causes a little bit of noise. So I went ahead and made an external to fix this issue, and I know a lot of people have wanted this so I thought I'd share.
[vphasor~] acts just like [phasor~], except the phase resets with subsample accuracy at the moment the message is sent. I think it's about as accurate as Pd will allow, though I don't pretend to be an expert C programmer or know Pd's api that well. But it seems to be about as accurate as [vline~]. (Actually, I've found that [vline~] starts its ramp a sample early, which is some unexpected behavior.)
[…]
“
- c)

Later I discovered that PD has jittery Midi because it doesn't handle Midi at a higher priority then everything else (GUI, OSC, message-domain ect.)
EDIT:
Tryed roundtrip-midi-messages with -nogui flag:
still some jitter.
Didn't try -nosleep flag yet (see below)
- d)

So I looked into the sources of PD:
scheduler with m_mainloop()
https://github.com/pure-data/pure-data/blob/master/src/m_sched.c
And found this paper
Scheduler explained (in German):
https://iaem.at/kurse/ss19/iaa/pdscheduler.pdf/view
wich explains the interleaving of control and audio domain as in the text of @seb-harmonik.ar with some drawings
plus the distinction between the two (control vs audio / realtime vs logical time / xruns vs burst batch processing).
And the "timestamping objects" listed below.
And the mainloop:
Loop
- messages (var.duration)
- dsp (rel.const.duration)
- sleep
With
[block~ 1 1 1]
calculations in the control-domain are done between every sample? But there is still a 64 sample interval somehow?
Why is [block~ 1 1 1] more expensive? The amount of data is the same!? Is this the overhead which makes the difference? Calling up operations ect.?
Timing-relevant objects
from iemlib:
[...]
iem_blocksize~ blocksize of a window in samples
iem_samplerate~ samplerate of a window in Hertz
------------------ t3~ - time-tagged-trigger --------------------
-- inputmessages allow a sample-accurate access to signalshape --
t3_sig~ time tagged trigger sig~
t3_line~ time tagged trigger line~
--------------- t3 - time-tagged-trigger ---------------------
----------- a time-tag is prepended to each message -----------
----- so these objects allow a sample-accurate access to ------
---------- the signal-objects t3_sig~ and t3_line~ ------------
t3_bpe time tagged trigger break point envelope
t3_delay time tagged trigger delay
t3_metro time tagged trigger metronom
t3_timer time tagged trigger timer
[...]
What are different use-cases of [line~] [vline~] and [t3_line~]?
And of [phasor~] [vphasor~] and [vphasor2~]?
When should I use [block~ 1 1 1] and when shouldn't I?
[line~] starts at block boundaries defined with [block~] and ends in exact timing?
[vline~] starts the line within the block?
and [t3_line~]???? Are they some kind of interrupt? Shortcutting within sheduling???
- c) again)

https://forum.pdpatchrepo.info/topic/1114/smooth-midi-clock-jitter/2
I read this in the html help for Pd:
„
MIDI and sleepgrain
In Linux, if you ask for "pd -midioutdev 1" for instance, you get /dev/midi0 or /dev/midi00 (or even /dev/midi). "-midioutdev 45" would be /dev/midi44. In NT, device number 0 is the "MIDI mapper", which is the default MIDI device you selected from the control panel; counting from one, the device numbers are card numbers as listed by "pd -listdev."
The "sleepgrain" controls how long (in milliseconds) Pd sleeps between periods of computation. This is normally the audio buffer divided by 4, but no less than 0.1 and no more than 5. On most OSes, ingoing and outgoing MIDI is quantized to this value, so if you care about MIDI timing, reduce this to 1 or less.
„
Why is there the „sleep-time“ of PD? For energy-saving??????
This seems to slow down the whole process-chain?
Can I control this with a startup flag or from withing PD? Or only in the sources?
There is a startup-flag for loading a different scheduler, wich is not documented how to use.
- e)

[pd~] helpfile says:
ATTENTION: DSP must be running in this process for the sub-process to run. This is because its clock is slaved to audio I/O it gets from us!
Doesn't [pd~] work within a Camomile plugin!?
How are things scheduled in Camomile? How is the communication with the DAW handled?
- f)

and slightly off-topic:
There is a batch mode:
https://forum.pdpatchrepo.info/topic/11776/sigmund-fiddle-or-helmholtz-faster-than-realtime/9
EDIT:
- g)
I didn't look into it, but there is:
https://grrrr.org/research/software/
clk – Syncable clocking objects for Pure Data and Max
This library implements a number of objects for highly precise and persistently stable timing, e.g. for the control of long-lasting sound installations or other complex time-related processes.
Sorry for the mess!
Could you please help me to sort things a bit? Mabye some real-world examples would help, too.

installing PD-extended onto the raspberry pi 3
Hello everyone!
I following the installing instructions for Pd extended for Raspberry Pi
and when I run this command:
$ sudo dpkg -i Pd-0.43.3-extended-20121004.deb
I keep getting this error:
Selecting previously unselected package pd-extended.
(Reading database ... 57768 files and directories currently installed.)
Unpacking pd-extended (from Pd-0.43.3-extended-20121004.deb) ...
dpkg: dependency problems prevent configuration of pd-extended:
pd-extended depends on libfftw3-3; however:
Package libfftw3-3 is not installed.
pd-extended depends on libftgl2 (>= 2.1.3~rc5); however:
Package libftgl2 is not installed.
pd-extended depends on libglu1-mesa | libglu1; however:
Package libglu1-mesa is not installed.
Package libglu1 is not installed.
pd-extended depends on libgsl0ldbl (>= 1.9); however:
Package libgsl0ldbl is not installed.
pd-extended depends on libjack-jackd2-0 (>= 1.9.5~dfsg-14) |
libjack-0.116; however:
Package libjack-jackd2-0 is not installed.
Package libjack-0.116 is not installed.
pd-extended depends on liblua5.1-0; however:
Package liblua5.1-0 is not installed.
pd-extended depends on libmp3lame0; however:
Package libmp3lame0 is not installed.
pd-extended depends on libquicktime2 (>= 2:1.2.2); however:
Package libquicktime2 is not installed.
pd-extended depends on libspeex1 (>= 1.2~beta3-1); however:
Package libspeex1 is not installed.
dpkg: error processing pd-extended (--install):
dependency problems - leaving unconfigured
Processing triggers for man-db ...
Processing triggers for menu ...
Processing triggers for hicolor-icon-theme ...
Processing triggers for desktop-file-utils ...
Processing triggers for shared-mime-info ...
Errors were encountered while processing:
Has anyone else encountered this problem?
If so, any suggestions?
thanks,
J
Installing PureData 32 bits on 64 bits host for the life of a project
@whale-av Thank you for your respons.
I tried to install pd-extended by the repo, but there are in 404 status :/
So i download pd-extended.deb to install on my 64 bits host but i miss these depedancies:
pd-extended:i386 dépend de libfftw3-3.
pd-extended:i386 dépend de libflite1.
pd-extended:i386 dépend de libftgl2 (>= 2.1.3~rc5).
pd-extended:i386 dépend de libgl1-mesa-glx | libgl1.
pd-extended:i386 dépend de libglu1-mesa | libglu1.
pd-extended:i386 dépend de libgsl0ldbl (>= 1.9).
pd-extended:i386 dépend de libice6 (>= 1:1.0.0).
pd-extended:i386 dépend de liblua5.1-0.
pd-extended:i386 dépend de libmp3lame0.
pd-extended:i386 dépend de libpng12-0 (>= 1.2.13-4).
pd-extended:i386 dépend de libquicktime2 (>= 2:1.2.2).
pd-extended:i386 dépend de libsdl1.2debian (>= 1.2.11).
pd-extended:i386 dépend de libsm6.
pd-extended:i386 dépend de libspeex1 (>= 1.2~beta3-1).
pd-extended:i386 dépend de libvorbisfile3 (>= 1.1.2).
pd-extended:i386 dépend de libx11-6.
pd-extended:i386 dépend de libxext6.
pd-extended:i386 dépend de libxv1.
pd-extended:i386 dépend de libxxf86vm1.
pd-extended:i386 dépend de ttf-de
i can also find pd-extended:i386 in the repo list.
But still these deps are missing. Should i installed them one by one ?
Edit :
After trying to install each dept its not working.. some deps can't be satisfied..
how can i installed pd-extended:i386 on 64 bits host :/
Final Solution: Anyone looking to control Ableton Live...easily
Hi All
A little bit of work to set up but forget midi mapping...google it if you dont believe me.
After a lot of time spent trying to get a simple but sophisticated way (using a minimal 8 button floorboard) to control Live on w10, I thought I would share this particular solution to possibly help others (especially after the help offered here on this forum). I tried a number of scenarios, even buying Max 4 Live, but it turns out a lot simpler than that. It needs 3 main areas set
FOOT CONTROLLER BEHAVIOURS/GESTURES
Create pd patch that gives you 'behaviours' per switch. Ill be happy to share mine but Im just cleaning them up atm.
eg I have 4 standard behaviours that dont take too much time to master
- Action A: A quick click (less than 500ms) Always the primary action
- Action B: Long click ie 1 click down and pedal up after 500ms. I use this eg always as a negative ramp down for things like lowering volume but if its just held down and released in a natural way, it is the secondary action of the switch
- Action C: 3 Click ie 1 quick down, up and then hold down. I use this for a positive ramp eg as volume up
4 Actiion D: Double click, Always a cancel
These are all mapped to note/ctrl outs that match the 'Selected Track Control' below
PLUGIN
Use PD VST to create a plugin version of your patch. This is loaded into Live as a control track. Live manages the connection of your floor board etc into the actual track so you dont wrestle with the io. I always use track 1 for click (forget Live metronome, this is much more flexible and can have feel/swing etc) so I dedicate track 2 to control.
Use LoopMIDI to create a virtual midi cable that will go from this track and be fed into the remote script.
REMOTE SCRIPT: 'Selected Track Control'
Download latest from http://stc.wiffbi.com/
Install to live and make sure your notes/control conform.
Enable this as a control surface in live and connect midi in from the plugin. Think about giving the guy a donation...massive amount of work and he deserves it!
I use it to control 8 tracks x 8 scenes and is controlled by 3 switches
- Scene control up and down (A = down, B = up)
- Track control same as scene
- Rec/Fire/Undo Volume up and down (A = fire/rec, B = Volume Down, C = Volume Up, D (Dbl Click) = Undo
The scenes and tracks wrap so there isnt too much foot tapping
There is quite a bit more to it of course...its and maybe no one else needs this but it would have saved me a couple of weeks of time so Im happy to help anyone wanting to achieve gigging without a massive floor rig and an easy way to map and remember.
HTH someone
Cheers
mark
Build a MIDI controller with the Arduino, Firmata and Pure Data
Time to start contributing some knowledge back to the wonderful world that is the internet; today, a step by step nice and easy tutorial on getting started to building your own MIDI controllers with the arduino.
When researching for my ableton controller project, I didn’t find much out there about using firmata on an arduino to send data to software. The standard approach just seemed to be create the code in the arduino language, upload it to your board and hack one of those MIDI to USB cables as a bodge job way of getting the MIDI out of the arduino.
So why firmata and pure data? Well the whole idea of firmata is that you flash it to your arduino, and it throws out serial about whats going on with the arduino inputs and outputs, then you decide how the software treats the readings coming in and going out.
Theory out the way, lets build some controllers. You’ll need a few things…
HARDWARE:
An arduino and something to wire into it (for this i’ll be using a pot)
A USB cable for your arduino
SOFTWARE:
Arduino – http://arduino.cc/en/Main/Software
Pure Data – http://puredata.info/downloads
Firmata – http://at.or.at/hans/pd/objects.html#pduino
Something to patch your new controller into; like Reason or Ableton Live
- SETTING UP FIRMATA AND PURE DATA
Install Pure Data and create a folder to store all your patches somewhere. Unzip Firmata and add the files ‘arduino.pd’, ‘arduino-test.pd’ and ‘arduino-help.pd’ to your new Pure Data folder. The ‘arduino.pd’ file is the object that we use in PD for opening up communication with your arduino and routing it to PD. Done? Awesome, your software is almost set up.
- FLASHING FIRMATA TO YOUR ARDUINO
Install the latest version of arduino and open it up. Connect your arduino with the USB cable to your laptop (i’m using a macbook for this by the way). In the example patches, open up “Standard Firmata”, select your board (im using an arduino mega), and your serial port (look for tty.usbserial for use with a USB cable). Then compile and hit the upload button and your arduino is now ready to use firmata and communicate with Pure Data!
- WIRING UP A POT

Potentiometers are cool, and theres a great arduino tutorial of how to wire one up here: http://www.arduino.cc/en/Tutorial/Potentiometer
Basically, all you need to know is that there are three pins; your two outer pins govern voltage flow across the pot, meaning one has to be 5V and the other has to be ground. It doesn’t matter which, but your 5v pin is going to be where your pot reads maximum, so convention dictates this should be the right hand pin. The center pin needs to be connected to an analog in on the arduino and will read the value of the pot as it sweeps from ground (0v) to 5v.
All wired up? Plug it into your laptop and open Pure Data, we’re ready to get things talking.
- SETTING UP OUR PATCH
Open the example “arduino-test.pd” Pure Data patch you copied over earlier. It should look like this one…

The test patch has everything we need to open a connection and enable pins. Firstly, lets delete a bunch of stuff and make our window a bit bigger. Hit Command + E to enter edit mode in Pure Data.

Ok a quick explaination; the key component here is the ‘arduino’ object. This is being drawn from the file you copied in earlier, and is what communicated with your arduino. Here we can do everything to control the arduino from opening a connection, to receiving data.
The large grid allows us to set the mode of each pin on the arduino. Remember pins 0 and 1 are reserved for Rx and Tx. I’m using analog pin 4 for this demo, so I’ve set my pin mode for pin 4 to ‘analog’.
Now we can plug our arduino in and get a reading from the potentiometer.
- ARDUINO INTO PURE DATA
With your arduino plugged in, hit command and E to bring us out of edit mode. In our patch, click on ‘Devices’ above the arduino object and open up the pure data terminal. (That other thing that loads with PD that has all the scary code in)

The “Devices” message connected to the arduino object pings your computer to find what devices are connected and on what serial ports. Since we’re using a USB cable to connect our arduino, we’re looking for something with ‘usbserial’ in it, in this case; port 2.
Select the relevent port in the green box at the top (remember the first box is ‘0’, second is ‘1’ and so forth) and hit ‘Open’ to establish a connection. Check the terminal to see if the connection was sucessful.

Now lets check we’re getting something in. Create a number box (Command + 3) and connect it to the relevent pin on the ‘Route analog’ box at the bottom. In this case, pin 4.
One more thing; if you’re not getting any readings in, you’ll need to click on ‘pd old analog/digital controls’ and enable your pins here too. What I tend to do in my patches is just not include the large grid but make my own ‘old pd’ controls custom to what i’m enabling/disabling to save space.
Here’s what the ‘old analog/digital controls’ subpatch looks like (pin 4 enabled)…

Come out of edit mode and check that you’ve got readings. If so congratulations! If not, troubleshoot, start with making sure your usb connection is opened, make sure all the correct pins are enabled (remember you’re counting from 0 not 1 on most of these buttons in PD, it’s just the way computers work).
- SCALING READINGS TO MIDI
So we’ve got a reading and chances are it’s to 3 decimal places between 0 to 1. No problem, create a new object (Command + 1) and type “autoscale 0 127”. This allows us to scale the input to a min and max value, in this case 0 to 127 of MIDI. Next, lets get things looking nice, create a new object and type “knob”. Connect this AFTER the autoscale object. (the knob is default set to read inputs from 0 to 127. Then create another number to display the scaled MIDI data coming out, and finally a new object and type “ctlout 1”.
It should look something like this…

The second box should be outputing values from 0 – 127 now, and the knob giving a visual representation of your potentiometer.
Now lets patch it into ableton…
- PURE DATA TO ABLETON LIVE
Firstly, you’ll need to set up your macs IAC driver if you’ve not done this. Basically you’ll need to go into Audio/MIDI preferences and enable your IAC driver. Then create a new input and output. One for input to DAW and one for output from DAW. Google around for a tutorial on this, its really simple, a 30 second job.
After you’ve set up your IAC driver, go back to PD and go to preferences > MIDI Settings, and connect your IAC driver.

Open ableton and go to its MIDI preferences. Create a device listing for your IAC driver and enable its ins and outs into ableton like so…


And thats it! Create an instrument and try to assign something! I’ve got it controlling the brightness of a bass sound here.
Shout out for Facu who requested this tutorial. Hopefully it’ll help some of you looking to get into this stuff and start building things but with no idea where to start.
Pure data Random endless list of errors?
Currenty outputs no sound?
input channels = 0, output channels = 0
input channels = 0, output channels = 0
tried /Applications/Pd-extended.app/Contents/Resources/extra/libdir/libdir.pd_darwin and succeeded
tried /Applications/Pd-extended.app/Contents/Resources/extra/vanilla/list.pd_darwin and succeeded
tried ./extra.pd_darwin and failed
tried /System/Library/Fonts/extra.pd_darwin and failed
tried /Library/Fonts/extra.pd_darwin and failed
tried /Users/joelnash/Library/Fonts/extra.pd_darwin and failed
tried /usr/X11R6/lib/X11/fonts/TTF/extra.pd_darwin and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/fonts/extra.pd_darwin and failed
tried /Users/joelnash/Library/Pd/extra.pd_darwin and failed
tried /Library/Pd/extra.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/Scripts/../extra/extra.pd_darwin and failed
tried ./extra/extra.pd_darwin and failed
tried /System/Library/Fonts/extra/extra.pd_darwin and failed
tried /Library/Fonts/extra/extra.pd_darwin and failed
tried /Users/joelnash/Library/Fonts/extra/extra.pd_darwin and failed
tried /usr/X11R6/lib/X11/fonts/TTF/extra/extra.pd_darwin and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/fonts/extra/extra.pd_darwin and failed
tried /Users/joelnash/Library/Pd/extra/extra.pd_darwin and failed
tried /Library/Pd/extra/extra.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/Scripts/../extra/extra/extra.pd_darwin and failed
tried ./extra/extra-meta.pd and failed
tried /System/Library/Fonts/extra/extra-meta.pd and failed
tried /Library/Fonts/extra/extra-meta.pd and failed
tried /Users/joelnash/Library/Fonts/extra/extra-meta.pd and failed
tried /usr/X11R6/lib/X11/fonts/TTF/extra/extra-meta.pd and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/fonts/extra/extra-meta.pd and failed
tried /Users/joelnash/Library/Pd/extra/extra-meta.pd and failed
tried /Library/Pd/extra/extra-meta.pd and failed
tried /Applications/Pd-extended.app/Contents/Resources/Scripts/../extra/extra/extra-meta.pd and succeeded
tried ./pdlua.pd_darwin and failed
tried /System/Library/Fonts/pdlua.pd_darwin and failed
tried /Library/Fonts/pdlua.pd_darwin and failed
tried /Users/joelnash/Library/Fonts/pdlua.pd_darwin and failed
tried /usr/X11R6/lib/X11/fonts/TTF/pdlua.pd_darwin and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/fonts/pdlua.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/Scripts/../extra/extra/pdlua.pd_darwin and failed
tried /Users/joelnash/Library/Pd/pdlua.pd_darwin and failed
tried /Library/Pd/pdlua.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/Scripts/../extra/pdlua.pd_darwin and failed
tried ./pdlua/pdlua.pd_darwin and failed
tried /System/Library/Fonts/pdlua/pdlua.pd_darwin and failed
tried /Library/Fonts/pdlua/pdlua.pd_darwin and failed
tried /Users/joelnash/Library/Fonts/pdlua/pdlua.pd_darwin and failed
tried /usr/X11R6/lib/X11/fonts/TTF/pdlua/pdlua.pd_darwin and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/fonts/pdlua/pdlua.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/Scripts/../extra/extra/pdlua/pdlua.pd_darwin and failed
tried /Users/joelnash/Library/Pd/pdlua/pdlua.pd_darwin and failed
tried /Library/Pd/pdlua/pdlua.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/Scripts/../extra/pdlua/pdlua.pd_darwin and succeeded
tried ./tclpd.pd_darwin and failed
tried /System/Library/Fonts/tclpd.pd_darwin and failed
tried /Library/Fonts/tclpd.pd_darwin and failed
tried /Users/joelnash/Library/Fonts/tclpd.pd_darwin and failed
tried /usr/X11R6/lib/X11/fonts/TTF/tclpd.pd_darwin and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/fonts/tclpd.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/Scripts/../extra/extra/tclpd.pd_darwin and failed
tried /Users/joelnash/Library/Pd/tclpd.pd_darwin and failed
tried /Library/Pd/tclpd.pd_darwin and failed
tried /Applications/Pd-extended.app/Contents/Resources/Scripts/../extra/tclpd.pd_darwin and failed
tried ./tclpd/tclpd.pd_darwin and failed
tried /System/Library/Fonts/tclpd/tclpd.pd_darwin and failed
tried /Library/Fonts/tclpd/tclpd.pd_darwin and failed
tried /Users/joelnash/Library/Fonts/tclpd/tclpd.pd_darwin and failed
tried /usr/X11R6/lib/X11/fonts/TTF/tclpd/tclpd.pd_darwin and failed
tried /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/fonts/tclpd/tclpd.pd_darwin and
Novation Launch controller abstraction, with LED feedback for the buttons.
Heeeeelllloooo PD users 
Here is my first contribution to the community library. This is a midi controller abstraction for the
Novation Launch Controller. The first 4 pages on the Launch Controller are assigned to midi cc and gives you full feedback over the LED's See further description in patch.
Patch with abstractions for each of the first 4 pages:
Launch Controller .pd
I have also included the 4 Launch Controller set up for the 4 pages to get you started.
PD user page 1.syx
PD user page 2.syx
PD user page 3.syx
PD user page 4.syx
These have been updated, the first version I put was not really working. I was a bit too quick posting
it out of Pure excitement 
Have fun!
Jaffa
Andúril (MobMuPlat app): fwd/bwd looper + 14 effects + elven cloak (control parameters via env~ and pitch as you play)
Andúril (MobMuPlat app): fwd/bwd looper + 14 effects + elven cloak (control parameters via env~ and pitch as you play)
UPDATED VERSION (corrected MobMuPlat system crash problem):
anduril.zip
This has been long in coming and I am very glad to finally release it (even tho my handheld hardware is not up to the job of running the elven cloak feature).
First a demo video and some screenshots, , and then the instructions.
DEMO VIDEO
SCREENSHOTS



Intention(s):
The app is designed to give (specifically a guitarist) tho really any input (even prerecorded as is the case in the demo (from: "Laura DeNardis Performing Pachabels Canon" from https://archive.org/details/LauraDenardisPerformingPachabelsCanon, specifically the wave file at: https://archive.org/download/LauraDenardisPerformingPachabelsCanon/PachabelsCanon.wav, Attribution-Noncommercial-Share Alike 3.0) FULL Control over the "voice" of their output-sound.
It includes:
a 5-band EQ (on page 2 of the app) (upfront that is applied to all incoming sounds);
a looper: with record, forward, backward, speed, and bypass controls (that runs via a throw along with the effects channel)
14 effects each with 3 controllable parameters (via the xy-slider+centered knob) including: chorus, distortion, delay, reverb, flanger, tremolo, vibrato, vcf, pitchshifter, pitchdelay, 12string, stepvibrato, pushdelay (delayfb driven by magnitude of the env~), and stagdelay (2 out-of-sync delay lines which can be driven in and out of phase by the sum of their delwrite+vd's so what goes in first may come out last)
elven_cloak: which drives the 3 parameter controls via the peak bands amplitude and proximity to a set pitch (midi note) and whose window can be broadened or shrunk and shifted within that window, i.e. the three effect parameters are changed automatically according to what and how you play
and
a tester synth: that randomly sends midi pitches between 20-108, velocities between 20-127, and durations between 250-500ms.
CONTROLS (from top-left to bottom-right):
PAGE 1:
Effect: effects menu where the you choose an effect;
>>>,<<<: page navigation buttons;
IN,OUT: gains (IN is the preamp on the EQ5, and OUT is applied to total output);
REC,FWD,BWD,speed,normspd: the looper toggles and on speed, higher is faster and mid normal and normspd resets to mid;
xy-slider+centered knob: the 3 parameter controls + their labels (the bottom is x, top y and above the knob for the third one), the name of the selected effect and its parameters load each time you choose from the Effects menu, bottom left is lowest, top-right highest;
ByLp,ByEff: bypasses for the looper and effects "channel" (the outputs are summed);
EC-on: elven cloak toggle (default=off);
PAGE 2:
the EQ5 controls;
synthtest: off|on, default is off;
PAGE 3: elven cloak controls
reset: sets shift, metro, mid, and radius to 0, 500(ms),64,100% respectively (i.e. the entire midispectrum, 0-127) respectively;
mini-xyz, test: if test is on, you see a miniature representation of the xyz controls on the first page, so you can calibrate the cloak to your desired values;
shift: throws the center of the range to either the left or right(+/-1);
metro: how frequently in milliseconds to take env~ readings;
mid: the center in midipitch, i.e. 0-127, of the "watched" bands
radius(%): the width of the total bands to watch as a percentage of whichever is lower 1-mid or mid
END CONTROLS
Basic Logic:
There are 4 modes according to the bypass state of the looper and effects.
A throw catch and gain/sum/divide is applied accordingly.
End:
As I mentioned at the first, my handheld(s) are not good enough to let me use this but it runs great on my laptop.
So...
I would love to hear if this Does or Does Not work for others and even better any output others might make using it. I am enormously curious to hear what is "possible" with it.
Presets have not (yet
been included as I see it, esp. with the cloak as a tool to be used for improv and less set work. Tho I think it will work nicely for that too if you just turn the cloak off.
hmmm, hmmm,...
I think that's about it.
Let me know if you need any help, suggestions, ideas, explanations, etc. etc. etc. regarding the tool. I would be more than happy to share what I learned.
Peace, Love, and Ever-Lasting Music.
Sincerely,
Scott
p.s. please let me know if I did not handle the "attribution" part of "Laura DeNardis Performing Pachabels Canon" License correctly and I will correct it immediately.
Ciao, for now. Happy PD-ing!
Audio Ideas (AI) Collection (placeholder, currently only links)-effects, controllers, mmp, etc.
Audio Ideas (AI) Collection (placeholder) currently only links
per @LiamG 's kind suggestion I have begun the process of consolidating my abs and patches, etc. into a single location/zip file or for possible upload to github.
Just to get the ball/me rolling and scope the work I got the links for my shares into a single location to later be consolidated into the single AI Collection.
For now at least, please, bare with me (and the links below) as ideas I am more passionate about currently are demanding my attention. (Which
funnily enough will probably also be included in the set, where ever they are shared.)
Thanks, for your patience and all you do for the Pure Data Family.
Sincerely,
Scott
abstract~
pushdelay-envelope-env-driven-delay-line-with-both-delay-time-and-feedback-dependent
numpad-abstraction-for-entry-of-large-numbers-via-click-instead-of-sliders-includes-basic-calculator
abs_delay_fbw-feedbackwards-lifo-last-in-first-out-delay
abs_sequences_by_formula-sequences-by-formula-abstraction-ex-collatz
abs_effects_router-60-effects-in-one-abstraction-router-from-diy2-stamp-album-my-abs
visualcontrolsurface-vsl-values-set-by-their-location-on-the-screen-req-ggee-shell
abs_4-8-14_way_toggle-pair-2-toggles-resulting-in-4-8-or-14-states
audioflow-delay-to-forward-backward-looper-using-speed-control
5-band-equalizer-with-bezier-controller-eq5_mey_w_bezier_sv-pd-updated-to-8-band-below
forward-backward-looper-orig-abs-from-residuum-whale-av
abs_rgb2hex-rgb-0-255-colors-to-hexadecimal-values
pseudo-12-string-effect-6-string-guitar-to-sound-like-a-12-string
jack_midi2pd_2sys_connector_sv-jack-midi_out-to-pd-sys_playback-switcher
abs_4to16pads_bin_conv_sv-convert-4-midi-pads-from-a-binary-value-to-a-decimal-for-rerouting
abs_automatedslider_sv-automated-control-changer-pd-and-mobmuplat-editor-versions
idea-for-effects-stack-ing-technique-control-mother
micin-_abs-abstraction-convert-signal-to-notein-ex-using-a-midi-synth-as-a-guitar-pedal
curve_abs-tri-way-curve-switch-to-change-control-values-in-either-linearly-convex-or-concave-manner
a-preset-control-abstraction-for-saving-parameters-presets-to-text-files
4-tap-delay-with-pitch-shifter-per-delay-line-adaptation-of-diy2-patches
patch~
extra
the-15-owl-faust-patches-compiled-as-32bit-linux-externals-attached
libpd
mmponboardeditortemplate-mmp-for-creation-of-mobmuplat-files-directly-on-the-handheld-android-only
3d-synth-webpd-tree-js-webgl_camera_cinematic-html-example
Off topic
Errors in building pd-extended on Odroid C2
Hello,
I get errors, likely related to alsa, when building from source pure data extended
(the last version - ) on ODROID C2, running Ubuntu 16.04.
To build I simply followed the instructions listed on the puredata.info
(cd pure-data/packages/linux_make and then make instal)
I think I
to have all the dependencies correctly installed.
Here the last lines of the build output
pd-s_audio_alsamm.o: In function `alsamm_stop':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:998: undefined reference to `snd_pcm_drop'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1012: undefined reference to `snd_pcm_drop'
pd-s_audio_alsamm.o: In function `alsamm_close_audio':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:395: undefined reference to `snd_pcm_close'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:407: undefined reference to `snd_pcm_close'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:390: undefined reference to `snd_pcm_unlink'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:395: undefined reference to `snd_pcm_close'
pd-s_audio_alsamm.o: In function `alsamm_stop':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:998: undefined reference to `snd_pcm_drop'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1012: undefined reference to `snd_pcm_drop'
pd-s_audio_alsamm.o: In function `alsamm_send_dacs':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1111: undefined reference to `snd_pcm_avail_update'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1133: undefined reference to `snd_pcm_state'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1216: undefined reference to `snd_pcm_mmap_commit'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1245: undefined reference to `snd_pcm_avail_update'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1256: undefined reference to `snd_pcm_state'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1321: undefined reference to `snd_pcm_mmap_commit'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1128: undefined reference to `snd_pcm_avail_update'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1133: undefined reference to `snd_pcm_state'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1148: undefined reference to `snd_pcm_avail_update'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1272: undefined reference to `snd_pcm_avail_update'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1253: undefined reference to `snd_pcm_avail_update'
pd-s_audio_alsamm.o: In function `alsamm_showstat':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1359: undefined reference to `snd_pcm_status_sizeof'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1359: undefined reference to `snd_pcm_status_sizeof'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1360: undefined reference to `snd_pcm_status'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_audio_alsamm.c:1364: undefined reference to `snd_pcm_status_dump'
pd-s_midi_alsa.o: In function `sys_alsa_do_open_midi':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:69: undefined reference to `snd_seq_open'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:83: undefined reference to `snd_seq_create_simple_port'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:67: undefined reference to `snd_seq_open'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:94: undefined reference to `snd_seq_create_simple_port'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:71: undefined reference to `snd_seq_open'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:101: undefined reference to `snd_seq_client_info_malloc'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:102: undefined reference to `snd_seq_get_client_info'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:103: undefined reference to `snd_seq_client_info_set_name'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:104: undefined reference to `snd_seq_client_info_get_client'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:105: undefined reference to `snd_seq_set_client_info'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:106: undefined reference to `snd_seq_client_info_free'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:109: undefined reference to `snd_midi_event_new'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:137: undefined reference to `snd_seq_port_subscribe_sizeof'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:137: undefined reference to `snd_seq_port_subscribe_sizeof'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:139: undefined reference to `snd_seq_client_info_sizeof'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:139: undefined reference to `snd_seq_client_info_sizeof'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:140: undefined reference to `snd_seq_port_info_sizeof'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:140: undefined reference to `snd_seq_port_info_sizeof'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:141: undefined reference to `snd_seq_client_info_set_client'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:145: undefined reference to `snd_seq_client_info_get_client'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:142: undefined reference to `snd_seq_query_next_client'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:149: undefined reference to `snd_seq_port_info_set_client'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:150: undefined reference to `snd_seq_port_info_set_port'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:151: undefined reference to `snd_seq_query_next_port'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:154: undefined reference to `snd_seq_port_info_get_port'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:157: undefined reference to `snd_seq_port_subscribe_set_sender'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:158: undefined reference to `snd_seq_port_subscribe_set_dest'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:159: undefined reference to `snd_seq_subscribe_port'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:163: undefined reference to `snd_seq_port_subscribe_set_sender'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:164: undefined reference to `snd_seq_port_subscribe_set_dest'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:165: undefined reference to `snd_seq_subscribe_port'
pd-s_midi_alsa.o: In function `sys_alsa_putmidimess':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:224: undefined reference to `snd_seq_event_output_direct'
pd-s_midi_alsa.o: In function `sys_alsa_putmidibyte':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:242: undefined reference to `snd_seq_event_output_direct'
pd-s_midi_alsa.o: In function `sys_alsa_poll_midi':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:257: undefined reference to `snd_midi_event_init'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:260: undefined reference to `snd_seq_event_input_pending'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:265: undefined reference to `snd_midi_event_decode'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:262: undefined reference to `snd_seq_event_input'
pd-s_midi_alsa.o: In function `sys_alsa_close_midi':
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:278: undefined reference to `snd_seq_close'
/home/odroid/Desktop/pdextended_sources/pd-extended/pd/src/s_midi_alsa.c:281: undefined reference to `snd_midi_event_free'
collect2: error: ld returned 1 exit status
make[5]: *** [pd] Error 1
make[4]: *** [all-recursive] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [pd] Error 2
make: *** [install] Error 2
I there anyone who managed to install pd-extended on ODROID C2 and
can suggest a way to solve this issue?
Thanks in advance!



