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
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
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.
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
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/
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...
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...
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...
'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.
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 ?
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 ***
http://jeraman.wordpress.com/tag/dynamic-patching/
[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
http://konkanok.com/2010/12/dyn-object-for-pure-data/
--- flext ---
# where is the PD source package? PDPATH=/usr/lib/pd-extended/ ... # where should the external be installed? INSTPATH=/usr/lib/pd-extended/extra
--- dyn ---
How-to: Hacking RjDj with PD http://blog.makezine.com/archive/2008/11/howto-hacking-rjdj-with-p.html?CMP=...
https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk/externals/iem/...
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
http://nsound.sourceforge.net/