Have you looked at the [switch~] object? It doesn't allow you to create/destroy the abstractions, but it does allow you to turn off dsp in each of them as necessary.
-Jonathan
--- On Tue, 3/15/11, Jérôme Abel abel.jerome@free.fr wrote:
From: Jérôme Abel abel.jerome@free.fr Subject: [PD] Dynamic patching with audio - review To: pd-list@iem.at Date: Tuesday, March 15, 2011, 12:07 AM Hi dynamic community,
I'm working on an open source multiuser game with a sound experimentation focus. The choosen sound engine is our favorite one Pure Data. Let's imagine populate a 3D world with pd sound patchs ! The issue is to create/destroy audio abstractions (made by users/artists) and connect/disconnect them. The audio path system must be compliant with paths in a 3D world. A sound pass through rooms and apertures : http://abel.jerome.free.fr/newatlantis/AudioDynamicPatching/images/pathfindi...
It must be dynamic like a game. I was enjoying doing this with pd, but ... my hair become more and more white. It's quite difficult.
I propose here to write a little review of this issue. To be completed, to be rectified. Don't forget that the best is the easiest way (less compilation, less dependancies, less bad tricks, etc.) and cross-platform (Linux/MacOSX/Win).
*** DYNAMIC PATCHING TESTS ***
All my tests and comments here (patchs, screenshots) : http://abel.jerome.free.fr/newatlantis/AudioDynamicPatching.tar.gz
1 - PURE DATA
First, considering audio in Pd, we can read "do not use dynamic patching" !! http://puredata.info/docs/tutorials/TipsAndTricks#how-to-avoid-audio-drop-ou...
It's not very encouraging. So what ? Which tool use then ?
A comparison of audio tools : http://en.wikipedia.org/wiki/Comparison_of_audio_synthesis_environments
2 - SUPERCOLLIDER
Supercollider seems to work well with dynamic audio connections. We can read "Adding an Effect Dynamically" and so on. http://danielnouri.org/docs/SuperColliderHelp/Tutorials/Tutorial.html
"It is an efficient and expressive dynamic programming language" http://en.wikipedia.org/wiki/SuperCollider
So, how interface it with a pd patch ? I know that it's ok with OSC messages, but could we imagine, Supercollider as a the connection manager and Pd as the sounds loader ? An audio communication between Supecollider and Pd.
3 - PYTHON
Some projects use Python to make dynamic patching. I don't know if those projects are really working with full functionnalities like a complete audio path system. I think the most advanced is Purity but may be not enough, see the roadmap. Any feedbacks in use ?
Purity is a Python library for Pure Data dynamic patching. http://wiki.dataflow.ws/Purity
Pyata - a Library that allows you to use Pure Data inside Python svn checkout http://pyata.googlecode.com/svn/trunk/ pyata-read-only
Automata-topd is a small collection of Python classes to communicate with Pure Data sending FUDI messages by socket. https://github.com/automata/topd
PuréeData is a browser-based PureData interface for a remote, central server that allows live, collaborative patching for anyone, anywhere. https://github.com/virgildisgr4ce/PureeData
4 - PURE DATA - LIBPD
Let's come back with Pd. We know that Pd was used in a game Spore : http://lists.puredata.info/pipermail/pd-list/2007-11/056212.html
It could be a solution to handle dynamic audio patching. Any feedbacks ?
Libpd turns Pd into an embeddable library, so you can use Pd as a sound engine in mobile phone apps, games, web pages, and art projects http://puredata.info/community/projects/software/libpd/
How to use Pure Data as an API http://jeraman.wordpress.com/2009/03/22/how-to-use-pure-data-as-a-api/
5 - PURE DATA - DYN~
This external allows the dynamic creation and deletion, connection and disconnection of standard Pd objects and abstractions. But : dyn~ is bound to the PD version it is compiled for. http://puredata.info/Members/thomas/dynext
I success compile it. It seems a good system. If we compile a binary for 3 or more plateforms, will it work just with the binaries ? We must see advantages with my system (pd-messages + index
- abstractions)
http://abel.jerome.free.fr/newatlantis/AudioDynamicPatching/images/dyn-audio...
6 - PURE DATA - IEMGUTS
We know reflection in Pd with iemguts. I'm not comfortable with it. Any feedbacks about the issue ? https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk/externals/iem/... http://lac.linuxaudio.org/2009/cdm/Saturday/18_Zmoelnig/zmoelnig_pdreflectio...
7 - PURE DATA - PD MESSAGES
A review with pd internal messsages. http://puredata.info/Members/eni/techniques
In Pd : /usr/lib/pd-extended/doc/Pure Data/manuals/pd-msg
Basic tests : http://abel.jerome.free.fr/newatlantis/AudioDynamicPatching/images/dyn-audio...
8 - PURE DATA - MATRIX~
'iemmatrix' provides a suite of matrix processing and linear algebra functionality. http://puredata.info/community/projects/software/iemmatrix
The problem here, the numbers of rows and columns are fixed.
9 - PURE DATA - COORDS / WIRELESS
System with receive~/throw~ and catch~/send~ (many-to-many connections) : http://abel.jerome.free.fr/newatlantis/AudioDynamicPatching/images/dyn-audio... http://abel.jerome.free.fr/newatlantis/AudioDynamicPatching/images/dyn-audio...
Do you think receive~/send~ could be use in a dynamic audio patching ? Is there a problem with buffer or something like that ? Any feedbacks with a lot of connections ?
10 - PURE DATA - CREATE AUDIO ABSTRACTIONS
There is a problem when I create an audio abstraction. The sound of the abstraction is not working while other previous audio objects are working. We have to send a mouseup and cut message to simulate mouse activity ! http://abel.jerome.free.fr/newatlantis/AudioDynamicPatching/images/dyn-audio...
*** OTHER RESOURCES ***
DYNAMIC PATCHING
http://jeraman.wordpress.com/tag/dynamic-patching/
PURE DATA MAILING LIST
[PD] dynamically settable many-to-many cordless audio routing http://www.mail-archive.com/pd-list@iem.at/msg29163.html
[PD] About dynamic patches http://lists.puredata.info/pipermail/pd-list/2002-05/006646.html
[PD] [PD-announce] many - a library for managing many instances http://lists.puredata.info/pipermail/pd-list/2010-11/084446.html http://puredata.info/community/projects/software/many
[PD] About dynamic patches http://lists.puredata.info/pipermail/pd-list/2002-05/006658.html
[PD] Automated object/message/etc creation http://lists.puredata.info/pipermail/pd-list/2005-11/032911.html
DYN~
http://konkanok.com/2010/12/dyn-object-for-pure-data/
DYN~ - INSTALLATION
--- flext ---
- Download flext, see readme.txt, see build.txt
- bash build.sh pd gcc
- edit buildsys/config-lnx-pd-gcc.txt :
# where is the PD source package? PDPATH=/usr/lib/pd-extended/ ... # where should the external be installed? INSTPATH=/usr/lib/pd-extended/extra
- bash build.sh pd gcc
- sudo bash build.sh pd gcc install
--- dyn ---
- cd ./dyn/
- bash ../flext/build.sh pd gcc
- bash ../flext/build.sh pd gcc install
- bash ../flext/build.sh pd gcc clean
LIBPD
How-to: Hacking RjDj with PD http://blog.makezine.com/archive/2008/11/howto-hacking-rjdj-with-p.html?CMP=...
IEMGUTS
https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk/externals/iem/...
- install NightlyBuild pd-extended :
http://autobuild.puredata.info/auto-build/ 2) create a directory iem_guts : mkdir iem_guts 3) take iem_guts sources : svn co https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk/externals/iem/... ./iem_guts 4) move into sources directory cd iem_guts/src 5) compile iem_guts : make l_i386 6) add library into ~.pdsettings
NSOUND
http://nsound.sourceforge.net/
-- Jérôme Abel http://abel.jerome.free.fr
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list