This is the Incandesynth.
I started with a broken desk lamp. I set out to create an expressive, gestural musical instrument with it.
This lamp makes music.
A desk lamp like this one is usually pretty inconspicuous. It’s not the star of the show. A lamp is a utilitarian item that stands to the side, mutely and discreetly. But not this one.
The Incandesynth is a digital musical instrument that I created as a part of the Digital Musical Instrument Design course at Northwestern University in the spring of 2021. The name is a portmanteau combining the words “incandescent” (as a nod to the lamp as the form factor) and “synthesizer” (an acknowledgement of the digital nature of the instrument).
I had a desk lamp that no longer worked. Rather than pitch it, I thought it could make a neat musical instrument. It’s sturdy and will stand comfortably on any flat surface, which is nice for playability. It also has several points of adjustment, so I could twist and angle the different sections of the lamp in a variety of ways as I built out the functionality of the instrument. Another reason I was drawn to the lamp was because the lampshade is pretty similar to the bell of a horn—like the trumpet.
I knew from the start that I wanted to use the “bell” of the lamp as an expressive part of the instrument. I also wanted to make an instrument that would largely be “touch-less.” My experience with writing and playing music has always been somewhat constrained and disciplined. Making a gesture-based instrument would hopefully allow me to truly just play…and not obsess so much about the theory and structure of the sounds I was making.

Watch and listen as the Incandesynth is played.
You’ll hear a funky, punchy, sharp-edged synthesizer that can also be played (to varying degrees) in a manner that is spooky and ethereal.
How does it work?
The Incandesynth uses two sensors: an ultrasonic sensor and a photocell. The ultrasonic sensor collects data based on the user’s hand placement and outputs a sawtooth wave based on a preselected list of MIDI notes in the Max patch. The photocell adds reverb and decay when obscured by the user’s other hand. Take a look below to learn more about how the sensors are manipulated and used in the sound output.
In addition to the sensors, I also have a filtergraph~ in the Max patch that is randomly ramping to different center frequencies every 1.5 seconds. This adds some subtle dimension to the output without requiring direct intervention/interaction from the user.
Pitch control.
The ultrasonic sensor is mounted to the top of the lamp’s frame and is aimed down at the base of the lamp. The audio signal is only enabled when something enters the field between the base and the top of the frame. Moving something (i.e. your hand) within that field will produce different pitches.
Timbre control.
I included a filtergraph~ object in the Max patch. As the user plays, this object randomly moves the center frequency from 0 to 500 Hertz. It changes every 1.5 seconds, and ramps over the course of 1.5 seconds every time, so it’s constantly in motion and impacting the timbre of the sawtooth wave.
Reverb control.
The photocell is deep inside the lampshade, or at the very back of the “bell.” Obscuring the photocell (aka increasing the darkness) will increase the decay and the prominence of the reverb on the sawtooth wave from the ultrasonic sensor. The more the bell is “muted” or covered, the more the notes will bleed together, overlap, and linger.
How did it go?
Overall, I’d say I’m happy with how the Incandesynth turned out. First and foremost, I’m glad to have repurposed an otherwise useless household object. Waste not, want not, right?
More importantly, I think this is a pretty successful touch-less synth. My hope in creating this instrument was to get away from having a constant focus on notes and theory. Instead, the music comes from pure exploration and play. It takes experimentation—lots of trial and error. I believe anyone could pick this up and create something through play.
I also like that every performance on the Incandesynth will always be unique because of the randomizer filtergraph~. It’s neat that the user doesn’t have to make all the decisions as they play the instrument. It’s also a nice safeguard against perfectionism…no matter how much you practice and repeat your work, the output will always be different.








Everyone’s invited to explore and play.
Want to build your own Incandesynth? Start with a “rescue lamp,” and feel free to use the resources below.
-
<pre><code>
----------begin_max5_patcher----------
5085.3oc0cstajibc92y7TTPv.Y2DMJ08KN9OAIFvFHXgQhyOB75rfpaJItK
ax1jr2YzZ3E9gvOg4IImpJ1Z5tYQ1Eu0dWMCjDunlmyoN04x24TE+yu+c28X
4mRquC8KQ+Az6d2e98u6ctSYOw6ZO9c2sK4SaxSpc21caJ2sKsn4t68WqI8S
Mty++hZdIsNEkTkZ+MzlCUUv8g1m0rAt.50xC+C44nWRSpPe7kr7Tz97jWyJ
d1c2YE0MUGN8CNOqHcS4gB2mtn8j6qfGQQSRSVYw2D9NRfGG7o9MUoaZ77EU
nevPjREQInFpQp02iTb1C36QFi86J9CXzer8Sn3vtrh7zFG6RZOY1VGSV932
9Ah3tOemkGZNdqX6I+Ku+81ucejByco00IOm1QXJzHgDIXHAAw0HtDw4Hl43
84epMutO0yg2c2aTe.9mXTOf0LFEyHFofJDJfkIxGX1uzZgTZTvMbOhvbhCJ
sOwAsq3PZBKNHSPbzmt0l7rMeGpoD0jV2fpR+9zpGCpmP6WJHYD2PMwOt69N
iMhwcIe4F26iQ+8+leM529U+a+qe0+9u9+5+4q98+lut3KRP6KqZ1kTzjlb.
U9D5quKqXSRw1z5MvGwWeGB9c3j0uVXm.l8CoUe8ce4fRG6i6aOT2j8T1F2T
oS43.hNlR9.UfwXlgwLXoPH.kDwCF6WZA1n0fZDwJOEcDqOUVz7TxlzSeFAE
0O97lx7xJ+iD+fRhUZNivTTA2bObFo8IAz.kHjZoUc09vHm7rNYzRnV+QqeW
U4yfAoZPBhnnj7FzWnQYMo6peS9GZ5HHL4VImxPXZFXHBzJETGuHcxOJdDpk
B55aNxa+gS.SPHlDw.aQTDUMQyQg3eqE3oY+QvVe6OOkk2jV8bUx9W9QTELe
qbW9qnMutIGbr07RU4gmeAYmMlVgdpJ8OcHsXSFbIqgpWAMTApFlEVrsF8wr
lWN6DUI61Cxm6Q0kd2lm+o7JJqFA2YSVwgjb3gV+R1SMVulaOTY+g0IZvI6x
9GADdafDrFDzvWfKQJSf0bgcRkxMFnUWSG7r4qtoh3GLbBQI4JrPqgOx6cyi
0Rphebtq8TAmvxMq+D15MIPbGf2j86S2h1+RYSIDNQcYEZaRSh0AC4CDpB4t
u+E+O1h.hY+gFT1t8IaZpQaS2j7JBlxaGt79hf+xx7fiBp9GELDpysLiwYTo
hywPXIRM+A8ktkMZ+v0XLKv0qu3zJHOSJlUXETNM4jFvmzghcGZR2B9nN8t.
SlGxAAYVAHKeJA98VY5GrAIh1k87KMnMujT7rORx7xOh.l3QXZw1z8oEas58
sx+b2MCeRveYEpdu0QyHGGzRb2wAglEH7HAdBCDxakdsW5+TU4NDHSqRpKKx
1fZE5ftcBnpBV2s5y1CKKRsgSjfp2AVVf6KGDIVWYvIOFzdG+YwJToFmmLA2
YW2F.5nka3aqCb9jcdq4TenPPH1bpxnzh2zUFkqbl7FjYAEwMHtx4PGCg1AQ
qgn5kyUtVxCHMlficlZ8crepB.a5Qu0ZfdJC47aSxj9LIMtLIotv33K3PNEO
0n2Xha6fLc5CxX4jGjo+bCwfP7OUO4AY1scPlL4AYIDK.gCwqh0JBQR4joZJ
GeaFxEGGu4GyMitbC4RH+ftRiIn.PvKmBPeRCBU9vzXclzGdBgQdPBeYvJoT
CGpHPDL3wqtSVNtsH8ivGYGl0mCJPb3dY4LaLZCv0btydllIciwRNw.QqQgD
zTrQyxzEDDvlxmeNO8ySbgLjSgTh+lzhjGycbGdl7rRZbA2ygzTETFQYwth5
hTkNJjfMxUejF38pRqIn9GoeDxTJpgZLqajYxILa1vW+oy+BxvLcTLLDJpcB
sRQMRB7OAnc6QZajL75Oi1lXE3hAiQjAX56Gwnsg2UI2CyV+LOK.yq6AIA5B
581W5HeR90uUBoJGD.tDZsG94LYcY9mraO5wj5v46yFH0TaBJWVNHNg9fyUu
CHKtZDVAn2.jlagY5+XfvYTXQKLFfobpAKkV9gH7k4Qw0BkASETELmmO53Yn
3aFS9eN.SpgvTT1JQfUDWgrXpEjII2BHHS9XSYYyKnj7xhzwVDKviS2JwPHJ
rGGWpgqTVjWMG4+QUgKxM.yPGxReFd6QK.BDlJAhWyYmWywFB7ePe.3elSlf
s0OBlNPM5wJMXqeH7jo5gSCwpxIVeaXEyHEv2sN30cAOlZrF1Fk+NyMHZcxT
YbkOH8Ugw0qtadGj4RmWdJaZR.kR7.4RI.7itR.Mdzd6oTx5O3ievFoyDCsy
mchT59Ae7AyQo2hjQe.IlXxnFhUssk+lfNLkXtIAq9iHb+4aWm8bQRdTgqx7
CnJehHb83GPIxkK.0GOzzTVLojOuNm5KChjXNlo4Hy2jRVPzRWSN83jzYvor
UWI9e7Gul56vMUUfHwLbxjm0R94wPqDy8sQUf1GaRCz3agO2Me2rFrkXuMJQ
.l9ZvgFLYp0OPi7xjstAyoORyEdlleI.gB8DXY0OgCpDRlvCP1xDFIEKuAL6
DYUpGBTFtqp7Dv5lXtAUo01Ti2i1drSor8631rmd5fqXOVvhdJ6SoaQewioM
eLMsv1nAtaBzG9x+u+5ey2bIeg8LvGQdVygstNenz1OD44nWSdph9k1FsZWR
Q19C4IMvm1iudZSqLbWI2uECsw2Wez3Zy3EtmpH5aPymz1oNdorq+1tlbid0
YhAL5PHjI.nAa84erquw9LJfCvULbmZsHGOJU5a.VbIEu1jsKss27equhrG1
s2hfYNOWklX6awFPYvAb+816ElZBWqnD48wByEKKxeE8DLqy1CWVkkrhSv18
CMkeHOY+Grv51h96GyfYn6qJ2dXCbWfFz1Q2si9vRjGqeuLt1a7TItbAAFrG
+00VCSHXrc3xdXqv08WuPWDH.7NQm1hwslM9Z.HVvZ.bZyzNoXTyypcBgmfX
bt1ub7dOSfAZN6Rp9tzp5iMatq7uXpnsIrYpGDQThEiMaU6WRoRnnXJw0W7d
8La6RDrI3wgD551StsbWRVQagJ7zkDeVeykW9b.hGe7Gu8ydbIX5IExi8xWg
e34roB0oM9y19DgHEfmw81ewwoNFF9FlQ3DtcUlnobmWIEVQvRH2drlaX26I
1d9F5OtbyldL6OcHY6Jjfm16HmLbLgx.xc5xEmzyfJxzl57YbYFFjUHIuNPL
RvDRWX1o9Et.+T0scfKhLaXAEo4eeRUVh2FMN1EZCd4L1r5hJkT72QQkvrbh
pdlJ4hNNBf9hXJkRJ61o0ZkoaQ5kjg8QIBHJ3Kmnn+x0vdPSkDk.xUZv5NO+
luxVfftU0ymhF2LlrQWevF10T9zTWahArxpL9ZWRGOLCqeC47C4nhlWFrEMl
.G6g6moFO52hU2BPC5QT1v3HESHogVEpvzdmmzqfwRPfCW+tR42cxhVwtFrp
Jyq8nEf.RvxYiL6VMwzspsBFDMgchtwpTfILIw1kkSn782fj8+u6j72aBFek
8g741Wkt05kEn1zsvIfe86Sxq+kisQcB1RpVT.tLjahesbOpt1gbCVMumtfa
NhME7G0fDHPfbvt1AKQfvxlZ62l0XCvNjHhOfHh3aGlSaxAd6p5Ch6PZW6rR
qeCeRexQgy.4lpNsExTKoXyas4UxSV7D7hPKXAV36dSWZrvwoC4fkXvcaaHU
aJcXNQQYTAgMxsGfEbRXcd11OqSLTzqVDRc1drAWNs9pH5PPBIgHBcaWY.l3
f+JBiFs.ScaJW8RTqZJk3JPvY9vrcjR2pBwGOT5qe7q+BxIwst.ApAo46F1E
bNXNVSU3HJHVnfXVcUf+4A5GiqE4hQ10HqEhH7kNsmPohX2h3UqOra5wqFh6
41U24kbOe7Ka.9pG6pk6apRS1MT+3LIQfHfHPN932Eq+r9ItOMX8kntbFea.
6SoRgL9pqqWm7wU.yOrxCPAUIkTrVZ2MRlPlZD15alyuPvOVEADAM0E1q1GZ
zYN5D9hUQHWYvWFh2Wv1aI8G1lr4GGnbaBKNS3NcIsg2c4c46wA62iu6XWvZ
Jt5vSFtgwCFW2J.OoY8Mv603O1QsfFOYp6KMg6q1P6GGDJazy.L5avZf8y3U
70ECL+vX6gKGWQo1kGDQXQbvNmWCw0HzJAkwk39B1mMlzgLKYoScqOnIMcIp
v6CqA.CyitSYBkNMls5SF9mlbLtAYcg1zVECMVBZDZyz5GJBd8c8+q9UH1z4
dAIDtbXu+BlgJzBEjjiGPtQy8KXW6NdHA.6gSDRfvlIBVZqfXBHGE3k30G59
5zbDDJyUgxd3daVq5FVLE6WAVXgRS.8GgE9D9DhQjrfn.r1lKoXukQtjSkbs
zHcAF2lWDiH.EHIQMQykD5OgMWFl0gvHcdJTLoTnwF4DMWdCZ9cvboZxbOg2
VFCplPgo6FajzLhGFLAWyvJNAhpbZlKIquyhCE6S17cHr+ewzrU2GcqWE19P
K9nZEDLNj4AHy78f1nmUziuD9hBYxyUkG1in3oCYRXo.q0JoBanFAUQc63cS
PEQt94U.9JfbJtpuhn7YHj9s5OHnZIDFow4G0u77YP31RvLh1FcAeBKOeRO3
myVPDjJ2mVLsjpjXgyTAD.ogY67UL2mioi2kFtgArNna324XGoZfd8ay9M4k
edKFXb7dnQ8Pb9TBS3mG62J1Ra2EBw.abvSYyWgRtUa9JyYqWIjcvPZA9tFc
bZAza.fhoUYI4nGsaxBzq2WxSPVn7YYIEJCkKEThEw0w6XjFQ10tOMW0.uXG
u2Qr1yet.pt7P0lib3QPbPeln1lV2jU71Nn8e3jLYN4t1ksceIHeZelJMu6B
XWQbFAL9dT+7izXWyvYHrGDWlMl6Zu8jJq156Q2vfqrrbocg+fHSgKssAnn8
ntzNc8ocaqBhniiz86moJkmCN6Hseq1PYjsCPm1ciRdHljLKlzsH8uJWdgnH
FtTp77UuWqmdzNVB2gA1UI7KYunnb9.TNe9Ttss4utDmNzTBaECcfu60Zn98
Y6KNzztebQBUHJoYY3CxU3CawZFfO7J+DHJbWsSvtJB5ObtTGOFoLaHsCJDv
YWmLD+TTd6F05kG5k8BPCWzsrQJyxOCNdFkrBLpDShmQmouDZLLJe7inXb6q
Jgdu3hOlQi00xzXEtuemu3PC06wQv5djtcqyvp21ss5YqvnYrR.VeR.MD5qo
y9VjWKUiUAVd.dGnyhriNl.dujslzs7HGIaHNFwZP1xXD2zVGSy6Igms4HMD
dZGOu1jFNID1NGp0CXNRqmsDTXls+D6alj.7UKkSOmQNdXD9SlOecMu3WLn1
guzAV2RsCPp1WzAmenw3yGIzHs6Zykq3ylqBNW7nE0vpns9JlOkeUKLlgGOB
XD2ztKBDRGzcs4R2QP1C5PCx0sMN0yZ.81EgZeWalTcLBa1noZAwzKU6t1Lo
5Xx7w0lTikt8qUNh1zs0jcWalzM0DEZ.CR3so9n8j5oGMWhSFiKxQGRltciq
p2qMWxNlIdT4noakV1Kc6t1boaZLAJ31P1FPYP61FBTdDOYmbzboNhYAnNL4
3V8zRScQoqRFL26V5wvj8iR.aIn0nTPIlgkjNX9ZQloUttDXw31b3h.EIbDZ
gGotSNZ1TGIVnhF2jair+I2tqMaBOpI23AgUTZQo1tho7i19cbD2Qyl5hf3N
lwz7eRjXR6perYHgVqq920rj1kh2YGoN1gLr.FtEyOjoKG05Qob3QV+Xo2Ey
QfvO6HseuALbN930.H7nXK8BwVAw.HLaguAr0vPM8Fe4TrD9DTO+ni0sHH7Q
gqaAcl7kZ1ZgB9OA0BUyVKLd15FpEphxefbgXLL1kU.dUT7jwNgpe.tZou1I
MZ45fUYLfLqFeBM9cTi12uvmeDAiclCLveW2U.LVuBSXhQuRO5heDCSBAxGM
SRWcljL9Ax18dUFo65yxcsk1Jf6cbTD4+yiH++1xle5QysfxQUHMpIFvI7ue
6N8nYSbwDyp68qy0oN8YT2BfM9kO2dbFaiyUbEhy3ayWIk+fRKTDN0+cWu7v
lOLktsevqa9dPnyfD75LYhyD8CTIaEJgXbLxkYeGEq3al31bt4Z0JXIPniIw
HxvkmmKCP7J5IIg6NZtZLLZzfsLxrvY39yBmgW.JmDEkOrFR.rfsQh4HbeWJ
08ZKtxdTbhaYg2ui9vrB2OF.gB2A9K4Yqe0kR0mFE58CqNwMp.KE2VWh8ds4
pNQiJNDJa7Ttb.JWtDTdTpOlAS+PvCnhztgkdrernxkO3uHIdJczDuG1nfRc
yJznRQxHD0DYDgcqT87dj2rBsgDIpRCbkoAAn0UeR.QOe5VR7uvCOeMXr5Tt
JJEGyXk3z9zabWYQnZxUo5ACYWn4cV2G9HMCORvVBocTYoMbfkA0Enh90SbW
a1TtHJJmOdJ2+5Vxt0jYtbwJ5t1hP4WWWYv1lx1YAtWFoXocwCyHZ2hLucKz
JzhLkYVHJmd00wfXXi5TOrwJpTQYFCUZaTh1WvxAvdUr.MHrmxYWkxGLlRAX
dqi1R6laiETht6CBpkfx4QomObiqDRWlcrXv98ltKzVVBJOtfeGthlAotiM6
deWa1TdTA+JzimxOV8t.ohyLKAkGWXWxwaUjNf8bpXgnbx7nbHOu+NP43n7D
gGzSTXKes1VBs3TVDaK3nrsfYieY0Pn8urZHK.NMQgPvvVVBBEtg2eCbYtrJ
M90EXx98eeZUc6C2Qx2sK4a8uMlbueNfGcg+P2JPz9BqN638SbKR16Rp17RV
S5llCUN97tOI8amA2sqDxjo3PVaNYfzBdlt0eYQxtz58sucPbKSy2+Wd++Of
12JVC
-----------end_max5_patcher-----------
</code></pre>
-
#include <NewPing.h>
const int PhotoSensorPin = 0;
int lightLevel;
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 40 // Maximum distance we want to ping for (in this case, 40 centimeters)
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup()
{
Serial.begin(115200);
}
void loop()
{
unsigned int uS = sonar.ping();
int b1 = uS >> 7;
int b2 = uS & 127;
Serial.write(b1);
Serial.write(b2);
lightLevel = analogRead(PhotoSensorPin);
b1 = lightLevel >> 3;
b2 = lightLevel & 7;
Serial.write(b1);
Serial.write(b2);
Serial.write(255);
delay(50);
}
-