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/pathfinding.png
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-outs 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-paths-dyn~.png 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/iemguts/ http://lac.linuxaudio.org/2009/cdm/Saturday/18_Zmoelnig/zmoelnig_pdreflection.pdf 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-paths-pd-msg.png 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-paths-system-3D-like-1.png http://abel.jerome.free.fr/newatlantis/AudioDynamicPatching/images/dyn-audio-paths-system-3D-like-2.png 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-paths-abstraction-problem-2.png *********************** *** 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=OTC-0D6B48984890 IEMGUTS ------- https://pure-data.svn.sourceforge.net/svnroot/pure-data/trunk/externals/iem/iemguts/ 1) 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/iemguts/ ./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