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 !!
| Item | Amazon | M5Stack | Mouser |
|---|---|---|---|
| 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 M5StampS3A | K129-V11 | 170-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 cable | U178 | 170-U178 |
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.