It’s widely known that Miller Puckette, inventor of the Max language, named the program in honor of Max Mathews. It’s less well-known that Miller did this not just because Max was deserving of the honor due to his pioneering work in an astonishing variety of areas within the field of computer music. In fact, Miller was specifically acknowledging Max’s work on a pioneering real-time scheduling algorithm called RTSKED developed in the early 1980s, which Miller credits as a fundamental influence on the design of his software.
I spent 4 days in Pittsburgh in early June attending the 2009 NIME conference at Carnegie Mellon University. NIME is a conference devoted entirely to new interfaces and devices for the performance of musical ideas. The conference consisted of three days of paper talks, poster sessions, demos, and performances. There was also a well-curated gallery show with a number of impressive interactive sound installations. In addition to all the talks and posters happening on campus, a number of us gathered for nightly pitchers of Yuengling and pizza at the local watering hole, the Panther Hollow Inn. I will try to summarize here what I thought were some of the highlights of NIME 2009.
Many of us are invited to perform in unique circumstances – it’s a part of the Digital Media life. Recently, we’ve been featuring some interesting examples of Max-based work, including Andrew Benson’s work with M.I.A. and Dana Karwas’ installations. So when I was asked to play with an electronic music All-Star Band, I couldn’t help but document the experience.
Last week I arrived home from a ‘vacation’ in France. In my case though, the term ‘vacation’ means that I was programming and debugging objects for Max/MSP/Jitter. The occasion for this trip to France were two workshops focusing on Jamoma that were organized by Pascal Baltazar, GMEA, and Incidents Mémorables. The workshops were held in Albi and Paris, respectively.
The Seoul International Computer Music Festival (SICMF) is a yearly event sponsored by the Korean Electro-Acoustic Music Society (KEAMS). Having both concerts and a post-festival paper session, it is in some ways similar to the International Computer Music Conference (ICMC), reviewed elsewhere on the Cycling ’74 website. However, because it is a festival, not a conference, the main focus of the SICMF is the music – and to provide both the local Korean computer music community and the invited international guests with a fertile cross-cultural environment for sharing musical ideas.
With an enigmatic name that refers to a specific time and activity of questionable relationship to the organization’s actual purpose, Cycling ’74 has received its share of athletic sponsorship requests during its nine year history. Typically these have been bicycle tours or related events, and after careful consideration, we have rejected all of them. However, when I received an urgent call from the coach of my son Bruno’s soccer team saying that they were flirting with disqualification for lack of a sponsor, our corporate policy of exhaustive review (involving multiple levels of committee meetings) was carelessly discarded in order to seize the opportunity to market advanced audio and video software products to sports-minded 11-year-old boys and what we hoped would be their easily influenced parents.
This last week saw several Cycling ’74 folks leaving behind their solitary monastic cells and journeying to the great city of N’awlins [New Orleans, to the rest of you] for the 2006 ICMC computer music conference and festival. Although no words will suffice to describe what remains after Katrina’s passing, the dignity and pride of the inhabitants or the Big Easy, or the warm welcome from Tae Hong Park and the fine folks at Tulane, here’s a modest report on what we saw and heard (and ate).
At Cycling ’74 we brainstorm once in awhile (usually shortly before a trade show) about possible C74 schwag. Frankly, we usually bail and end up spending more time on developing software demos and building never-seen-before booths (can you say “yurt”?) and then don’t get around to actually producing some fun schwag. We apologize for that.
(All involved shall remain anonymous.)
I was sitting at my desk today and overheard a tiny piece of a story from a co-worker. I’m sharing it because, well, we all need to laugh.
Many people already know that Jitter can be a fantastic tool for video processing, but what about audio? Used with a bit of cleverness, a matrix can be just the thing for that patching impasse. Following is a set of simple examples to get you started thinking about a matrix when you’ve run thin on patching ideas or need a more elegant way to manage your numbers.
Greatest in amount of degree.
Causing someone to feel awkward, self-conscious, or ashamed.
A famous person.
A brief but intense infatuation for someone, esp. someone unattainable or inappropriate.
For this installment of the c74office journal, you can learn who matches this description for the people at Cycling ’74. Be sure to click on the heart to see the celebrity photo.
Not everyone at C74 is represented here. Those who didn’t participate probably either thought the exercise was stupid (and that is somewhat valid), or were too embarrassed to fess up, or are on vacation. Then there are those who couldn’t decide on just one.
Welcome to the second installment of Stupid JS Tricks. If you missed the previous installment, you can take trip back in time to see us resize our patcher’s interface. In this trick we will rise to a brave new challenge: to drag a window around on our screen without using the standard drag-able region provided on that window by the operating system.
As many of you know, the c74 headquarters is in San Francisco and we are, like many around here, utterly food-obsessed. It is a constant source of entertainment as well as an obvious source of fuel.
Everyone has their opinions on the best places to go — whether it’s a hole-in-the-wall or the ueber-pricey. We tend toward the former and dream of the latter. Our dreams are likely better than the actual experience anyway.
So we have put together a list in case you’re ever in the neighborhood. And if you don’t like our suggestions, don’t bother coming to our office. We have the ultimate weapon to keep angry people away.
- Sushi Zone (HITW)
- Azie (UP)
- The Tamale Lady (tamale delivery)
- Hotel Utah (go for the margaritas) (HITW)
- Tulan (HITW)
- Hunan Home’s (go for the General’s Chicken)
- The Tempest (HITW)
- Le Charm
- Jai Yun (Pricey HITW)
- Balompie Cafe (go for the Pupusas)
- Taqueria Vallarta (go for outdoor tacos after 10pm)
- Los Jarritos (go for the Mole)
- Cha Cha Cha
- Iroha (go for the Ramen)
- Zante’s Indian Pizza
- Brother-In-Law’s BBQ (go for the hot ribs, spaghetti, and wheat bread) (HITW)
- In N Out (go for the DoubleDouble, fries animal-style)
- Cafe Venue (go for the Thai Chicken Salad)
- Cordon Bleu (go for the #5) (HITW)
- Ritual Coffee (go for the Gibraltar)
- Thanh Tam (go for any of the Vietnamese rice plates)
- King of Thai Noodle House (best Pad-See-Ew and Papaya salad in town)
- Mi Lindo Peru (Bistec a lo Pobre or Lomo Saltado)
- Delfina Pizza
- Tartine Bakery (go for the croque monsieur)
- Don~a Tere’s tent (go for tostadas and elote)
Now back to making software.
More to come…
When a new shipment of Lemurs arrive from France, the excitement begins to grow at c74 headquarters. But it’s not what you think. Yes, we are happy to receive a new shipment because it means people like the Lemur and are buying it. And, yes, it’s always good to see that the big box of expensive hardware you just purchased arrived safely. Despite these good reasons, which occasionally lead to hugging the delivery driver, the best part is the BIG BOX.
The big box gives us a chance to blow off some steam at the end of the day. There are two big box options:
1) Get inside the box and attempt to run in circles (see below). It’s a wonderful workout and, frankly, quite difficult.
2) Get inside the box, allow your co-workers to seal the box, and then the same co-workers roll you down the hall while you tumble around inside. It makes one so happy after a day of sitting at the computer. Just look at that smile.
btw: It’s just a coincidence that Spongebob also likes to play in boxes.
If you find this crap interesting, check back again for more journal entries from the c74office.
…a rifle range? A battlefield after a Civil War Reenactment?
On my last night in San Francisco, I decided to check out the newly refurbished iMax theatre in the Metreon down the street from Cycling ’74 world HQ and catch Roving Mars.
For any space geek, it’s a cool, if short, ride. But I found myself tsk-tsking about the use of the mammoth iMax sound system to depict ass-rattling multistage rocket separations, retrorocket racket, and the chest-whacking thump of the Platonic Solid Beachball thingie that surrounded the rover payload (however satisfying a physical experience it might have been). Noise doesn’t work like that in a vacuum, and it would certainly work differently in a Martian atmosphere.
But this morning brought a new and interesting question: What does the Moon smell like? Hmmm…. Frying bacon?
My colleagues Andrew and Meg and I headed over to the new Recombinant Media Labs facility last week for a fun-filled week of Max workshoppery.
Of course, I was so busy pitching Max/MSP/Jitter patch projections around and ranting at the some 20-some brave souls gathered to attend that there aren’t any pictures of me, and probably fewer or Andrew and Meg in action dispelling the phantoms of fear and doubt. I apologize for this, but will share such as I have.
The site itself was wonderful, and their staff as decent and friendly as one could have wished for. This is particularly amazing, since they were spending long evening hours after we departed readying for a concent event on the Saturday when the workshop concluded. They remained conscious and helpful throughout an ordeal I can only imagine (sleep dep is not one of my things). Bravo, boys.
I was photographing during the lunch periods, however. They were generally a welcome event, enlivened by good weather and a roof garden…
…and, on one particularly special day, a lunch from the Tamale Lady, a famous local SF personage who makes spectacular tamales.
Joshua Clayton paid us a special visit and charmed the masses with an introduction to slabbery in his own inimitable style.
But it wasn’t all me ranting, nosirree. I was greatly assisted by my colleagues Andrew, who provided QuickTIme and OpenGL illumination to the assembled masses…
…and Meg who limned the subtle depths of scheduling and patch tracing, in addition to Lemur-wrangling.
Following the workshop, our “classroom” was transformed into what has now become my favorite listening room ever. Saturday evening featured performances in their extraordinary space from Trevor Wiahrt
and Richard Devine
…who turned in one of the most interesting performances I’ve ever heard from him. A great end to a wonderful (if exhausting week).
The Jamoma Project recently released version 0.2 of its modular framework for Max, MSP, and Jitter. Despite the low version number this software is actually quite mature, which years of development and experience forming the basis of the framework. Given that this is a significant release in Jamoma’s roadmap, I thought I would talk about both Jamoma and it’s development.
What is Jamoma?
So, the first thing you are probably wondering about is what Jamoma is all about. Jamoma is a structural framework for creating, composing, and performing interactive music with Max. It does this by providing a set of guidelines for the construction of interchangeable, reusable, functional blocks (patches), called modules. In addition to the guidelines, the Jamoma Project has also produced an implementation of those guidelines.
The promises of any object-oriented environment is that components can be created, and then freely re-used. This is certainly true of Max as well. However, when a user tries to substitute a component of their patch, there is generally no standard to which the components (patches) are structured. This is actually a strength of Max, as it doesn’t impose its vision of how one should work on you.
Unfortunately, it is rare that patches can actually be interchanged between users (and auditioned) without a significant amount of work – work both learning the ins and outs of the new patch, and configuring the patch to work in the user’s own system of patches. This is the first of Jamoma’s primary goals: to provide a standard to which patches/modules are structured to allow for easy interchange and integration.
A second goal of Jamoma is to provide standard tools – that are virtually always required – with a minimum of time needed to set them up. As an example, audio modules will almost always benefit from a mute button, a bypass button, a gain control, signal level meters, etc. Video modules will benefit similarly from bypass, mute, and freeze controls as well as a preview pane. Jamoma provides templates and tools that incorporate these features with a minimal amount of setup time.
The third goal of Jamoma is provide hierarchical organization of the parameter space. Every module maintains its state, and provides a mechanism for reading and writing preset files specific to that module. Furthermore, global snapshots or presets may be created and maintained that apply to all instantiated modules via the use of Max’s standard pattrstorage object. This also provides a means to interpolate smoothly between presets to simplify complex transitions.
Jamoma grew out of initial research and development that was conducted as part of the Jade interactive performance environment. Jade is an application that hosts modules, which allows for script-based automation of these modules. Initial development on Jade began in early 2001 as a means to aid my own compositional work. It was released to the public at the end of 2002, which was followed by a significant update to version 1.1 in mid-2003. It was at this time that the great benefit of having modules directly within Max was realized – and Jamoma was born.
The Jamoma project was started as an Open Source project hosted on SourceForge. After some initial work activity died off until it was revived in March 2005 by myself and Trond Lossius.
A Jamoma Module is a Max Patch which has been structured according to a set of guidelines known as the JIG (Jamoma Interface Guidelines). Modules may either be embedded in a Max patch using the popular bpatcher method, or they may be included as simple Max objects. The screenshot shown here is an example of the two methods side-by-side. The filter module is one of a number of example modules included with Jamoma.
Every module will have one or more inlets and one or more outlets. The first inlet is used for receiving all commands to the module. Likewise, the first outlet is used to report the state of the module and return parameter values when they change. Additional inlets and outlets are the inputs and outputs for data streams that are to be processed or synthesized by the module. This includes audio, midi, and video signals.
This screenshot shows the filter module in context. In this example it is being used to filter the signal from MSP’s standard soundfile playback mechanism. Note the presence of a “bang” button connected to a Max send object called jmod.init. This mechanism is required, and provides a universal means to reset all modules that are loaded to their respective initial state.
The JIG specifies a variety of essential elements to ensure that modules are both interchangeable and compatible with each other. This includes the size(s) of the user interface, standard features, and reserved messages and syntax.
For example, every audio module is expected to implement the ‘gain’ parameter, which attenuates or boosts the output signal, specified in decibels. Each audio module should also implement the mute and bypass messages. No module may implement a message called bang, it is considered a reserved name due to its special nature in the Max environment.
Further, for all module parameters where it is feasible, the parameter should be ‘ramp enabled’. This means that when a second value is given to messages for the parameter, it will smoothly slide from its current value to the new value. This is aided by a set of tools for building modules that we will described later. An example of a ramping parameter is demonstrated in this screenshot.
Hierarchical Parameter Space
One of the standard features of all modules is the ability to read and write presets in an XML file format. The facilities may be accessed as one of the standard Jamoma messages. Additionally, most Jamoma modules use standard facilities that provide a “module menu” in the upper left corner of the interface that include items for reading or writing a preset. (As a historical note, Jade was reading and writing presets in XML format prior to the release of pattrstorage, but it now uses pattrstorage to simplify and standardize the system).
The preset mechanism in these modules is built on the pattr system that was released as a part of Max version 4.5. This mechanism allows not only local preset reading and writing, as just demonstrated, but global access to the Jamoma parameter space through the standard pattrstorage object. This allows for the storage and recall of global presets and interpolation between those presets. The screenshot below shows an example of pattrstorage managing several modules.
Modules can be constructed from scratch following the guidelines published in the JIG, or they can use the extensive library of pre-made components that are a part of the standard Jamoma package.
Our screenshot shows the construction of a simple Jamoma module. This module consists of several key components:
- GUI Component: The black metal background, which includes built in signal meters, bypass and mute buttons, sample-rate reduction (for managing CPU load), gain control, and module menu. The standard Jamoma package includes a variety of these in different sizes. It is automatically configured (using Max’s scripting) for use in audio, video, or control contexts. It is also skinnable – meaning that the appearance can be customized for a look other than the brushed metal that is the default.
- jmod.hub: The core of the message handling, preset management, and additional functionality. This component shares an invisible connection to the Gui Component to link them. It is connected to a pattrstorage to provide a tie into Max’s pattr system.
- poly~: Most audio modules will use a patch (in this case degrade.lib) that is loaded in a poly~ object. This provides the mechanism for downsampling and muting. Additional options are available. For example, many Tap.Tools 2.0 externals have integrated mute, downsampling, and bypass capabilities. Video or control modules can use a simple patcher.
- jmod.parameter: this object creates a parameter and links it to the jmod.hub component. Various attributes can be established such as enabling automatic ramping capability (as seen in a previous section of this paper), decibel conversion, or the filtering of duplicate values.
Recapitulation in the Key of Licensing
When a user begins with Max/MSP, they are presented with the paradigm of a blank document (see David Zicarelli’s CMJ article “How I Learned to Love a Program that Does Nothing). This proves to offer the user the ability to work with the software in any way that they like, offering no preconceived notions about how a module should be structured. This is both a blessing and a curse. While not limiting the user, it also provides no guidelines to help the user get started. It is our hope that Jamoma will be helpful for both long time users and beginners alike.
By providing a mechanism by which a patch must be structured, interchangeability can also be guaranteed. Many new Max users can thus be re-assured that any patch they develop will be able to be re-used. They will also find that they can use a variety of patches developed by others that conform to the JIG. Jamoma also encourages good structure and form for students beginning to use Max.
Jamoma is licensed under the terms of the LGPL, thus making it freely available for use in both commercial and non-commercial applications. This licensing was chosen for the purpose of helping to establish and encourage adoption of the system.
When I started this series of short “advice” pieces to Max/MSP/Jitter beginners, I also decided to ask a number of my friends and colleagues about what their ideas of what good advice might be so that you won’t be left with just my admittedly biased advice set.
I wasn’t planning on googling drug-smuggling secrets.
A friend and I were talking about the Steven Soderbergh film Traffic. In addition to reportedly featuring our pluggo software in action, there was this bit in the film where Catherine Zeta-Jones inspects some kind of statue which turns out to be molded from cocaine.
I was wondering whether there was much in the way of fact about this detail, went a-googling, and stumbled upon this interesting online chronicle of drug smuggler stash secrets (although it appears not to have been updated recently). THC-laced suckers? Ink cartridges full of heroin? Hollowed-out Princess Di biographies stuffed with blow? Meth with the Ferrari logo? It’s all there.
Even though J. and I were trapped in The Storm of The Century down in southern Indiana on our way to see my mom in Kentucky for the holidays, we really hadn’t had any snow to speak of here in Madison. That’s odd because because this particular time of year is the period when you lock yourself indoors because it’s normally umptythree degrees below zero with a 20mph wind.
But not this year. It was a rainy (Dutch?) winter until night before last, when we had the first of two nights of a picturesque white fluffy blankety postcard snow. Not the towering grimy urban pyramids of plow-sculpted densepack or grey slurries of meltwater and salty post-snow, but the lovely cover of soft snow that gracefully starts by softening the edge where the lawn meets the walk, then ripens into a driveway and sidewalk-obliterating field of undulating and dazzling white
Of course, I now have to go out and shovel quite a few feet of sidewalk, but hey. I will officially enjoy this for a few more days, and think about great things to eat when it’s cold and you don’t mind staying in and doing a little work in a warm kitchen.
1 medium onion, chopped
2 cloves garlic, chopped
4 medium zucchini, cut into 1/2-inch dice
1 teaspoon ground cumin
1/2 teaspoon turmeric (dried, ground)
1-1/2 teaspoon kosher salt
Freshly ground pepper to taste
1-1/2 cups chicken broth, homemade, or low-sodium canned broth
1/2 cup unsweetened coconut milk
2 teaspoons chopped fresh cilantro
2 teaspoons chopped fresh mint
1/2 teaspoon grated orange zest
1 teaspoon grated unsweetened coconut
Heat the oil in a large pot over medium heat. Add the onion and garlic and cook for 5 minutes. Add the zucchini and cook for 5 minutes more. Stir in the cumin, turmeric, cayenne, salt, and pepper. Stir in the broth and coconut milk. Bring to a boil. Reduce the heat and simmer until the zucchini is soft, about 25 minutes.
Scrape the soup into a blender and process until smooth. Pour into a saucepan and heat over low heat until just hot.
Combine the cilantro, mint, and orange zest in a small bowl. Divide the soup among 4 soup bowls. Sprinkle with the grated coconut and then the herb mixture. Serve immediately and try to eat slowly.