Wurlitzer Key Note Visualizer Replica

Miniature, portable build of Wurlitzer's elusive keyboard teaching tool.

Similar projects worth following
I am building a replica of Wurlirtzer's Key Note Visualizer.

It's a simple and beautiful concept: play notes on a keyboard, and watch them light up on the display. There isn't much info out there about this device, but I gather that it was originally designed as a tool for piano teachers to show a class of students what they were playing in real time.

It's unclear how the original visualizer connected to the Wurlitzer keyboards, but my build will work with any MIDI-enabled device. It will be battery powered and will communicate via Bluetooth, making it completely wireless.

  • 1 × White acrylic sheet, 24" X 48" X 1/8", 55% opacity for faceplate
  • 1 × Clear acrylic sheet, 24" X 48" X 1/8" for LED chassis
  • 1 × Can of orange spray paint must work with plastic
  • 70 × M3 machine screws, 12-16 mm long
  • 70 × M3 nuts

View all 13 components

  • Done.

    Guy Dupont06/18/2020 at 01:25 0 comments

    Thanks for checking it out.

    • Enjoy the demo video! That's me jammin' on the OP-Z at the beginning. My friend Jim provided some additional lovely sounds at the end - check out more of his tunes on bandcamp.
    • Arduino code has been uploaded.  I added multi-channel, multi-color support at the last minute, and now I can't imagine the build without it.

  • Finally, An Enclosure

    Guy Dupont05/13/2020 at 02:22 0 comments

    But first, a video preview of the build in action! 

    The face plate, chassis, and firmware are just about done.  Here's what that looks like:

    Other misc. updates:

    • Shortly after taking these videos, I completely ruined the face plate. I tried to spray on a clear coat, and the orange paint below wrinkled up across the entire surface (picture below).  Does anyone know why this would happen?  I know that shiny acrylic is probably not the best surface for paint to grab on to, but it had been dry for weeks. I read somewhere that if you add a coat that's too thick, the top and bottom of the freshly applied paint will dry at very different speeds, introducing some pull on the surface below. I will go with that theory until someone offers an alternative. Fortunately, since I had most of the designs/materials ready to go, it only took about 2 hours to reproduce a new face plate.  I only had to wait 3 days for a new piece of white acrylic.  I actually took the opportunity to order a slightly more opaque sheet. It looks better in almost every way, though edges of the circles produced by the LEDs are a bit less defined. I'm admittedly kinda psyched that my decision to screw the chassis on to the back had a chance to pay off.  I was able to 3D print and glue a set of small sockets to the new face plate very quickly.  No big deal in the end.  (And, yes, I skipped a clear coat this time around)
    • I decided that a wooden enclosure would best serve this build, and given the whole pandemic situation, I figured there was no better time than the present to learn how to build one myself. I've worked with wood before, but mostly in the context of helping my dad build larger structures like decks.  The detail/precision demanded by this project was a little intimidating.  I made it as easy on myself as possible; I purchased a Shaper Origin.  Don't worry, I'd been saving/planning to buy one anyways... just not for a few months.  I'll probably do a separate post about the enclosure after I convince myself that the design actually makes sense.  It sure looks pretty right now, but I'm still at a point where things could go horribly wrong.  At a high level:
      • Got some Walnut stock from Rockler: 1/2" thick X 5" wide.
      • Modeled the enclosure in OpenSCAD, and exported a projected 2D view of each side to cut on the Origin.
      • Made the cuts, including pockets for inlaid power switch/jack and slots so I could inset the face plate.
      • Added 2 coats of Minwax Tung Oil Finish.
      • Threw an old guitar amp handle on there for the vibes.

    (All photos taken with the original face plate, and before finishing the wood)

    Top of the top.
    Bottom of the top. I cut pockets for the handle's T nuts because A) the included screws weren't long enough and B) I wanted them to dig into MDF rather than the raw walnut. The pocket on the bottom is to accommodate the chassis.
    Disassembled, literally moments before ruining the face plate

  • Design -> Assembly

    Guy Dupont04/07/2020 at 21:10 0 comments

    I have learned a ton since my last update, but things are moving in the right direction. Here's what's happened:

    • I've finished the CAD for the chassis, and have printed all but a few pieces. I ditched ABS for PETG. Folks are not lying when they say ABS is a pain to print with. You can find the updated files on the repo. The only thing that's really changed about the design is that I've added sockets with threaded M3 inserts to receive the stilts on each of the main chassis pieces. The stilts have M3 inserts that line up with the sockets'. This holds the everything well and adds very little strain to the system (regardless of how you've got everything rotated). It also allowed me to minimize glue usage. Glue scares me.
    • I've wired up most of the LEDs! This was not a smooth process. All
      seemed to be going well when I first hooked up the first chunk (see photo above).  I alligator-clipped my power, ground, and data lines to the leads of my lights and fired up the ESP-32.  As expected, the lights danced along with the MIDI notes I sent to it via BLE.  However, I only ever fed it a stream of single notes - no chords. This did not dawn on me until I had wired up most of the other lights. When I finally tried driving the entire clef side of the visualizer, I noticed a good deal of flickering when I played multiple notes at once. I experimented with different power supplies, different LED color/brightness settings, and different sub-sequences of LEDs, but I still could not make sense of the flickering. After hours of madness, I discovered that the manufacturer of these lights "highly recommends" putting a 0.1μf capacitor between the power and ground leads of each. I had definitely read that and ignored it when I placed the order. Never again. One eBay order and five days of shipping later, I was back in business. (I'm still only putting the caps between ~every other LED. Please let me learn this the hard way.)
    • Here's a closer look at the assembly of a single chassis piece:
    Step 1: Insert LEDs through backplate
    Step 2: Align populated backplate with main chassis piece
    Step 3: Secure with M3 screws/bolts/printed barrels
    Step 4: Profit

  • Chassis Update

    Guy Dupont03/22/2020 at 14:26 0 comments

    In my previous log, I mentioned that I'd be laser cutting a chassis for my hardware. However, COVID-19 has temporarily eliminated my laser access, so I am going to trying to make do with the 3D Printer I have at home (an Ender 3 Pro). Rather than cut holes into a sheet of acrylic, I'm going to print flat slabs of ABS with holes baked in. And since I'm using OpenSCAD, I can programmatically add standoffs and such at no cost. This will save me some glue/screws later on, hopefully. Worst case, if the prints don't work for some reason, I can generate 2D projections of my files and quickly revert to the laser-based plan.

    First Pass

    Using the vector graphics that I produced for the face plate, I derived a master DXF file with 5mm circles at all of the locations that I would need LEDs to sit and shine behind it. I added accompanying 3mm circles for M3 screw holes. The screws would be used to keep the light "barrels" attached to the chassis, and also hold a thin back plate parallel to the chassis.  This would keep all of the LEDs locked in place. 

    I broke the master DXF file into 5 segments, so that each could fit on my printer's bed.  There are 2 segments for the clef side of the visualizer (top and bottom), and 3 for the keyboard side (left, center, and right). I created 2 SCAD files for each segment: one for the main chassis piece, and one for the back plate. Though I need one SCAD file per printable piece (10 total), I was able to consolidate much of the common code between them. Each file essentially only contains a pointer to the corresponding DXF file with the holes in it, and a list of (X, Y) coordinates for standoffs. This way, if I want to change any parameters of the total build (platform height, standoff circumference, etc), I would only have to change the code in one common file. I also added a master "assembly" SCAD file that dynamically loads all of the individual pieces into one view. This is the only file I kept open with the OpenSCAD GUI, as it would show how any individual change would impact the whole system. The way it's set up, any change to any DXF file automatically propagates all the way down the final assembly. Parameterized CAD FTW.  You can see the structure, along with a bit more detail, here. As of the time of this post, the only files included are for the clef side of the visualizer.

    Here are some renders (again, clef side only):

    The yellow and blue pieces represent the top and bottom of the chassis, respectively.  The green and red represent the accompanying back plates.  The slits are to allow the leads of the LEDs to poke through. The lip of the bulbs get sandwiched between the front and back chassis pieces (between yellow and green for example.  The orange piece is the "barrel".

    Here are some shots of a small test print with bulbs and screws in place:

  • Overloaded first log

    Guy Dupont03/17/2020 at 17:38 0 comments

    I've done a bad job logging, but it's never too late to start.

    I'm breaking this project down into four components:

    • Enclosure - the case.
    • Face plate - the front of the visualizer, with the lights and graphics.
    • Hardware - the electronics inside, and the bits that hold them in place.
    • Firmware - the code that drives the visualizer.

    Here's where I'm at.


    I've got nothing here, and I will likely regret not thinking about this harder now. Though the original design uses a metal enclosure, I would prefer to make something nice out of wood. I'm going for vintage church-hall-bingo-board vibes. I don't think I could get it to the level of polish I'm looking for with my current skill set.  I will reach out for help with this soon.

    Face plate

    The face plate is done, save for a coat or two of clear gloss. I'm very happy with how it turned out.

    I ripped the graphics by pulling some photos from this old auction and using Potrace to vectorize the black bits.  I did some pre-processing in Gimp (removing background and toning down colors to assist Potrace) and some final SVG cleanup using Inkscape. They're still not perfect, but I kinda like them that way. Gives a vaguely "hand-drawn" impression.

    I'll post more detailed assembly instructions when I'm finished, but at a high level, you're looking at a translucent white sheet of acrylic, stenciled and spray-painted orange, and then decorated with vinyl decals cut on a Cricut Maker.


    Each key on keyboard and note on the staff will have an RGB LED mounted behind it. For each of the two sections, I will be laser-cutting a "chassis" out of clear acrylic with precisely-placed holes for each of the 5mm bulbs. I will be surrounding each bulb with a 3D printed barrel to prevent leakage. The barrels will also collectively act as a standoff between the faceplate and the chassis. By pressing the end of each barrel against the face plate, I will ensure that the light will shine through as a well-defined circle.  I have not yet figured out how I will attach the chassis to the face plate.  It may make more sense to attach it elsewhere in the enclosure. TBD.

    Here are some photos of my chassis prototype.  I have only mounted one LED so far, and I used a thin piece of cardboard in place of the acrylic:

    ESP-32 Driving Lone LED
    ESP-32 Driving Lone LED
    3D Printed Barrel
    3D Printed Barrel

    The LEDs are driven by an ESP-32, which is acting as a BLE-MIDI peripheral to maximize compatibility with keyboards/other musical devices. And that brings us to...


    I'm using the Arduino core for the ESP-32.  I found some great libraries that have made my life much, much easier. The basic functionality of notes -> lights is already working well.  I will get the .ino file hosted soon.  Here are the libraries I am using:

    I'll be starting to push source files to the linked github repo starting today!

View all 5 project logs

Enjoy this project?



Mike Szczys wrote 03/16/2020 at 19:25 point

This is awesome! How are you planning to get data to the display? I could see it being a MIDI device with the added option of recognizing pitches from a microphone (although to me that one seems like a difficult coding problem).

  Are you sure? yes | no

Guy Dupont wrote 03/17/2020 at 20:08 point

Hi Mike! Thanks for reaching out. I added a first build log that should hopefully answer your question.  I'm running an ESP-32 as a BLE-MIDI peripheral.  For the microphone example, I could totally do the pitch detection on a laptop, and pipe the MIDI wirelessly to the display : ).

I'm debating whether or not to add USB-MIDI (or even plain old 5-pin MIDI) to increase compatibility. Scope creep!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates