Monthly Archives: October 2009

Minim 2.0.2 Released!

I am happy to announce the release of Minim 2.0.2! Download and installation instructions are available on the project page. Here’s what’s fixed and new, which you will also find in the changelog.txt file included with the distribution:

Fixed Bugs:

  • filenames were being parsed incorrectly by createRecorder.
  • fixed audio processing routines for AudioPlayer and AudioSnippet so that they don’t spend cycles doing nothing while not in the “play” state.
  • fixed the zombie thread bug, which kept audio processing Threads from exiting when close() was called.
  • fixed out-of-memory problems that could occur when large files were played. this does come at the cost of slower seek times.
  • fixed the isEnabled(AudioEffect) function, which, uh, wasn’t working.
  • fixed the pan() function, which was returning the BALANCE control.

New Features:

  • added functions to FFT for doing forward transforms with an offset: forward(float[] samples, offset) and forward(AudioBuffer samples, offset)
  • added a freqToIndex(float freq) method to FFT for finding out the index of the spectrum band that contains the passed in frequency.
  • added a stop() method to AudioSample, so that playing samples can be immediately silenced.
  • added setPanNoGlide(float pan) to Controller, which will snap the panning setting of a sound to the provided value.
  • added setInputMixer(Mixer) and setOutputMixer(Mixer), which allow you to specify which Java Mixer object should be used when obtaining inputs (AudioInput) and outputs (AudioOuput, AudioPlayer, AudioSnippet, AudioSample).

Minim Release Imminent

I am close close close to releasing 2.0.2! Today I wrote a couple new examples to demonstrate a couple additional features that have been added and I made sure the javadocs all looked good. Then I got sidetracked by writing a song. Well, so it goes, one doesn’t say no to songwriting when inspiration strikes. So! I plan to do the release tomorrow. As mentioned, there won’t be a whole lot new in this release, but a number of nasty bugs have been fixed. A full run down of what’s been fixed and what’s new will be provided with the release.

Bug Fixing, Build Process.

Among all of the things that I have learned while working as a professional game dev, two very important things are 1) how to document and test bug fixes and 2) the importance of having a sane build process. I didn’t have a terribly good handle on either of these things when I first created Minim and as a result pushing out a release was a very painful process.

Bug Fixing

I’ve not always been good about keeping track of exactly which bugs I’ve fixed in a release, or which new features I’ve added. No longer! The past two days have seen verbose comments in my check-ins, which means I should be able to create a pretty exact changelog for the next release. Here’s my most recent check-in comment, to give you an idea of the kinds of things coming up:

Build Process

Creating and uploading new JAR files is not the hard part of doing a release. No, the hard part is making sure all of my online examples are up-to-date and making sure the Manual reflects any additions or changes to the API. The biggest pain with the examples is that the directory structure that I use on the website does not match the local directory structure, so it’s not just an easy drag-and-drop. I have my examples set up as a subdirectory in my Processing sketch folder, but what actually gets uploaded to the website are the contents of the applet directory that is generated for each sketch when I export it. Man, I would love to know a way to tell Processing to export an applet to a location other than the sketch folder, because then I could export to a directory structure that is the same as what’s on the web.

In any event, that’s a pain, and I need to figure that out, but I also finally got around to creating a subversion repository for all of the example source files. This will at least make it easier for me to tell at a glace which sketches need to have applets re-exported and uploaded. Maybe I can even figure out how to create an automated process for this. But, one thing I had to do before I could commit all of the examples, was delete all of the applet directories. To do that, I googled around and found this totally helpful batch file:

FOR /F "tokens=*" %%G IN ('DIR /B /AD /S *.svn*') DO RMDIR /S /Q %%G

That particular code will delete all subdirectories that match the name “*.svn*” under the directory it is executed in. All I had to do was change the name to match to “applet”. It’s all really clearly explained in this forum post and worked liked a charm.

So, that’s at least one part of my build process that’s been sanitized (by which I mean: made sane)!

A Month of Code.

Welcome to October! I’ve taken this entire month off of work to catch up on several personal projects that have been languishing. Here’s what I hope to accomplish this month:


I haven’t released an update of Minim for an entire year! This is totally unacceptable! I will be spending the next few days fixing as many of the TODOs I’ve got lying around in the code base as I can and putting together a new release. This will be a bug fix release.

Today is the first day of a project initiated by Dr. J. Anderson Mills III, a good friend of mine who is working at Numediart in Mons, Belgium. This project aims to outfit Minim with easy-to-use and easy-to-extend audio generating classes. The current suite of classes in the ddf.minim.signals package will likely be replaced with whatever we come up with. I will be working closely with Anderson on the project, including traveling to Mons in the middle of the month to participate in a kickoff workshop. The project will culminate with a presentation at Numediart and a new release of Minim.


I’ve got several ideas for iPhone apps that I hope to be able to at least start work on this month. I will endeavor to post about progress on those as I make it.

Top Secret Music Game

I’ll be working more on the music game I mentioned several months ago. I don’t know how much I’ll be able to say about this, but hopefully there will be some kind of announcement that can be made in a couple month’s time.