Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ ZenGarden (ZG) is a runtime for the [Pure Data](http://puredata.info/) (Pd) audi

The library is written in C++ and exposes a pure C interface described exclusively in [ZenGarden.h](https://github.com/mhroth/ZenGarden/blob/master/src/ZenGarden.h). Many audio objects are accelerated with vector operations on ARM (NEON) and x86 (SSE) platforms, and works especially well on Apple platforms (both OS X and iOS). ZenGarden allows externals to be built, also ones that override default object functionality. A language wrapper exists for [Java](https://github.com/mhroth/ZenGarden/blob/master/src/me/rjdj/zengarden/ZGContext.java).

ZenGarden is licensed under the [LGPL](http://www.gnu.org/licenses/lgpl.html). Among other things, this means that if you are going to use the libary in a public application you must:
ZenGarden is licensed under the [LGPL](http://www.gnu.org/licenses/lgpl.html). Among other things, this means that if you are going to use the library in a public application you must:

+ Indicate that you are using the ZenGarden library.
+ If you extend the library (not including externals), you must make that code public.
+ You may use this library for any application, including commerical ones.
+ You may use this library for any application, including commercial ones.

## Communication

Expand Down Expand Up @@ -50,7 +50,7 @@ How to Get Started
Running the Tests
-----------------

ZenGarden includes many tests meant to estabilsh the correct operation of the system. The test may be run by compiling the library via the included `make` file in the /src directory, and then running the `runme-test.sh` script from the base directory.
ZenGarden includes many tests meant to estabilsh the correct operation of the system. The test may be run by compiling the library via the included `make` file in the `/src` directory, and then running the `runme-test.sh` script from the base directory.

API Usage
===========
Expand Down Expand Up @@ -400,4 +400,4 @@ Many people have asked me why the ZenGarden library came into existance, and why

I spend a lot of time working with the Pd audio engine at [RjDj](http://rjdj.me) and I have rarely seen such an antiquated, obfuscated, unmaintainable, and undocumented mess as Pd (the other example that I can think of is [Vorbis](http://www.vorbis.com/setup/), but that's another story). If a student or employee of mine ever wrote such code, I would fire them immediately. I have been working with Pd (the engine, not the language) for some years and I know it quite well by now. I have the highest respect for Miller that Pd works as well as it does; it is truly a technical tour-de-force. There are plenty of clever tricks and architectural innovations to learn from. But I found it incredibly difficult to find and modify functional parts of the program, for instance if you don't know where to look finding the code for something as simple as `[*~]` is not obvious, let alone anything more complex such as Pd's audio object ordering algorithm. The reason that libpd (i.e., Pd in the form of a traditional signal processing library) only appeared in 2010 is because everyone else who had tried before (at least since 2008), even people otherwise intimately familiar with the project, had failed (including myself). I am aware of at least two previous libpd-style implementations used in Spore (EAPd [[1](http://www.adigitaldreamer.com/game-development/the-beat-goes-on-dynamic-music-in-spore)] [[2](http://uk.pc.gamespy.com/pc/spore/853810p1.html)]) and early RjDj, but neither of those were public. The Pd community owes much more than a debt of gratitude to Peter Brinkmann. But ultimately no piece of software should be so difficult to modify or extend.

And so I began to work on ZenGarden. It is intended to be a completely new runtime for the Pure Data audio programming language using modern software languages and design principles. It is written in object-oriented C++, uses the C++ STL, has plenty of comments, takes direct advantage of modern processors via vector operations, and also unit tests. It should also be easy to compile and run on all major operating systems and hardware architectures. Furthermore it is completely independent of any GUI. (Naturally all of these things could be improved, but that's the goal anyway :)
And so I began to work on ZenGarden. It is intended to be a completely new runtime for the Pure Data audio programming language using modern software languages and design principles. It is written in object-oriented C++, uses the C++ STL, has plenty of comments, takes direct advantage of modern processors via vector operations, and also unit tests. It should also be easy to compile and run on all major operating systems and hardware architectures. Furthermore it is completely independent of any GUI. (Naturally all of these things could be improved, but that's the goal anyway :)