Chromatic Shift is an audio plugin (AU and VST3) that uses three interpolating delays to pitch shift audio.
The range of the plugin is two octaves below and two octaves above the original audio.
A window delay (5ms to 50ms set outside playback) changes audio quality at more extreme settings. Default is 20ms.
Chromatic Shift was built using the JUCE Framework (C++).
Dimension Chorus is a VST plugin modeled after the Roland Dimension D® chorus. The effect includes a shared LFO (with phase flipped on opposite channel). The dimension knob controls a mix of inverted, high-pass filtered signal, which is sent to its opposite channel further spreading the stereo source.
Beat Repeater is a VST and AU stereo audio plugin that manipulates the wet, dry, and feedback gains of a simple delay line. When on, the plugin cuts off the input to the delay, cuts the dry output signal, and increases the feedback to 100%; in short, the sound “stutters” or repeats the beat according to a BPM setting selected by the user. An additional automate button lets the plugin randomly select beat divisions for a further glitchy breakdown of the sound. User parameters control left and right channels separately. Beat Repeater was built using the JUCE Framework (C++).
Mixer.* is a Max/MSP package for audio mapping projects. The package contains basic audio mixer objects, like channel strips, eqs, limiters, and aux sends. Mixer.* provides GUI, modular design, and pattr binding for smooth integration into your Max/MSP workflow.
To get started with Mixer.*, place the mixer folder inside your Max > packages directory. Then restart Max. Inside a Max window, simply create a new object, start typing “mixer” and let autocomplete help you do the rest. You may also type shift-M to quickly access any mixer. object as a helpful bpatcher.
Korgnano is a software implementation of the Korg nanoKontrol USB controller. The object connects your hardware nanoKontrol to Max and automatically ports the data to korgnano.inputmenu objects, or specially named receive objects that you can create yourself. (e.g. receive scene1_ch9_btn2)
Ever since Cycling 74 introduced the idea of packages in Max 6.1, I’ve been pretty excited. Previously, there wasn’t a great way to distribute and install tools, objects, externals, media. And if you wanted to use anyone else’s tools, you had to wade through the murky collection of application directories and dump in single files–an unfailing way to ensure that you’d have to re-install these tools after a Max/MSP update.
With packages, Cycling 74 got rid of the mess. Tool creation, installation, and for me, distribution is clear and simple. Even if I’m developing my own set of abstractions for nobody’s computer but my own, packages provide a platform for a confident working-practice with long-term benefits. This post is meant to outline the pros of Max packages by walking through a working example of how one can set up her/his own Max package.
While I have created several Max packages since 2014, the post will outline my latest Max package, Korg Nano. It’s a basic example, two objects that comprise a software implementation of the Korg nanoKontrol USB controller, certainly enough to get one started.
After downloading the Korg Nano package, unzip the file and place the unzipped folder directly into the ‘packages’ directory. For Mac users, the folder is Applications > Max 6.1 > packages. Or, you can read a short article by Cycling 74 on packages for installation.
What It Is
In short, packages provide global access. Autocompletion, media in global search paths, extras in the top Extras dropdown menu, option clicking helpfiles, it’s all there. What the Korg Nano package provides is a software listener for the 151 controls on the Korg nanoKontrol USB controller. The package is meant to be a plug ‘n play solution for this hardware device (and I use it for prototyping all the time).
The patchers folder is where you throw your abstractions and objects (not externals), including any additional bpatchers that you may have used to create your objects. Of course, if your package depends upon third-party objects, you can place them here (and within any named subfolder). For Korg Nano, there are two main objects, korgnano and korgnano.inputmenu. korgnano is built from several bpatchers, which one will see listed in a subfolder (“patchers > korg_nanoKontrol”).
The media folder allows one to place images, audio, and video. This folder becomes global (after restarting Max), so you can also use packages as a way to manage media instead of worrying about “filepath” when you move from computer to computer. Since Korg Nano is a software implementation of the USB hardware controller, I used image buttons that simulate the look and feel of the hardware controller. Placing images in the media folder ensures they will be found, regardless of what computer I am using.
The help folder is exactly what one would expect. Help files ending with the extension .maxhelp. While help files are useful (e.g. option-click an object to access its help file), Max packages allows one to provide some serious help to the help files. This helpful power boost comes by way of the docs folder.
The docs folder contains reference files that enable hover tooltips, documentation window text, uniform descriptions, and fancy descriptive break downs and object links from within the reference window. To understand what is happening in the help file screenshot above, let’s dig into the docs folder. Navigate to the “korgnano-0.0.1 > docs > refpages > korgnano > korgnano.inputmenu.maxref.xml” file. This xml file contains all the descriptions that get pulled for the help file. While this file contains confusing html/xml style tags, one need only look to two examples to see their power.
The first example comes from the first two xml tags <digest> and <description>. These two description tags show up in the Autocomplete menu, the documentation window, the reference window (outside any help file), and the help file’s title object (actually, a jsui object that uses an application Max script “helpdetails.js” to parse these xml tags and display them for clean documentation).
The second example of documentation power comes from the <seealsolist> tag near the bottom of the .xml file. One only needs to place additional object names here (e.g. “<seealso name=’korgnano’/>”) and links automatically appear in the reference documentation window, linking to your objects’ help files. This is handy here, as I want to link the korgnano object and the korgnano.inputmenu object together since these objects are symbiotic. The korgnano object grabs data from your Korg hardware controller and then sends the controller data direct to korgnano.inputmenu objects.
Docs, Help, Media, Patchers. That’s it. A Max package that enables software listening for the Korg nanoKontrol, neatly bundled for distribution. Clear documentation files to help anyone navigate the tools, even me! when I revisit my tool a few months down the line. However, I do not need to distribute to reap the benefits. Clippings, templates, patchers, or even externals that I use often in my own work have a place within a Max package, easily searchable and documented so I have a working practice that is efficient and scalable. For anyone working in Max, packages offer a clean way to keep your sh** together.
Packages also work with Max 7. While my example was built using Max 6.1, there is no reason why it shouldn’t work in Max 7. Email me if you have issues.
Speaking of issues… if you’re having trouble with autocomplete, try creating a message object in a Max window with the text “; max db.reset”. This will refresh Max’s preferences, but may take 60 seconds+ to reload. Here’s the original forum post where I found this fix.
simpleKinect is an application for sending data from the Microsoft Kinect to any OSC-enabled application. The application attempts to improve upon similar software by offering more openni features and more user control.
Specify OSC output IP and Port in real time.
Send CoM (Center of Mass) coordinate of all users inside the space, regardless of skeleton calibration.
Send skeleton data (single user), on a joint-by-joint basis, as specified by the user.
Manually switch between users for skeleton tracking.
Individually select between three joint modes (world, screen, and body) for sending data.
Individually determine the OSC output url for any joint.
Save/load application settings.
Send distances between joints (sent in millimeters). [default is on]
Kinect-Via- is a Max/MSP interface series for composers wanting to route and map user-tracking data from the XBox Kinect. The interface series complements four different OpenNI applications, namely OSCeleton, Synapse, Processing’s simple-openni library, and Delicode’s NIMate. All Max/MSP interfaces communicate using OSC (Open Sound Control) messages and are performance-ready, meaning that all routing and system options may be changed in real time. The Kinect-Via- interfaces offer a tangible solution for anyone wishing to explore user tracking with the Kinect for creative application. The interface currently has over 1000 downloads globally. Note: Tested with Max 5 and OSX 10.6.8.
Human Chimes. Human Chimes is an interactive public installation. Participating users become triggered sounds that interact with all other participating users inside the space. The Kinect mapping is using Kinect-Via-OSCeleton.
The Beat. The Kinect user’s hand and head movements mapped to filters, and at times, hand gestures actuate sound. The Kinect mapping is using Kinect-Via-Synapse. “The Beat” is a composition by Nathan Asman.
Juggling Music (Arthur Wagenaar). Playing music by juggling with glowballs! Demonstration of this new self made musical instrument, controlled by juggling. Also known (in Dutch) as ‘De Kleurwerper’.
Wiimote Controllers is a Max/MSP interface for composers and artists interested in getting started with the Nintendo Wii for creative application. The interface may handle up to four Wiimotes simultaneously and is ready to use alongside OSCulator. The interface uses the CNMAT object ‘OSC-route’.