Digital Orchestra Toolbox featured on Cycling74.com

Content You Need: Digital Orchestra Toolboxdot_icon

We tend to focus a lot on new Max objects in the Package Manager, but with Max there are many ways to solve problems without compiling externals. This Package Manager release brings a collection of highly practical Max abstractions from McGill University’s IDMIL, designed with music and digital orchestra projects in mind. Looking at this package, all of the well-organized abstractions are clearly the result of real-world patching that we can all learn a few tricks from.

The Digital Orchestra Toolbox is now available in the Max Package Manager

Using multiple IMUs for sensing deformation

I made this video today to quickly document some work I’ve been doing using multiple inertial measurement units (IMUs) for tracking the orientation, bending, and twisting of deformable objects. Intertial measurement units generally contain 3-axis accelerometers, gyroscopes, and magnetometers – the data can be cleverly combined to obtain an estimate of orientation (as long as the IMU is being used in an environment with constant gravity and magnetic field, and not in free-fall).

This particular object has two Mongoose IMUs embedded inside it, running some custom firmware I wrote for complementary filtering/sensor fusion for estimation of orientation.

pyo and libmapper

This morning I attended a very interesting presentation on the pyo DSP module for python. From their website:

pyo is a Python module written in C to help digital signal processing script creation.

pyo is a Python module containing classes for a wide variety of audio signal processing types. With pyo, user will be able to include signal processing chains directly in Python scripts or projects, and to manipulate them in real time through the interpreter. Tools in pyo module offer primitives, like mathematical operations on audio signal, basic signal processing (filters, delays, synthesis generators, etc.), but also complex algorithms to create sound granulation and others creative audio manipulations. pyo supports OSC protocol (Open Sound Control), to ease communications between softwares, and MIDI protocol, for generating sound events and controlling process parameters. pyo allows creation of sophisticated signal processing chains with all the benefits of a mature, and wildly used, general programming language.

Here’s an incredibly simple example – it creates and plays a single sine at 200Hz:

from pyo import *

s = Server().boot()
s.start()
a = Sine(freq=200, mul=0.5).out()

Since we already have Python bindings for libmapper, with a few lines of code we can make this example “mappable” and interactive.

from pyo import *
import mapper

s = Server().boot()
s.start()
a = Sine(freq=200, mul=0.5).out()

try:
    dev = mapper.device('pyo_example')
    dev.add_input_signal('/freq', 1, 'f', 'Hz', 200, 500,
                         lambda s, i, v, t: a.setFreq(v))
    dev.add_input_signal('/mul', 1, 'f', 'na', 0, 1,
                         lambda s, i, v, t: a.setMul(v))

    while 1:
        dev.poll(5)

finally:
    s.stop()
    s.shutdown()

*Note: The above code snippet has been updated for compatibility with libmapper v1.0 and greater.