Exercise: Marble Music

In this exercise we will work in groups to design a musical instrument involving moving marbles. The emphasis is on creating a sound production process which can be modulated using physical actuation. We can then explore live performance, composition, and remote orchestration.

One strong hint: please start with a well-defined, simple sound production method. It is easier to elaborate a working design than start with complexity.

Objectives

After this exercise, you should be able to:

  1. Design a simple musical instrument involving one or more moving marbles.

  2. Sketch and fabricate a simple mechanism including ball pathways, sensor placement, moving elements, actuator mounting, and motion transmission.

  3. Implement low-latency processing of asynchronous inputs and events in CircuitPython using event-loop and state machine structures.

Reference Guides

Please review the following reference guides as needed:

Creative Constraints and Opportunities

  1. You may use any available components. However, you are strongly encouraged to start with the components we have already encountered: accelerometers, reflective photointerrupters, microswitches, hobby servos, DC gearmotors, laser-cut plywood, 3D printed parts.

  2. Please remember that sound production has a number of dimensions, especially rhythm, pitch, tonal color, and noise.

  3. You may use as many marbles as you like.

Steps and observations

The overall objective is to create a musical instrument. The following checklist may help:

  1. Please start by collaboratively choosing a sound production concept. A clear idea at the beginning will focus the rest of the work. Your concept needs to be amenable to modulation using actuation.

  2. Design the physical structure of the instrument. Be sure to remember to include space for electronics.

  3. Write your program around a real-time event polling loop.

  4. Include the console input component in your CircuitPython program. It will enable you to enter control data from a laptop, and also set up your system for remote control.

  5. Include some musical primitives which can autonomously produce patterned outputs.

Deliverables

The result of your explorations should include:

  1. Live in-class demo of your device.

  2. A short report posted to the course work blog including:

    1. a brief video of your device in action

    2. a short text statement reviewing your intent and outcomes

    3. your CircuitPython code, either as an attached zipped file (if long) or as a SyntaxHighlighter Code block (if brief)

    4. a zip of your SolidWorks files

Challenges

If you would like to explore more, please consider the following optional challenge questions.

  1. Try developing an algorithm to produce a non-repeating musical sequence. A trivial solution is just to use the built-in random generator, but can you produce an infinite sequence which conveys a sense of intentionality?