Coder Social home page Coder Social logo

pd-pmpd's Introduction

PMPD Physical Modelling for Pure Data

pmpd is a collection of objects for Pd (Pure Data), enabling real-time simulations of physical phenomena. These objects facilitate the creation of dynamic natural systems such as bouncing balls, string oscillations, Brownian motion, chaos theory models, fluid dynamics, sand simulations, gravitational interactions and more. Additionally, pmpd allows displacements of physical entities, thus offering a completely dynamic approach of Pd computing.

Utilizing pmpd, users can model physical dynamics without the necessity of knowing the comprehensive equation of motions. Simulations require only an understanding of the movement's causality and the structure involved. pmpd supplies the foundational objects needed for such simulations and their combination allows the creation of a vast variety of dynamic systems.

These object are designed to be used within Pd, a real-time graphical programming environment dedicated to audio signal processing. Pd facilitates the creation of objects, making it particularly suitable for physical modeling. The GEM library focuses on image processing and is employed in pmpd examples for visualizing the behavior of physical models. Simulations can be conducted in 1d, 2d or 3d, depending on the objects utilized:

  • mass, link and interactor objects are crafted to function cohesively
  • pmpd, pmpd2d and pmpd3d are designed to run simulations as singular entities
  • pmpd~, pmpd2d~ and pmpd3d~ are intended for audio synthesis applications

Cyrille Henry 2003-2024

Build instructions

To build, you need cmake and a compiler toolchain. Run the following commands in the repo folder:

cmake -S . -B build 
cmake --build build
cmake --build build --target install

You'll find the pmpd package folder under build/package/pmpd.

pd-pmpd's People

Contributors

avilleret avatar ben-wes avatar ch-nry avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

ben-wes umlaeute

pd-pmpd's Issues

add version to package

we can generate a txt file with the current version and/or we can display it in pd console on first object laod

typos

current correct
stoping stopping
reconized recognized

e.g.

--- pd-pmpd.orig/pmpd2d_test.c
+++ pd-pmpd/pmpd2d_test.c
@@ -249,7 +249,7 @@
             }
 			else
 			{
-				pd_error(x, "Option \"%s\" not reconized, stoping test",atom_getsymbolarg(j,argc,argv)->s_name);
+				pd_error(x, "Option \"%s\" not recognized, stopping test",atom_getsymbolarg(j,argc,argv)->s_name);
 				return(-1);
 			}
 		}
@@ -397,7 +397,7 @@
             }
 			else
 			{
-				pd_error(x,"Option \"%s\" not reconized, stoping test",atom_getsymbolarg(j,argc,argv)->s_name);
+				pd_error(x,"Option \"%s\" not recognized, stopping test",atom_getsymbolarg(j,argc,argv)->s_name);
 				return(-1);
 			}
 		}
--- pd-pmpd.orig/pmpd3d_test.c
+++ pd-pmpd/pmpd3d_test.c
@@ -280,7 +280,7 @@
 			}
 			else
 			{
-				pd_error(x,"Option \"%s\" not reconized, stoping test",atom_getsymbolarg(j,argc,argv)->s_name);
+				pd_error(x,"Option \"%s\" not recognized, stopping test",atom_getsymbolarg(j,argc,argv)->s_name);
 				return(-1);
 			}
 		}
@@ -443,7 +443,7 @@
 			}
 			else
 			{
-				pd_error(x,"Option \"%s\" not reconized, stoping test",atom_getsymbolarg(j,argc,argv)->s_name);
+				pd_error(x,"Option \"%s\" not recognized, stopping test",atom_getsymbolarg(j,argc,argv)->s_name);
 				return(-1);
 			}
 		}
--- pd-pmpd.orig/pmpd_test.c
+++ pd-pmpd/pmpd_test.c
@@ -202,7 +202,7 @@
 			}
 			else
 			{
-				pd_error(x,"Option \"%s\" not reconized, stoping test",atom_getsymbolarg(j,argc,argv)->s_name);
+				pd_error(x,"Option \"%s\" not recognized, stopping test",atom_getsymbolarg(j,argc,argv)->s_name);
 				return(-1);
 			}
 		}
@@ -309,7 +309,7 @@
 			}
 			else
 			{
-				pd_error(x,"Option \"%s\" not reconized, stoping test",atom_getsymbolarg(j,argc,argv)->s_name);
+				pd_error(x,"Option \"%s\" not recognized, stopping test",atom_getsymbolarg(j,argc,argv)->s_name);
 				return(-1);
 			}
 		}

or simply:

sed -e 's|reconized|recognized|' -e 's|stoping|stopping|g' -i *.c

source code for examples/*.html

the file examples/00_pm_pmpd_and_expressive_mvt_synthesis.html is obviously generated.

could you also provide the source code that enables us to re-generate that file?

or maybe just clarify (here) how you did create the html-file.
e.g. manual/*.odt is the source code (the file you modify), which you export as manual/*.pdf with LibreOffice's built-in PDF exporter; then you run pdf2htmlEX on that PDF to generate the HTML.

i just want to make sure i understand the process.

the architecture specifier for `aarch64` should be `arm64`

There is

pd-pmpd/CMakeLists.txt

Lines 35 to 36 in aa22fa4

elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES ".*aarch64.*")
set(arch "aarch64")

however, aarch64 is just another name for the arm64 architecture, and Pd will indeed use arm64 as the file-name extension (cf https://github.com/pure-data/pure-data/blob/88a4ff1df5613f83be6232695d80e02a343bbd57/src/s_inter.c#L1143-L1144).

so the proper stanza would be:

 elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES ".*aarch64.*") 
   set(arch "arm64") 

it seems like i overlooked this in my last round of fixes.

LICENSE.txt vs LICENSE boilerplate

just a minor issue, but:

the boilerplate in the .c files declares that pmpd is GPL-v3+, e.g.

pd-pmpd/iAmbient2D.c

Lines 4 to 7 in ff21afe

// pmpd software is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

however, the LICENSE.txt file only covers the GPL-2:

pd-pmpd/LICENSE.txt

Lines 1 to 2 in ff21afe

GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

this basically puts the .c-files under the GPL-3+, and the rest of the code (Pd-patches,...) under the GPL-v2.

while not a problem per se, i think it would be good to use a consistent license (and if this is not intended, ship the full text of each (used) license)

sign windows binaries

as of today, loading a package built on the CI triggers security scan on Windows which is annoying
there should be some way to sign the binaries to avoid that

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.