Incandesynth. Desk lamp (wood with black shade and base) bent into a strange shape with wires and sensors. Digital musical instrument.

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);

    }