Week 6 - Class 1

In this class, we will be using the files found in the 'second' monome patch fixtures, found by clicking on this link.

This week, we will be diving into ways of storing, displaying and accessing monome settings. One of the most important things that we have to do is to be able to 'toggle' values. This requires us to store the state of the monome in our patch so that we can access it. One way is to store and retrieve data from a jit.matrix (this is the method preferred by some of the Cycling '74 people):

Note how this method uses the 'name' of a matrix to share the data from different locations in a patch.

Another way to do store and access monome data, preferred by many of the people at monome, is to use a matrixctrl object, which presents a user interface for a grid-like surface. This is the approach I tend to use as well. Here's an example of that:

If we want to work with multiple LED levels, we can change the matrixctrl to use multiple internal values, then increment them as necessary. The third patch shows this in action (you'll have to check in the inspector to see where the internal settings have been changed:

Finally, we will want to learn to combine the storage and display capabilities of the monome with a 'sequencing' type of application - one where we step through the columns, get the current data, and use it to perform some sort of function. This can get pretty complex, but the result is worth it. The fourth patch is a fully-realized sequencer, with the data available as a list:

So, what do we do with this? You could conceivably use this data to create MIDI notes, change audio volume levels or adjust video color settings. In my case, I used it to drive a simple tuned percussion patch:

The details of everything you need to know (from a specification standpoint) is available here: the monome tech docs

You can also find more details at an upcoming (but revealed to us) link here: the monome max tutorials

In-class Activities:

Please note: Individual project #2 is still due, but not until next Wednesday!

Week 6 - Class 2

This class will be using the files found in the 'third' monome patch fixture set, found by clicking on this link.

While I'm a big fan of visual programming, sometimes it isn't as efficient as using textual programming. Today, we are going to look at using the "js" object - an embedded Javascript implementation - to work with our monome devices.

The js object is created with the name of a Javascript file that will be used for the internal logic of the object. There are a variety of commands specific to how Javascript works within Max; in this case, we are going to look at a simple - and rather pedantic - example found in the fixtures.

At the top of the program are some parts that are used to describe how the object looks to the outside world (Does it automatically update when changed? How many inlets and outlets does it have?). Beyond that, we set up some variables - in this case, a virtualization of a 16x8 monome grid, and a flag telling us whether we are going to toggle values or just display them as-is.

After that, we have Javascript functions that match the names of the messages it is to receive, along with the parameter lists that they will have. For example, in the 'key' object, we state that a column, row and status value will all be received.

In this Javascript example, I've also created a simple function that I use to send out the row, column and value of any cell that is selected. I do this so that, as I expand the programming, I don't have to reiterate this part of the programming. This is typical reuse of function content.

You can find out a lot more about Javascript in Max by looking at that part of the documentation - either in the built-in docs, or using the online documentation.

In-class Activities:

Return to the class index.
Last update: 02/11/2015