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

Reply via email to