← Back to Work

Creative instrument / Class project / 2024

One gesture.
Two ways to understand it.

A synthesizer, arpeggiator, and visualizer controlled through a MIDI keyboard. Built in Pure Data with GEM.

My roleDesign & implementation
Built withPure Data · GEM · MIDI
Project statusCompleted class exploration
View the original project

01 / The starting point

Follow the idea.
Find a workable scope.

I began with an idea for a vocoder that would translate an audio sample to nearby notes in a C major scale. I also wanted to explore synthesis and visuals with GEM.

The vocoder remained partial. The implemented class project became a synthesizer with effects, an arpeggiator, and a visualizer.

From my original project commentary, dated April 27, 2024. Read the project notes ↗

02 / The interaction

A physical control.
More than one response.

Play a note on the MIDI keyboard, then turn a knob. The control changes the audio and a corresponding property of the visual scene.

Examples documented in the original instrument
ControlWhat you hearWhat you see
VolumeSound levelObject size
TempoArpeggiator rateObject and particle spawn rate
PanStereo positionObjects move left or right

The eight audio controls cover volume, tempo, glide, resonance/cutoff, reverb, chorus, delay, and panning. Visual mappings differ between the shape and particle scenes.

The arpeggiator

With the arpeggiator enabled, play four notes and hold the last one to keep the sequence repeating. For example: B, C, F, G. Hold G to continue the pattern; release it to let the notes decay.

03 / Building the system

Separate the parts.
Keep the signals connected.

I organized the patch into reusable abstractions for synthesis, effects, the visualizer, and GEM objects. In my original notes, I described how grouping related components made the patch easier to extend.

MIDI input

Keyboard input and controller values enter the patch. The source includes note input and a four-pitch array for the arpeggiator.

notein · stripnote · $0-pitches

Audio processing

Subpatches organize effects such as reverb and delay around the synthesizer.

rev2~ · delwrite~ · delread~

Visual response

GEM scenes translate controls into changes in size, position, motion, and particle behavior.

gemhead · scaleXYZ · translateXYZ

Object names above come from the original patch. Inspect the source ↗

04 / What the work shows

A working exploration.
Room to keep experimenting.

The project produced a Pure Data patch and a written guide for playing it through a MIDI controller. It demonstrates how I connect interaction, sound, visuals, and modular implementation.

It was a creative class project, not a validated learning or therapeutic tool. Some visual mappings remain unfinished. The original notes identify further effects, richer scenes, and a possible audio plugin as future directions.

Run the original project
  1. Install Pure Data and the GEM library.
  2. Open VirtKeyboard.pd from the repository.
  3. Connect your MIDI controller and configure MIDI input in Pure Data.
  4. Match the controller’s knobs to the patch’s mappings, then try notes and effects.

The patch was built around an eight-knob controller. Your controller may need different assignments. This case study does not connect to MIDI devices or run the original patch in your browser.

Open the original guide ↗

The connection

Make an idea easier to explore.

Sound and visuals offer different ways into the same interaction. That interest continues in the tools I’m building for attention and for understanding data.

See what I’m building now