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
- Using the above fixtures as starting points, create some sort of 'sequencing' patch that in some way manipulates media content - MIDI, audio, visuals or OpenGL. Show the work before you leave the class.
This addendum will be using the files found in the 'third' monome patch fixture set, found by clicking on this link.
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.
Week 6 - Class 2
In this class, we will be using the files found in the 'fourth' monome patch fixture set, found by clicking on this link.
One of the things I often talk about when helping people work on their projects is to find 'higher order' ways of influencing a process. For example, rather than turning on a light when you clap your hands, maybe you are looking for the higher pitch of a child's handclap, or a handclap only when another has not been heard in five minutes. Do something that isn't a direct "push a button, get a result" sort of function.
One of the ways you can do this is to have external systems 'inform' your user interface, and you react to changes in that interface. A perfect example is to capture the video stream of a webcam, display it on your monome, then allow the user to select a location on the image to report upon. Here's an example of that:
This system has to do a few things:
- get the video feed from the webcam
- turn the video feed into a single grayscale image, properly rotated
- break apart the video feed into single pixels to be routed to the monome
- figure out the pixel location and set up a monome message for visualization
- store the video frame so that a button will return the video feed pixel value
You can see that the way you would interact with the monome is much different if the user interface represents the constantly changing webcam feed rather than tracking a static user interface. In this case, we get a number that represents the value of a pixel; this could easily be used for audio volume, visual effect or MIDI message output.
NOTE: There is no class on Monday! Projects will be due on Wednesday!
Return to the class index.
Last update: 04/26/2016