instrument-maker

A framework for making digital instruments with sensors, driven by a need to improve access.


Instrument Maker is an open source framework for digital instrument building with sensors, featuring a library for running Pure Data on embedded computers such as Bela or Raspberry Pi + Arduino.

Key pages:

Scroll down for project information and basic installation instructions.

About Instrument Maker

Instrument Maker is a tool for rapidly creating what is often described as accessible music technology (AMT), by using established programming languages and affordable hardware to create standalone instruments.

Amongst other things, this is a quick way to develop features often requested in music workshop settings:

quickly assignable musical scales/keys

flexibility around root notes and available ranges of notes

chords

sampling and live looping

input from a range of interfaces e.g. switches and distance sensors

The resources are designed in such a way that switches are interchangeable with continuous controllers such as light, distance and pressure sensors, giving more flexibility to adapt during play.

How does it work?

Although Instrument Maker was designed as a complete workshop package including hardware, the main resource is a library of objects for Pure Data that can be used independently. We are currently looking for users to test and use the code before returning to a more integrated approach.

Having downloaded the library, create and connect building blocks in the form of obects with the im. prefix: e.g. inputs, outputs, tuning systems, processors, and synthesisers.

The Instrument Maker objects in Pure Data sit on a white screen, featuring minimal outlined boxes with black connecting lines. The boxes are labelled: input, scale, sinewave, volume, and they are connected to further boxes labelled echo and output. The lines are drawn from the top, through each of the boxes in various inlets and outlets, into a box labelled output.

Upload the resulting code to Bela, or use a Raspberry Pi or laptop with an Arduino-type MIDI device connected.

The software library is also great for live patching!

Installation

This is for our current demo setup for desktops/RPi. Deken release coming soon! Some experience and/or time investment is required for these installations while we compile better instructions.

We recommend using Patchbox OS for Raspberry Pi installations - once installed, follow the instructions below.

Recommended: direct download

Download the latest release here, decompress somewhere in your user folder and follow the instructions for installation. https://github.com/matthewscharles/instrument-maker/releases

Alternative: clone this repo

This has been the preferred option for collaborators, but realistically requires some knowledge of Git and/or terminal.

Download GitHub Desktop and clone: https://github.com/matthewscharles/instrument-maker

Installing Pure Data and linking folders

  • Install Pure Data Vanilla: http://msp.ucsd.edu/software.html (sorry, no Purr Data support yet).

    • On a Mac, you may need to right-click on the downloaded application to open it without a security warning..
  • Copy the im folder to the existing search path in Pure Data (usually within your user/Library folder), load Pure Data.

  • Add the folder to the preferences.

    The PD menu highlighted on a Mac OS screen, showing preferences, then path. The PD search window shows /users/cm/Library/Pd/im

  • Find a list of objects by opening _im-object-overview.pd from the main folder and/or consult the im-reference website.

  • Right-click on the objects found here to open help files. This is a convention from Pure Data and similar languages - most help files contain editable examples!

    • Within the help files, you will find information on the relevant arguments, inlets, and outlets, related objects both within the library and in established approaches, whether the object expects or sends audio or control-type signals, and some basic examples to be copied and pasted.

    A brightly coloured window shows generate.sine, with a control input and audio output, and an example of a sinewave connected to a fader with a space bar and sensor input. along the right hand side are related items included squarewave, sawtooth, noise, and scale.

a list of current objects

MaKey MaKey

The MaKey MaKey is an interface enabling physical interface building through crocodile clip connections and conductive materials.

Using the MaKey MaKey should be plug and play: use the im.keypress and im.makeymakey objects to experiment!

Touch Board

Use a Bare Conductive Touch Board set to generic_midi_controller and load the Touch Board as a MIDI interface in Pure Data. The sensors will appear as continuous controls via im.electrodeand im.tb.

Bela

Bela is an environment including hardware for low-latency sensor interactions, and was part of the inspiration for this framework (particularly a continuity between switch and continuous control).

See the installation notes below for details on how to use it — this is currently untested!

MIDI controllers

Set your MIDI controller to CC 0-7 on channel 1. This should work with im.sensor in the same way as our custom boards.

Some notes on access

We have developed hardware and web interfaces, but in the interest of some solid testing, our attention is on the underlying software library for now. With time, the code itself should be a useful educational resource.

As we begin revisiting the web elements we also hope to start re-engaging with screen reader access and other often overlooked interfaces in this field..but we are not attempting to deliver a blanket solution by any means.

Distributed under the terms of the GNU Public license version 3.

Nothing about us without us

Through this framework, we hope to ensure more people have direct access to the act of coding and customisation. This is a tool made by and for our community as disabled and/or neurodivergent artists, and are opening up a more inclusive approach as our priorities are addressed. Everyone is welcome to use and contribute to these resouces!

All too often in instrument development settings such as hackathons, it is assumed that the setup of a new instrument will be the domain of a specialist separate from a musician as an end user. Many barriers exist around exclusive language and assumed knowledge. This can maintain a divide between specialists without lived experience of disability creating resources for disabled people. We need to establish more collaborative spaces. This project is a practical approach to that issue.

The project was established by Charles Matthews, Gift Tshuma, and Roybn Steward, starting from Gift's question: "can you give me a Pure Data demo lasting one minute, if it's supposted to be such an accessible way into building instruments?" (we're getting there).

We are also grateful for support from various organisations and inviduals - thanks page coming soon. If you want to collaborate and/or can think of a way of helping us move forward, please get in touch.

Follow our collective project Blurring the Boundaries for news of future events.

"Accessible" does not always mean "easier"!

This is not an attempt to make the process easier in a way that detracts from artistic integrity, nor is it an attempt to force independence! Rather, our intention is to establish options for more people to engage with the creation of music technology from more accessible starting points. Access is different for everyone, but the barriers that we can remove often overlap.


Read more about the philosophy behind this framework on the Bela.io blog.


Throughout this site you will encounter graphics playing on the classic "AAC" aesthetic often found in classrooms..find out more about this project here: Instrument Maker Communication Symbols

The key ingredients of the instrument maker framework include sensors, musical scales, effects, and code.


How does the software differ from regular Pd?

Our focus has so far on a separation between graphical interface and interactions - there are no on-screen objects that act as sliders or buttons, as we encourage users to work toward physical outcomes. Of course, this decision in itself represents more access barriers, but we're working back toward something a bit more integrated.

Instrument Maker objects are named through something we feel is a bit closer to conversational "plain English", or rather the kind of language we might expect to use in a workshop setting with non-specialists. That's not to say there is anything wrong with the abbreviations found in Pure Data and similar language, we're just trying to cut down on explanations for that initial experience.

Pure Data code relies on a user placing arguments immediately after an object name, in a particular order. Our latest updates introduce the idea of non-case-sensitive parameters that can be placed in any order. We are also introducing more conventional units such as Hz, ms, and note names.

All Instrument Maker objects run at audio rate, and we have deliberately omitted the tilde (~) usually used to distinguish this process. However, for people running later versions of Pd, many objects will accept "control"-style messages.

Why the im. prefix?

We wanted to avoid obscure names that might clash with existing Pd objects (thus pushing us into obscure IKEA-style naming conventions, but in our latest version we are starting to move toward plainer names.

Some colleagues have noted that the im prefix is useful to indicate objects used separately as a beginner library. By installing the IM folder within Pd's built-in search path, it's still possible to create im/sensor etc. with a slash instead of a dot.