A Java based modular audio dsp prototyping application that allows wiring of audio components together.
The application supports the idea of "racks" and "sub racks" allowing the creation of re-usable components using composition.
Currently a small number of semi-usable components exist, whilst a number of other audio components are in progress.
Playing a soundfile Analysing the spectrum of a signal
Currently development is done using Eclipse and JDK 1.8 on a Linux machine with Jack 2.
Building from source is most easily accomplished using Gradle, but still needs some things installed:
- Appropriate development tools like a compile and linker
- Development headers for JNI, libsndfile and libmpg123
- pkgconfig on your path along with an appropriate PKG_CONFIG_PATH variable to pick up libsndfile + libmpg123
- Swig
- /bin/sh
-
Clone using git. If you're feeling adventurous use HEAD, otherwise I'd recommend using the latest tagged version (should be 0.0.3 as of writing this).
-
Verify your path includes access to swig and pkgconfig (try running them to be sure)
-
Make sure that the 1.8 JDK you're using has JAVA_HOME set to the right place
-
Change to the root directory you checked out (mad-java)
-
Run the build with: ./gradlew appRelease (You can use ./gradle appRelease if you've got gradle already installed - I use 2.5)
-
This will create mad-pp-$VERSION.tar.gz which you can safely extract where you would like it to live.
-
After extracting the archive somewhere, you can launch the application with: ./launchcd.sh
-
If you want to play some soundfiles, open the preferences and change the "Music" directory to where your music lives.
-
Open one of the example racks - iSoundfilePlayerWithBassBoost.xml for example.
-
All of the non-release components (what you see when you add --alpha on the command line) have sizing issues - I modified the rack spacing and haven't yet had the time to update the layouts and component sizes.
-
A lof of the components don't currently do extensive checking. By playing around with some of the sliders and/or input values you can get them to spit out NaNs that will cause the whole signal chain to choke.
-
Performance - Java makes it rather tricky to get consistently reliable low latency audio in the same process as something using Swing. At some point I'll have to look into separating the front and back ends and leaving the DSP processing in a VM where there are minimal allocations at run time.
-
Multi-core doesn't currently work well. I'm not sure I'll go any further with this as (3) needs to be solved first before looking into multi-core. The issue is that any additional rendering threads need to be created via jack so they have the appropriate priority.