[PD] Dynamic patching with audio - review

Hans-Christoph Steiner hans at at.or.at
Thu Sep 15 21:41:19 CEST 2011


This looks very thorough and useful.  It would be great to have in the
http://puredata.info/docs section (once the website is back up).

.hc


On Mon, 2011-08-29 at 16:16 +0200, abel.jerome at free.fr wrote:
> Hi all,
> 
> My last mail was broken by the mailing list engine.
> 
> The "prose" in a file if you please ;-):
> http://abel.jerome.free.fr/pd/dynamic-patching/reviews/DynamicPatching_review-3.txt
> 
> Jérôme (with accents)
> 
> ----- Mail original -----
> De: "abel jerome" <abel.jerome at free.fr>
> À: pd-list at iem.at
> Envoyé: Mercredi 24 Août 2011 12:49:10
> Objet: Re: Dynamic patching with audio - review
> 
> Hi,
> 
> A new report of my researchs about audio dynamic patching techniques.
> 
> The continuation of my previous reviews :
> http://abel.jerome.free.fr/pd/dynamic-patching/reviews/DynamicPatching_review-1.txt
> http://abel.jerome.free.fr/pd/dynamic-patching/reviews/DynamicPatching_review-2.txt
> 
> ===================================================
> Pd-list archives
> ===================================================
> "The issue has been discussed several times" (IOhannes m zmoelnig)
> 
> That's right. I've just seen that the "pd dsp O/1" method was described in 2005 ! 
> 
> It's quite difficult to find those threads without the terms "dsp tree" or "dsp graph" or "dsp chain". Indeed, I don't know anything about it.
> A list of the best search terms could help us (see below) and avoid those "noise" requests.
> 
> We are trying here to make a review of all dynamic patching techniques to make it easier to understand and find the "best" solution for any project. It could be a page on the community website instead of the disheartening "do not use dynamic patching" (http://puredata.info/docs/tutorials/TipsAndTricks#how-to-avoid-audio-drop-outs).
> 
> - Search engine usage
> ----------------------------------------
> When I search in the pd-list, the score show some posts where the search term are in the next or previous message links, not in the message body. How limit the search term to the body and not the links ?
> 
> Futhermore, if I'm interested in one thread, it seems that if I choose to sort by thread, it's only the threads of a month. How group one thread on all months ?
> 
> - Search terms
> ----------------------------------------
> "audio drop-outs with pd dsp O; pd dsp 1"
> "activate audio abstraction"
> "dynamic audio abstraction"
> "dynamic patching"
> "dynamic patching techniques"
> "update dsp-tree" 
> "update dsp-graph"ofxPd
> 
> - Threads about audio dynamic abstraction in pd-list
> ----------------------------------------
> - [PD] strange behavior upon loading dsp abstraction....
> http://lists.puredata.info/pipermail/pd-list/2004-12/thread.html#24337
> - [PD] no dsp-chain update after dynamic abstraction-creation
> http://lists.puredata.info/pipermail/pd-list/2005-06/028923.html
> - [PD] slowly load a pd-patches/abs without dropouts
> http://lists.puredata.info/pipermail/pd-list/2007-01/046243.html
> - [PD] this is crazy
> http://lists.puredata.info/pipermail/pd-list/2008-01/059244.html
> - [PD] API for manipulating a patch in real time
> http://lists.puredata.info/pipermail/pd-list/2008-12/066723.html
> - [PD] Dynamically created signal object bug
> http://lists.puredata.info/pipermail/pd-list/2009-02/068246.html
> - [PD] abstraction creation audio engine start
> http://lists.puredata.info/pipermail/pd-list/2009-04/069849.html
> 
> 
> ===================================================
> Dynamic creation of audio abstractions
> ===================================================
> 
> - Methods
> ----------------------------------------
> 1 - DSP 0/1
> 2 - Add/clear an audio object (subpatch)
> 3 - Add/cut any object (subpatch)
> 
> See : 
> http://abel.jerome.free.fr/pd/dynamicPatching/patchs/dyn-audio-abstraction/
> 
> This methods work with any abstraction.
> 
> - DSP 0/1 method - explanations
> ----------------------------------------
> From IOhannes m zmoelnig :
> "You shouldn't dynamically create abstractions while dsp is running, as it slows down significantly."
> 
> "If dsp is on, and you dynamically create 10 objects in one go (in zero
> logical time), then the dsp graph will be re-calculated 10 times.
> If you turn dsp off, then dynamically create 10 objects as before, then
> no dsp graph will be evaluated until you turn dsp on again, summing up
> to exactly 1 time.
> Furthermore, it guarantees that the entire DSP graph is calculated and
> not only parts of it (because of buggy implementations)"
> 
> Thanks a lot for those explanations. It's clear enough to see why choose these method even if internal processes in the DSP graph are still incomprehensibles.
> 
> - DSP 0/1 method - Some questions
> ----------------------------------------
> 
> --- With one audio abstraction.
> If we create just one audio abstraction at one time. Is it still the best solution or is it the same than other methods ?
> 
> --- Audio clics.
> From me:
> But audio clics may occur for all sounds, not just for the new one, right ?
> From IOhannes:
> "no, this is wrong. (at least not, if you computer is fast enough to calculate the DSP-graph within the buffertime)."
> 
> I don't understand how you can not heard clics with it.
> With my system, audio clics occur... Wrong settings ? Do I need a recent computer ?
> In fact, a clic is heard the first time with Jack/Alsa and always with Alsa and Asio4all.
> But in a dynamic patching case, what's this first time ? In the dynamic patch example, clics occurs even if I use Jack/Alsa.
> 
> See :
> http://abel.jerome.free.fr/pd/dynamic-patching/patchs/cpu-on-off/screenshots/cpu-on-off-audio-clics.png
> http://abel.jerome.free.fr/pd/dynamic-patching/patchs/dyn-audio-abstraction/screenshots/dyn-activate-audio-abstractions.png
> 
> --- Time response depends on audio system
> If I want a cross-platform system, it couldn't be the best solution.
> With my computer : WinXP (~ 90 ms), Xubuntu10.04.LTS(~ 20 ms with ALSA, ~0.09 ms with Jack/Alsa), PureDyne9.11+(~ 0.09 ms with Jack/Alsa) 
> 
> See :
> http://abel.jerome.free.fr/pd/dynamic-patching/patchs/cpu-on-off/screenshots/cpu-on-off-time.png
> 
> 
> - Methods without clics [line~]
> ----------------------------------------
> If I can't use audio on/off because of the clics, we need to make prepared abstractions with a [line~] method.
> 
> The idea is to split methods in two parts:
> - create/destroy objects
> - connect/disconnect audio paths (in our case : audio activation)
> 
> Audio processing methods:
> - [line~]
> - [switch~] and [line~]
> - all audio paths in a [mtx_*~] object which receive audio signals from abstraction and a [send~ $1] in abstrations, where $1 is the unique ID of the abstraction.
> 
> Communication methods:
> - global messages
> - unique message for abstractions : an unique Id in the first argument and a [r $1] in the abstraction
> 
> 
> ===================================================
> Dynamic patching : other techniques
> ===================================================
> 
> Any feedbacks or projects with those techniques ?
> 
> - ofxPd
> ---------------------------------------------------
> https://github.com/danomatika/ofxPd
> "Announcing ofxPd, an Open Frameworks addon for running an instance of the Pure Data audio environment within an OpenFrameworks application. Audio, messages, and MIDI events can be passed to and from pure data patches and the library is thread safe.
> Note: This is not the ofxPd originally released by Damian (see http://forum.openframeworks.cc/index.php/topic,4444.0.html). This is a new addon using the official libpd library.
> 
> - libpd, Purity, Dyn~, Pdsheefa, Ext13 lib
> ---------------------------------------------------
> I wrote some feedbacks about those techniques here :
> http://abel.jerome.free.fr/pd/dynamic-patching/reviews/DynamicPatching_review-2.txt
> 
> 
> ===================================================
> Dynamic patching : some quality specifications
> ===================================================
> We could synthesize specifications for a good audio dynamic system in Pd
> 
> - How many objects must be created in one time
> - Constraints about the quantity of audio objects
> - Activate audio (for abstractions)
> - System with any or prepared abstractions
> - Avoid audio clics (dsp on/off or line~): delete/create without clics, make connection/disconnect without clics
> - Dsp chain (update dsp-graph one time)
> - Best CPU (avoid compute dsp on unused abstractions)
> - Best time response (dsp 0/1 latency)
> - Easiest way (less is often better)
> - Internal messages or Pd exteranls or C/C++ API
> 
> 
> Jerome
> 
> _______________________________________________
> Pd-list at iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list





More information about the Pd-list mailing list