Digital Musical Instrument Design
Welcome to Digital Musical Instrument Design, one of the courses at the 2018 Summer Computer Science Institute at Carleton College. This page contains all the course notes and exercises that you will need throughout the week.
Day 1
On this day we introduce the notion of a sound wave, and we see how the frequency of these waves accounts for the different pitches we hear. Using Pure Data and Arduino, we build our first instrument, which uses a potentiometer to control the emitted frequency and sounds like a slide whistle. We eventually abandon the physical description of sound in favor of MIDI, and we adapt our instrument to send messages to a MIDI controller.
- Oscillating
- Seeing Waveforms
- Tiangle, Part I
- Tiangle, Part II
- Tiangle, Part III
- Midiometer
- Hot vs. Cold Inlets
Day 2
On this day we build up a piano-like instrument using push buttons. We introduce two major computational ideas: conditional logic and abstractions. Conditional logic allows us to program choices into our instruments. Abstractions have two significant advantages: they hide complexity, and they are reusable.
- Monodrone, Part I
- Monodrone, Part II
- Monodrone, Part III
- Abstractions
- Pentatouch, Part I
- Pentatouch, Part II
Day 3
On this day we build an instrument that can play multiple notes simultaneously—as chords. We introduce two major computational ideas: iteration and arrays. To produce pleasing sounds, we’ll investigate scales and common chord structures.
Day 4
On this day we build an instrument that can play multiple notes in quick succession—as arpeggios. We continue our discussion of conditional logic, iteration, abstraction, and arrays. We extend arrays from one-dimensional sequences to two-dimensional tables. We also introduce some low-level bit manipulation.
Day 5
On this day we build an instrument that allows the player to walk through a 2D space. One axis alters a melody, and the other harmony. We’ll use a joystick for input. We continue our discussion of conditional logic, iteration, abstraction, and arrays. We also introduce the modulus operator.