Headpieces That Sound Through Touch

Series: alt.ctrl activities

Made by Tess Buckley with Adrian Freed, at the Stochastic Labs residency. Two e-textile headpieces, crocheted with conductive thread and stabilised with Kevlar, each make their own sound, one in a minor key and one in major, and make more sound as their wearers touch. The circuit closes only through contact.

These pieces start from a simple, physical question: what does touch, connection, and intimacy sound like? The interest here isn't in data for its own sake, but in the physicality of closing a circuit, a loop completed through connection with another person.

To explore this question I made these headpieces in collaboration with Adrian Freed during my summer residency in creative technology at Stochastic Labs […]

Clothes already do this, quietly, without any circuitry at all. We might wear a partner's jumper because it still smells like them. We keep a cardigan because it was our grandmother's. We reach for certain colours on hard days the way we reach for a mood we want to borrow, or wear them as armour when we need one.

The costumes are built for exactly this kind of contact: two e-textile garments that each can generate their own audio (one tuned to a minor key, the other to major) and produce more sound as the wearers come into contact. In this way, friction becomes signal: the closer the touch, the more the sound builds, so the depth, discomfort and clumsiness of getting close to someone is written into the piece as much as the tenderness is. Worn by two dancers (eventually), they form a closed circuit for sound, completed only through touch, so that connection is felt and heard at once, and the importance of being held becomes, briefly, audible.

Visually, the garments borrow from helmets and chain mail: protective, armoured forms but crocheted with conductive thread and stabilised with Kevlar, the material invented by American chemist Stephanie Kwolek and used in bulletproof vests, rather than forged. That contradiction is the point. Contact can be difficult, guarded, something we brace for rather than invite and yet we're a social species, wired to seek it out regardless. The holed, soft armour doesn't refuse touch; it simply tells the truth about what touch can cost, while the sound underneath tells the truth about why we reach for it anyway.

The two headpieces are now left in Berkley, California with Héloïse Garry for further play and performance by dancers.

*semi-inspired by my "tactile - auditory synesthesia", which I learned about this summer while chatting with Adrian !!

Tess Buckley, in a LinkedIn post about the pieces
The two finished headpieces, working (17 seconds, with sound).

Materials

ItemAmazonM5StackMouser
Conductive thread, for the sensing regions of the crochet
Non-conductive thread, crocheted between the regions to isolate them electrically
A little very conductive thread, such as silver-plated Kevlar or nylon, threaded through each region
Silicone-clad hookup wire, one length for each region
For each headpiece, an M5Stack Capsule (ESP32-S3) as the microcontroller, using inputs that can sense capacitance, one for each region (four in the examples); the link is to the Capsule Kit v1.1 with M5StampS3AK129-V11170-K129-V11
For each headpiece, an M5Stack MIDI Synthesizer Unit (SAM2695), which plays the notes through its built-in 8 Ω, 1 W speaker; it takes MIDI over serial through its Grove cableU178170-U178

Tools

  • A crochet hook
  • Soldering iron
  • An MCU IDE

Skills

  • Crochet, changing threads
  • Soldering
  • Programming capacitive sensing on an MCU

Instructions

  1. Crochet each headpiece, in protective forms borrowed from helmets and chain mail, changing between conductive and non-conductive thread so that the conductive parts form electrically isolated regions: four in each of the examples.
  2. Thread a little very conductive thread, such as silver-plated Kevlar or nylon, through each region: it increases the region's capacitance and makes the sensing more reliable.
  3. Tie a silicone-clad wire to each region with a knot, and solder the wires to MCU inputs that can sense capacitance (G1, G5, G9 and G7 in the examples).
  4. Connect each headpiece's MIDI Synthesizer Unit (Unit Synth, SAM2695) to its Capsule with the Grove cable, and send it MIDI notes over serial at 31,250 baud; the unit plays them through its built-in speaker. The unit listens on G13 in the examples, and M5Stack's documents give G15: try G13 first. M5Stack's library for the unit, in its 1.0.1 release, numbers its instruments one higher than the wire does; its GitHub master has since fixed this but still calls itself 1.0.1, so look in M5UnitSynthDef.h and subtract one for a program change only if GrandPiano_1 is 1 there.
  5. Give each patch its own note and each headpiece its own set, so that you can hear that every patch is sensed reliably. In the build of September 2026, the performance build for the residency, both headpieces run the same program, which picks the set from the Capsule's own address: C4, D4, E4 and G4 (C major pentatonic) on one, and A3, C4, E4 and A4 (A minor) on the other, on a vibraphone sound. The sets stand in for a composition.
  6. Program the start-up. A rising two-note chime (C5, then E5) says it is up and to keep hands off; then the touch controller starts and is left about two seconds to settle; then, in silence, it measures each patch's resting reading; then it plays the patches' notes for about two seconds, still hands off, to learn how much the synth's own sound moves each reading (its wiring runs near two of the patches); then one higher note (G5) says the patches can be touched.
  7. Make each patch a gate on a running arpeggiator: at every step the arpeggiator plays the next patch whose gate is open, at full velocity (127), and a gate is open exactly while its patch is touched. A firmer touch raises that patch's note an octave, and tilting the head widens the arpeggio from one octave to two or three, measured by the Capsule's own motion sensor against how it sat during the silent calibration.
  8. Wear them, two people (in time, two dancers): the more patches touched, the more notes each pass of the arpeggio plays, one note to a step, and a firmer touch lifts that patch's note an octave; the circuit for sound closes only through touch.
