Grant Muller

RWMidi, GMS, and GOL Sequencer: Adventures in Social Coding

Many moons ago, I created a little tool called the GOL Sequencer Bank. You can read more about it here, and here. In order to create the tool, I used RWMidi, a Java/Processing library created by Manuel Odendahl of Ruin&Wesen. While creating the sequencer bank, I discovered that the RWMidi library had no support for MIDI Sync messages, preventing me from syncing the sequencer with a master, like Ableton Live. This simply would not do.

In the past, I would have looked for another library, but given that I had the source readily available, and had already written a ton of code interfacing to RWMidi, I decided it would be a better use of my time to modify the RWMidi library to support sync messages. You can read more about that here. The changes were minimal, and I learned a lot in the process about MIDI, Java, and the art of modifying open source.

Not too long after that word got out that I had made this change to the RWMidi library, and I started getting one-off requests to send my modified library to folks for their own use. For instance, John Keston over at AudioCookbook built his GMS synth using my modified library.

A short time after that, Mr. Keston approached me with what I thought at the time was a strange requirement: modify the library to support greater than 24PPQ for recognizing 64th and 128th note resolutions. In plain English, John wanted the GMS to support 64 and 128 notes using plain-jane MIDI clock. I thought it couldn’t be done, but loved the challenge, and modified the RWMidi library accordingly. It was a doozy.

These modifications to the RWMidi library have only been available as a custom change to the GMS and the GOL Sequencer Bank, but now, through the power of GitHub and social coding, I can make these changes available to anyone who wants them. I have forked the RWMidi library on Github, incorporated the changes there, and issued a pull request to Manuel to include them in the main source.

You can check out the source here.

I have also built a jar file and included it as a download on GitHub. You can get it here.

Having finally discovered the beauty of social coding, I plan on eventually uploading the source of both the HarmonicTable and the GOL Seqeuencer. I’ve had requests in the past to make changes to the synth that I just don’t have time for, this way people in the know can simply fork the source, make their own changes, and ask me to pull them into the main body of work.

As more and more regular Janes and Joes become savvy programmers (i.e. our children), I expect we’ll see the power of social coding change the way we think about how software is made in general…

STFUnity, GOLSequencer, and a Month of Home Repair

Well, it’s been a while so a big rambling update is probably in order here:

First, the wife and I made the decision to go ahead with a kitchen remodel we’ve been planning for several years this last month (May). I know the last time I posted was March, but April was busy for other reasons. Other than a little wall arranging, we did the entire thing ourselves from demolition to crown molding. That’s a post in and of itself, maybe sometime at the end of the month.

Second, I took a new position within my company as a Software Manager. If you’re familiar with Agile Scrum methodology, I’m basically a ScrumMaster for 4+ teams. If I were to visit a seer today my fortune would be “I see a shortage of time in your future”.

Third, I started re-reading Godel, Escher, Bach sometime in April with the intent of understanding more than 50% of it. I get a little bit more out of it every time I read it, but the more I understand the more I question it. Another post.

Fourth, and most interesting for those who actually come here, I got a chance to wrap up several STFUnity tracks. Here’s a bit of detail on the ones that are ready for press:

Apothecurious

This track is massive. Huge. As with every STFUnity song, the collaboration effort is an experiment in and of itself. On this one I played the part of outro writer, as most of the track was completed by Bill and Jason over at their studio, with a solo tracked by Eric Fontaine on the Saxophone. I was chartered to piece together an outro to the song based on the elements within the song. I wanted to make sure that my effort wasn’t a simple copy/paste/rearrange, as this would be entirely too obvious. So, I employed the GOLSequencer in another creative way.

First, I made 15 or 16 tracks to house the song elements I wanted to play with for the outro. Creative restraint is something I like to play with, so I made a rule for myself that no outside tracks or instruments could be used to make sound, only the existing recorded material. I made a rough arrangement of tracks, selected some effects to timestretch, bit reduce, saturate, and otherwise mangle the audio into an unrecognizable fury. Then, in order to destroy any sense of predictability, I mapped the GOLSequencer’s note on events via MIDI to the “Speaker On” automation control in Ableton Live. I recorded one pass of automation, then I mapped the note on events to various effect controls, recording another lane of automation to randomize the effect on/off states, hard/soft knee compression ratios, etc. The result can be heard in the outro of Apothecurious here. You should listen to the whole song though, it’s rad as hell.

Th’mipwians

Notably Th’mipwians is a lost book of the bible, missing because the person responsible forgot to write it. It’s also a STFUnity song. Written in a single session by Jason and Bill, I added the sound design and ambiance that I’m known for on this project. Introducing a new creative restraint: only use ambience/texture that I’ve previously used in other STFUnity tracks. I did less to modify the noise and texture other than repitching it to fit the time signature of the song. The goal here was to unify the song with the rest of the STFUnity material in a cohesive way, rather than the total sonic destruction on the outro to Apothecurious. Check out Th’mipwians over here.

Coming Up

We’ve got a few more tracks to wrap up for STFUnity, and then some work to get the release format put together. What, you didn’t hear? STFUnity is a video game, the tracks we’re writing are for the different levels in the game. More on that later.

After wrapping up this STFUnity stuff I’ll be releasing a short piece called BFault and Loose Canons, which is several experiments in canon structure and fugues, and an excuse to write a few simple pieces of music inspired by Godel, Escher, Bach. I’m also collaborating with John Keston over at AudioCookbook.org on a project for mobile devices, look for that in upcoming posts as well.

Updates and articles will be monthly at best right now while I catch up with my real life.

Harmonic Table 0.5: Midi Input & Lit Keys

While I thought the GOL Sequencer Bank would get the bulk of my attention this Winter, it turns out I’m getting far more requests to update to the Harmonic Table controller. Among them were Midi Input capabilities, buttons lighting up, and some bug fixes here and there. All that completed, I give you Harmonic Table 0.5. Here is the breakdown:

Midi Input – This feature allows you to accept midi note on and off events and display them as key presses on the main screen. I see this as a learning tool that allows a user to easily see the relationships between notes. Note: At this time it is difficult to keep up with a rapid number of midi input messages. If you’re using this as a learning tool, it is recommended that you reduce the tempo of your sequencer so you can see these relationships without missing any notes.

Midi Thru – This is just another aspect of midi input. When this is turned on any messages appearing on the midi input will be mirrored to the midi output you have selected

You can download it here: HarmonicTable 0.5

Lighting up buttons and accepting midi input introduced a few performance related bugs, but nothing that should keep anyone from using the tool. I’ll have this cleaned up in a future release.

The main target in the next release is touch screen support. I’m getting a lot of great info offline from a few people who are interested in testing this for me, so look for that very soon.

STFUnity: GOL Sequencer Bank, Sound Design, and New Music

I’ve undertaken a new musical collaboration with a very eclectic (and eccentric) group of guys called STFUnity. The project for me started when Bill mentioned putting together a completely virtual collaboration between he, Jason Blain, and myself. The idea was that rather than the traditional setting of getting a couple musicians in a room, rehearsing some material, then playing it live, we’d instead pass around a bunch of tracks and see where each member took the material. I’d never worked in this format before, and it seemed like fun so I jumped on it.

There are no set roles in the group, with any member contributing any element to the song. Still, I feel that my capacity in the collaboration falls in the realm of sound design; I usually contribute textures and atmosphere, with the occasional laying down a percussion track or some programming. The exception being Cottonhammer, which I want to point out specifically

Cottonhammer  is special to me as its the first official outing with my homegrown tool, the GOL Sequencer Bank. I struggled to find ways to incorporate it into my existing tracks. Its too non-deterministic on its own, and the unpredictability of it does not lend itself to a song that has an existing structure (at least not in my travels). So, I changed how I used the tool and stopped trying to place too much direct control over it. Cottonhammer is the GOL Sequencer Bank working autonomously with myself playing live drums simultaneously. Cottonhammer is an attempt to interact musically with a machine.

I arranged four of the six sequencers to play a different range of notes; I didn’t want too many tracks overlapping in frequency range. The other two sequencers I outputted to some very glitchy clicks and pops to keep from having too many melodic instruments fighting for space. I find the output rather soothing despite the complete lack of control and the machine gun percussion.

    So far, there are four tracks completed with several more still in the works. I’ll post updates as the project continues, listen and let me know what you think.

HarmonicTable 0.3

Bit slow these days with work and other stuff to get around to some of the changes I’m been meaning to make to these projects, but here is a quick 0.3 stab. I had more changes planned for this release, along with some stuff for playing back patterns and keyboard playback support, but for now I only had time to make a few changes:

  • Chord Mode – Chord mode allows the user to hold down a key on the keyboard and play a chord when a note is clicked. The chord map is on the release page.
  • Chord Lock – By default when playing a chord by pressing a key, the chord only sounds while the key is held down. In chord lock mode you need only press the key of the chord you want to play, and any note you click after that will play that chord
  • Various Performance Fixes – Nothing special here, moved some stuff around and improved map loops to speed the whole thing up a bit

That should cover it, you can download it here.

Java MidiReference 1.0

Several months ago I started working on a series of classes to make my life easier when programming for music. I’d started several projects and realized that trying to refer back and forth between MIDI Numbers and Notation by hand was tedious, so I created a library of functions to do it all for me.

I finally got around to formalizing this into one library, and released it here. I’ve put this into action already with the Game Of Life Sequencer Bank and HarmonicTable projects, and its really made it easy to pull scales, chords, drum maps, you name it quickly from a preset library

If this kind of thing is useful for anyone other than me, feel free to use it

Game of Life Sequencer Bank Demo

Some time ago, Wesen of Ruin&Wesen created a screencast of a sequencer based on the game of life concept. I followed the screencast, and thought there was a lot you could do with something like this. I thought of several features, making it a step sequencer, a drum sequencer, perhaps enabling multiple scales. I had some free time (we took a vacation), so I worked on it on the plane and early in the morning while my wife slept in, and came up with the Game of Life Sequencer Bank, a bank of 6 GOL sequencers each capable of individual operation and synced via MIDI. The application uses a modified RWMidi library (to handle sync events) and controlP5. Here is a video that demonstrates it:


Game of Life Sequencer Bank: Demo from Grant Muller on Vimeo.

Here is an audio example:

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

<

p>I’ll spend a few days working out any last kinks and putting together something like documentation, and set it free so to speak. For this project I will likely NOT release the source code just yet, mostly because it needs to be cleaned up (I’d be embarrassed).

Processing HarmonicTable 02

Mac users pointed out some problems with 01, so I fixed the following:

  • When dragging notes, the note would only sound once until the mouse was released.
  • The software would not start up automatically on many Macs unless the java version was set to 6
  • Unreported: Notes would only sustain as long as the mouse button was held. May be seen as a feature, see below for fix.

I fixed the dragging problem, and recompiled the software in Java 5 so that it will work in either 5 or 6, so Mac users should be able to start up without issue. I added a Release Notes toggle button on the setup screen, so you can sustain notes after the mouse is released. If you want notes to sustain only as long as the mouse is held, you can turn this Release Notes on.

harmonictable011

There are two tabs at the top, one for the main table screen, and one for setup. The basic setup options at this time are midi ports, starting note values, and a toggle for releasing notes.

This was built using the Processing libraries, along with the ControlP5 library and Ruin & Wesen’s rwmidi library for midi functionality.

This is an executable jar, meaning if you have java installed on your machine (version 5 or above), you should be able to double-click it and you’re off and running. I have only tested this on Windows and Linux, some testing has been completed in Mac, but more needs to be done, so any Mac users out there send me your feedback.

Harmonic Table 02

If you have any questions or comments, leave them in the section below.

Processing HarmonicTable 01

UPDATE: This is no longer the latest version, I fixed some bugs for Mac users and reposted. To get the latest version click here.

Since I don’t have a touchscreen to test this with, I’m releasing the 01 version with mouse functionality, along with a few GUI functions to change the midi out port and the starting note number. At some point I’ll get a tablet and add the touchscreen functionality, or if someone has a tablet I can pass the source code on and they can test/implement that functionality.

harmonictable011

There are two tabs at the top, one for the main table screen, and one for setup. The basic setup options at this time are midi ports and starting note values.

This was built using the Processing libraries, along with the ControlP5 library and Ruin & Wesen’s rwmidi library for midi functionality.

This is an executable jar, meaning if you have java installed on your machine (version 6), you should be able to double-click it and you’re off and running. I have only tested this on Windows and Linux, so if there are any Mac users out there, please let me know if there are any problems.

Download HarmonicTable 01

If you have any questions or comments, leave them in the section below.