Sound Byte: Loop Chopper

This Sound Byte gives you sliders to control the parameters of a GranulateSteady UGen, which allows you chop up a sound as it plays. I’ve created a loop from the song Again and Again by The Bird and The Bee, which will hopefully get annoying enough that you’ll want to chop it into indiscernibility. The buttons along the side let you set the range of the sliders from quite small, to a full second.

Minim in the Wild.

From the pingbacks, a post about 3D Soundclash:

In February 2010, the Red Bull Music Academy prompted Warp Records and Ninja Tune for a Soundclash on a 3D sound system, staged in the Loading Bay of the Royal Albert Hall. FIELD developed a generative real-time application especially for this event, which motion designers Quayola and Thomas Traum used to design and perform soundreactive visuals for the sets of Plaid, Clark, Mira Calix and many more.

Further down in the article it mentions that the application was built with Processing and uses Minim for the “sound interaction”.

Sound Bytes: Oscil as a looping sampler

Eventually, we plan to add a UGen to Minim that will allow you to control the generating speed of any other UGen, but that got me thinking about how you might do something similar with existing components. So, I struck upon the idea of using an Oscil as a looping sampler by using an audio file as the Waveform and setting the frequency of the Oscil to be very low. The fun thing about this is that if you set the Oscil to a negative frequency, the sound will play in reverse. Additionally, I thought it’d be fun to be able to automate the changing of the frequency by having an LFO control the frequency of each Oscil (left and right channels of the original audio file). So here’s a sketch that lets you play with this setup:

Screenshot of the sample_oscil sketch.

Sound Byte: Mass-Spring-Damper System

I’m picking my way through Real Sound Synthesis for Interactive Applications by Perry R. Cook (one of the authors of the STK) and decided to start making small apps to demonstrate the different kinds of synthesis he covers in the book. This first one let’s you set the variables of a mass-spring-damper system and then trigger it, which is exactly the same as setting the coefficients of a two-pole IIR filter and sending an impulse into it (as it turns out). Check it:

Sceenshot of the mass-spring-damper applet.

Minim 2.1.0 BETA

I am happy to announce the arrival of Minim 2.1.0 BETA.

This is a beta build of the next release, which contains the new UGen framework developed by myself and Anderson Mills through his project at Numediart. There are still a few loose ends to clean up, primarily documentation related, but we expect to have everything wrapped by the end of June. Until then, feel free to give this build a whirl and see how you like the new real-time synthesis capabilities made possible by the UGen framework.

At this time, all of the documentation is in the form of Javadocs, which are included with the download. I hope that you find the docs for the UGen framework clear enough to get started. If not, there are also quite a few new examples included in the download that demonstrate how to use many of the UGens and how to programmatically sequence sound.

To install this release, you will simply unzip the archive into a folder named libraries in your sketch folder. This folder may already exist if you’ve installed other libraries not included with the Processing download; create the folder if it doesn’t exist. By installing this release in your sketchbook’s libraries folder, you will make Processing use this release instead of the release included with Processing. All of your existing sketches should still work. If you find one that doesn’t, please create an Issue on Github.

Have fun!

Minim Beta Build and Other News

Things have been quiet around here, but hands have not been idle.

Anderson Mills has been hard at work on features for the next release of Minim. His project at Numediart to build a Unit Generator framework for Minim has made fantastic progress. On Tuesday, we plan to merge these changes back into the main Minim repository and release a Beta build. As usual, documenting is the hardest part of the job and we wanted to give people the chance to work with the new music programming features while we chew through that.

Meanwhile, I’ve created an app for the iPhone with Heather Kelley and Amanda Williams that is currently part of an art show in Hong Kong called Technosexual Bodies. The app is called Body Heat and I will be posting more news about that soon, I hope.

Finally, as hinted at in my previous post, I started work on a C++ port of Minim. It’s only in the beginning stages and it’s only functional enough to be useful for the iPhone app, but you are welcome to have a look at the repository. I’m making no promises about when the port will be finished, only saying that it will be finished at some point. If you’d like contribute to the port, make a fork at Github and have at it!

Building Minim with Git and Eclipse.

Minim on Github

The project with Numediart has gotten off to a great start. I’m excited about the additional music programming capabilities that will result from that work. However, the beginning of the project has already brought a much needed improvement to Minim: a better way for people to contribute to the project. I’ve been developing Minim pretty much solo and working in an undisclosed Subversion repository. My intent had been to eventually make that repository publicly known, but I had not figured out a good way to review changes that people might make before committing them. Github was suggested to me as a good site for managing this sort of thing and we decided to try the process out by using Github for the Numediart project. My initial experience with it has been fantastic, so I plan to keep Minim there. Visit the project page to see what it’s all about:

http://github.com/ddf/Minim

If you would like to contribute to the development of Minim, all you need to do is create a Github account and click the Fork button on the Minim project page. This will create a branch of the project that you can push to. When you’ve fixed a bug that’s been bothering you, or create a new feature that you think is worthy of being included, you simply send me a pull request and I will be able to review your patch and accept it or not. Totally sweet, I say.

Building Minim

I develop Minim in Eclipse, so the repository is structured such that you can clone it into your Eclipse workspace and then import it as an already existing project. Here are the instructions for acquiring and building Minim, if you fork the project, you’d follow these same instructions but use the “Your Clone URL” from the fork you create. Keep in mind that Eclipse doesn’t support two projects with the same name in the same workspace.

What you will need:

  1. Eclipse
  2. Git

What you will do:

  1. From your workspace directory, clone the github Minim repo. On the command line that’d be this command:

    git clone git://github.com/ddf/Minim.git

    This should create a local git repo in a directory named Minim.
  2. Then go into Eclipse, right click in the Package Explorer and choose “Import…”
  3. Under “General” choose “Existing Projects into Workspace”
  4. Click “Next”
  5. With “Select Root Directory” selected, choose “Browse…” and browse to the the directory that git just created.
  6. Click “Finish”. You should now have a browsable and buildable project named “Minim” in your package explorer.
  7. Create the folder libraries/minim/library inside of you sketchbook folder.
  8. Export the packages ddf.minim, ddf.minim.analysis, ddf.minim.effects, and ddf.minim.signals, as a single jar file named minim.jar into the folder you just created.
  9. Export the package ddf.minim.javasound as a jar file named jsminim.jar to the same folder.
  10. Export the package ddf.minim.spi as a jar file named minim-spi.jar to the same folder.
  11. Copy all of the jar files in the lib directory of the project, except for core.jar, into the same directory you exported the first three jars into.
  12. Run Processing and sketches that use Minim will use the build you just made, instead of the build that Processing comes with.

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.