Crocheting a headpiece (24 seconds, no sound).

Variations

  • Crochet more or fewer isolated regions; the examples have four in each headpiece.
  • Let how firmly a patch is touched set the loudness (the MIDI velocity) of its note instead of a fixed velocity, after the post's "the closer the touch, the more the sound builds".

Related resources

Coding Prompt Build Block

A prompt to give a coding assistant, to start the code for this activity. Copy the box, answer its questions about your board and pins, and test what comes back on the bench before you rely on it.

I am building "Headpieces That Sound Through Touch", the activity at https://adrianfreed.com/touch-sounding-headpieces.html.

Write a program for an ESP32-S3 (an M5Stack Capsule) in a crocheted headpiece: four conductive regions, each wired to a pin that can sense touch (G1, G5, G9 and G7 in the examples), and an M5Stack MIDI Synthesizer Unit (Unit Synth, SAM2695, U178) taking serial MIDI at 31,250 baud through its Grove cable, which plays the notes through its own speaker. In the examples the unit listened on G13, though M5Stack's documents point to G15: try G13 first. M5Unit-Synth's 1.0.1 release numbers its instruments from 1 (GrandPiano_1 = 1 in M5UnitSynthDef.h) and sends that number unchanged, one too high for the wire; its GitHub master numbers them from 0: check the installed enum, and subtract one only if GrandPiano_1 is 1. Use ESP-IDF's touch driver (driver/touch_sens.h) directly: create every channel before enabling the controller and starting continuous scanning once, and set a measurement time limit; with esp32 core 3.3.11, Arduino's touchRead() on a second pad stopped the controller, and every channel froze, one of them at a plausible value.

At start-up, play a rising two-note chime (C5, then E5) that means hands off; start the touch controller and wait about two seconds for its readings to settle; then, in silence, measure each region's resting reading and noise; then play the four regions' notes for about two seconds, still hands off, to learn how much the synth's own sound moves each reading, and while notes sound compare readings against that playing baseline; then play one higher note (G5) to say the regions can be touched. Make each region a gate on a continuous arpeggiator that runs on its own clock and at every step plays the next region whose gate is open, at full velocity. Open a gate when the rise exceeds both a fraction of the region's resting reading and a multiple of its noise (the noise alone is not enough: in the build a hovering hand read 100 to 200 times the noise, tethered), and close it at a lower threshold. A firmer touch raises that region's note an octave: judge it against the region's own threshold, since the regions differ several-fold in sensitivity. Tilt sets how many octaves the arpeggio spans, one to three: the angle from gravity as it was during the silent calibration, read from the Capsule's BMI270 through M5Unified's I2C_Class and BMI270_Class only (include utility/imu/BMI270_Class.hpp, which M5Unified.h does not pull in; the BMI270 is at 0x69 on SDA G8, SCL G10); do not call M5.begin(), which in M5Unified 0.2.21 drives G13, the synth's line, on a Capsule. Give each region its own note and each headpiece its own set, picked at start-up from the Capsule's MAC address so that both run the same program; ask me for the notes, the step time and the thresholds rather than assuming them.

Libraries to explore:

Before writing anything, ask me what I am using: the board and its pins, or the software (such as Max, Pd or Python), and check its documentation for what this needs. Put the pin numbers, ranges and other settings in one block at the top, each with a comment. Say which of the libraries above you use, and why. Start with a test that shows the raw readings, so that I can check the wiring and the ranges before the rest.

This activity by Adrian Freed and Tess Buckley is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0): you may share and adapt it with attribution, for non-commercial purposes such as personal projects and teaching, and you must share adaptations under the same licence. Product names and links belong to their suppliers.

Design strategies: