TeensieWI woodwind USB MIDI controller

Minimalistic and easy to build USB MIDI controller, inspired by the AKAI EWI, the CASIO DH-200 and my own MiniWI.

Similar projects worth following
Minimalistic and easy to build woodwind USB MIDI controller with just a Teensy LC (or 3.x) and an MPX5010GP sensor, using the Teensy built in touch sense for keys. The key electrodes are made from self adhesive conductive tape and the housing is just sheets of 3 mm plastic or plywood.


* Knowledge in how to to install and use Arduino and Teensyduino to compile and upload the firmware. I'm not going in-depth on that.

* Basic soldering skills.

* A suitable synthesizer software. I recommend Thor on iPad (or in Reason).

* Knowledge how to use softsynths with MIDI and how to configure them to work with breath control (CC#2) or acquire patches that are already setup for this, like the presets that Bernie Kenerson has made for the Thor softsynth on iPad.

Short demo snippets using the TeensieWI together with Thor:


20mm top and bottom housing panels for 3D-printing. I printed with 0.2mm layers and 90% infill set to cubic.

Standard Tesselated Geometry - 727.72 kB - 12/12/2019 at 01:45



Thinner 10mm top and bottom housing panels for 3D-printing. I printed with 0.2mm layers and 90% infill set to cubic.

Standard Tesselated Geometry - 728.70 kB - 12/12/2019 at 01:45



Version with DSP lo-pass filter for breath signal instead of simple smoothing, for faster response.

hex - 84.64 kB - 05/15/2018 at 06:00



Side pieces for 3D-printing. For use with 6mm M2 standoffs and laser cut or carefully hand cut and drilled perspex sheets from template.

Standard Tesselated Geometry - 7.50 kB - 11/22/2017 at 17:10



Side pieces for 3D-printing. For use with 6mm M2 standoffs and laser cut or carefully hand cut and drilled perspex sheets from template.

Standard Tesselated Geometry - 7.11 kB - 11/22/2017 at 17:10


View all 15 files

  • 1 × PJRC Teensy LC Can be replaced with 3.1 or 3.2. Contact me for info on that.
  • 1 × Freescale MPX5010GP Breath pressure sensor.
  • 1 × 3 mm sheet of perspex or plywood Cut to two 250x40x3 mm pieces
  • 1 × Conductive metal tape Alu (for less oxidation) and copper (for solderability)
  • 1 × Electronics wire AWG24 or similar guage

View all 8 components

  • Get it on Tindie

    Johan Berglund12/01/2017 at 07:22 0 comments

    In case you've missed it, the T.WI is now available on Tindie as a finished product. If you are interested in getting just the case from me for a build of your own, let me know! I might put those too on Tindie if there are people interested in such a thing.

  • T.WI Examples

    Johan Berglund10/31/2017 at 15:37 0 comments

    GarageBand (Mac)

    GarageBand is pretty limited in how much can be configured, but many of its synth patches respond to aftertouch (channel pressure), so setting up the T.WI to send aftertouch makes it useful here. You can even keep the standard CC#2 active when activating aftertouch by holding the second RH key in combination with the pinkie key held for aftertouch.

    Examples of useful synth sounds in GarageBand 10 are Saturn Lead and Soft Saw Lead.

    Thor (iPad)

    Now, Thor is a synth I can highly recommend. It is very flexible in its controller configuration, great sounding and not too pricey. Also there are lots of ready-made patches for it intended for use with wind controllers. Patchman Music has pro grade patches for it with a bit higher price, but there are other options, like the set by Bernie Kenerson or even free patches for download. The free patches are actually really good, but they lack mod wheel response. The Akai EWI is using MIDI pitch bend to create vibrato, so some patches made for EWI just has no mod wheel action programmed. This can be helped with some alterations to the patches of your own, or by setting the T.WI to send pitch bend vibrato by toggling the MOD setting.

    To use the T.WI with these Thor patches, have it set up in its default mode, using CC#2 for the breath data.

    Seaboard 5D (iPad and iPhone)

    This is a free app from Roli, the makers of the expressive Seaboard controller. The Seaboard 5D app responds very well to aftertouch data, as this represents the ”press” dimension of the 5D concept.

    To use it with the T.WI, we need to set up both the app and the T.WI for it. In the app, use the top right menu circle, select MIDI setup and choose Teensy MIDI as MIDI input. Select Single channel and Bend Range 12. (See their support page for more info.) Set the T.WI to send breath data as aftertouch (AT), pitch bend (PB) to 1/12 and modulation (MOD) to send vibrato as pitch bend.

    Arturia Minibrute (via USB host adapter)

    The Minibrute has a connection in history with the T.WI, as the filter in the Minibrute is designed by Nyle Steiner, the same genius that invented the original EVI and EWI. For that reason, I reckon the Minibrute should be included here. Another reason for it is that the T.WI needs to be set up in a rather special way for this combination to work. First of all, the MB is a bit limited in receiving midi control data. It does receive aftertouch that can be routed to control the filter cutoff, but with no smoothing function in the digital to analog conversion for it, there is quite a bit of audible stepping in the sound as a result. The solution is to use the mod wheel control instead, as it is capable of receiving high resolution MIDI CC. That means that in addition to the seven bits of data sent on CC#1, another group of seven bits are sent on CC#33. That’s 14 bits of resolution. In reality, the resolution we get from the Teensy ADC when reading the breath sensor is 12 bits, and 12 bits is what the MB modulation wheel is sending/receiving, but that it still a whole lot more than the standard 7 bits of midi. We get 4096 steps instead of just 128.

    The breath setting to use on the T.WI is CC1+33, keys LH1 and LH3 held with PB UP at USB plug-in.

    Another limitation in the MB is that pitch bend range when received on MIDI is always 12 semitones up or down. That’s way too much for practical use with an EWI, so we need to compensate for that. The T.WI has two modes for pitch bend. The default one sets pitch bend to half range. Sounds great with synths set to two semitones PB range. The other one is 1/12 of the total range. This is what we will use with the MB.

    Hold joystick right and RH2 key at USB plug-in to toggle this setting.

    To get the breath response you want when controlling the MB, you can also try different curves for it. I’d recommend something in the -4 to -2 range.

    The way to set up the MB is to route mod...

    Read more »

  • New firmware

    Johan Berglund10/21/2017 at 14:06 0 comments

    I've brought over some features from the NuEVI midi trumpet project, so now there is a selection of response curves to choose from, the possibility to send breath value as other CC numbers than 2 (breath) or as aftertouch (channel pressure), and also the possibility to change the midi channel. Even a limited set of transpositions are available.

    To change settings, hold a combination of joystick direction and RH fingering from the settings chart while plugging in the USB. The Teensy onboard LED will flash the setting (in a cryptic way) and then it's ready.

    Crypto key for the LED flashing: fast flashing is zero, longer flashes counts to a number. First the joystick position is shown. One is up/breath setting. Two is down/midi setting. Three is right, for various toggling settings and for factory setting restore. Four is left/breath response curve selection. Then there is the result of binary combination of the three main RH keys. This counts from zero to seven. If there is another bit, like for midi setting or breath curve, this is controlled by the first pinkie key. This key also controls aftertouch breath on in combination with the breath cc selection. The pinkie keys have their own separate flashes, either zero (four fast flashes) or one (one longer flash).

    Example 1: Setting midi channel to number 11, we hold pitch bend down on the joystick and finger the combination from the chart – RH2+RHp1 – while connecting the USB to power. The LED will flash 2 - 2 - 1 - 0. (Midi channel 1 is fingering zero, so two flashes equals the value three. Plus eight from the extra bit equals eleven. Then there's the zero for the RHp2 that is not pressed. After that it's ready to play.

    Example 2: Selecting the linear breath response curve. That's joystick left and RH3 at USB plug-in. LED will flash 4 - 4 - 0 - 0.

    Example 3: Transpose from C to G. Joystick right and both pinkie keys at plug-in (transpose -7 to F and +2 to G). LED will flash 3 - 0 - 1 - 1. To toggle the setting back to C, do the same procedure again.

    Example 4: Send breath cc (#2) and aftertouch in combination. Joystick up and RH2+RHp1 at plug-in. LED will flash 1 - 2 - 1 - 0.

    Example 5: "Factory" reset. When you are completely lost in all of this, and your instrument is acting so weird you have no idea what's going on, you can reset to default values by holding joystick right and all the RH keys. LED will flash 3 - 7 - 1 - 1 and then you feel safe and comfy again.

    If this sounds too complicated, it's because it is. You can just use it without changing anything and live your life as you did before all of this.

    To get an idea what the controller is doing at any given time and have a better chance of having it do what you want it to do, a midi analyzer app for your computer or iPad is very helpful. I'm talking about stuff like MIDI Monitor on Mac or MIDI-OX on Windows.

  • Connecting to DIN MIDI hardware synths

    Johan Berglund09/19/2016 at 10:03 0 comments

    Sure there are a lot of nice softsynths to use with the TeensieWI, but if you also wish to use it with hardware synths with DIN-5 MIDI input, you can't do that directly of course. The options are to either go via a computer and reroute the MIDI data, or to get a MIDI USB host converter. The first one is not very practical in many situations, and the latter can be expensive and still a bit bulky. For pro use, I'd probably go with the Kenton converter, but if you just built yourself a €40 wind controller, you probably don't want to spend €100 just to make it work with your hardware synths. Sure, you could just use a serial TX port on the Teensy to get the signal out, but that would require another cable going from the controller. Also, with a USB host converter, you can do this with any class compliant MIDI controller, so that's a plus. After some internet searches I found the USB host mini from It converts USB data directly to serial data, so all you need to get a working MIDI converter is a 5V DC regulated power source and a MIDI jack with a couple of resistors. You can easily fit it in a small enclosure and make yourself a cheap (< €20) converter dongle. So that's my little tip of the day :)

  • Joystick for pitch bend and modulation

    Johan Berglund09/16/2016 at 19:59 0 comments

    To increase the playability and nuance in the controller, I've installed an analog thumb slide joystick normally found in PSP 1000. The size was just perfect, and with some changes to compensate for the shortcomings in this joystick, I could use the pitch bend and modulation functions from my MiniWI code. I've updated my Github with the new firmware and schematics.

    A quick demo:

  • Anti-slip thumb rest wall

    Johan Berglund08/12/2016 at 07:45 0 comments

    Here's a little detail I forgot to mention earlier. To prevent LH thumb accidentally slipping onto the octave pads creating glitches, a small wall can be put at the sides of the thumb rests. Helps a lot.

  • Building another one

    Johan Berglund08/03/2016 at 07:50 2 comments

    I made another one of these, with some alterations. This time I used some smaller gauge wires (some old LVD-SCSI ribbon cable I had lying around) to make it less cramped. I also put wood strips (5x5 or 6x6 mm) between the edges of the perspex sheets and used M2x10mm self tapping screws to hold it together (with some pre drilling and countersinking).

View all 7 project logs

  • 1
    Step 1

    Cut two pieces from 3 mm perspex plastic (or similar) or plywood. They should be about 250x40 mm.

  • 2
    Step 2

    Cut pieces from self adhesive conductive metal tape, copper or aluminium. They should be about 18 mm by 50 mm for the main keys and 9 mm by 50 mm for pinky keys and octave pads. Just make a bunch... but at least 6 of each.

  • 3
    Step 3

    Start mounting the larger tape pieces onto the top side sheet. Start 40 – 45 mm from the top and place the LH pieces with 5 mm separation and an offset of 10 mm from the LH finger side. The overshooting ends of the tape pieces are folded over to the back of the sheet. Make a 25 mm space and then do the same for the pieces for the RH keys. See pictures!

View all 15 instructions

Enjoy this project?



Borrillo.luciano wrote 05/29/2021 at 04:20 point

hello Johan my question is how to eliminate the accumulated air condensation so that it does not affect the readings, nor the correct operation of the sensor

  Are you sure? yes | no

Tord Öström wrote 04/26/2020 at 13:04 point

Hi cool project.
Are there any disadvantages using Teensy 4.0 or higher for this project or is it even possible, which is the latest version to use?

  Are you sure? yes | no

rivaldolima2004 wrote 10/04/2018 at 11:44 point

Hi Johan, my name is Riva Lima, keyboardist and music producer ( Stereokromatik on youtube ) your project its awesome!!!

I had a Yamaha wx7, and I really liked the keys to play ... is there possibility of instead of triggering the notes by contact on the board, to be put in place microkeys, like switches?

  Are you sure? yes | no

jjpartridge wrote 06/19/2018 at 20:27 point

Fantastic project Johan. I've put the electronics into a Turkish wind instrument with a soprano sax mouthpiece and added some brass rings for keys. I run through a PUC+ to give me wireless bluetooth midi to an iPad/iPhone. I have one question would it be possible to make the octave keys work for multiple octaves. So you press once for one octave up/down and then again to go down/up another octave?

  Are you sure? yes | no

Bill Peterson wrote 02/26/2018 at 06:35 point

Finally got around to getting the parts for this and had a question about the mouthpiece. It seems like you can't blow air through the MPX5010GP. I can't tell in the videos but are you actually blowing air through the silicone tube like when one plays a recorder, in which case do you cut a hole in the side of the tube or something so that air can escape?

  Are you sure? yes | no

Johan Berglund wrote 02/26/2018 at 07:14 point

Hi Bill, 

I'm using a closed system in all my wind controllers. That means no air is flowing through the instrument. Instead you let air out by the sides of the mouthpiece. This gives better control once getting used to it, and there's little or no condensation buildup in the tube and sensor, making it more reliable.

- Johan

  Are you sure? yes | no

M J Bauer wrote 01/19/2018 at 13:01 point

Johan, you have obviously put a lot of thought into the TeensiEWI design. It is simple enough for hobbyists with modest workshop skills to replicate. Have you considered adding to the firmware an option to provide recorder-like fingering?

  Are you sure? yes | no

Gordon Good wrote 11/14/2017 at 04:23 point

Fabulous project, with great build details, Johan!

  Are you sure? yes | no

Johan Berglund wrote 11/15/2017 at 19:10 point

Thank you, Gordon! Have you been building anything lately yourself? 

  Are you sure? yes | no

Jasmine Brackett wrote 10/27/2017 at 19:26 point

This was featured in today's Tindie Blog post

  Are you sure? yes | no

arnonzamir wrote 10/07/2017 at 19:49 point

Great project and excellent documentation. It's been a while since I've been looking for a USB wind controller until I found your project. Inspired me to build my own - which is my first-ever MIDI-related project. I uploaded a quick making-of video: 

  Are you sure? yes | no

Johan Berglund wrote 10/09/2017 at 06:06 point

Awesome! Nice work! Cool you managed to fit it in an actual recorder :)

  Are you sure? yes | no

arnonzamir wrote 10/09/2017 at 15:06 point

I'm planning another build, with a better quality recorder. Possibly an alto. Have you tried fitting the project in an instrument? 

  Are you sure? yes | no

afrancis2 wrote 01/19/2017 at 01:52 point

I recently built one and it looks great. However, when I attempt to verify the code, the usbMIDI.sendControlChange causes an error that says 'usbMIDI was not declared in this scope'. Do you have an insight or advice on what might cause this? I have looked into it, but have been unable to figure it out.


  Are you sure? yes | no

Johan Berglund wrote 10/06/2017 at 08:47 point

You just need to select USB Type: "MIDI" in the Tools menu. But I'm sure you have figured that out by now. Didn't see your comment until today.

  Are you sure? yes | no

tim wrote 08/20/2016 at 14:58 point

do you see any problems using the MPXV4006GP , case style 1369-01 ? 

  Are you sure? yes | no

Johan Berglund wrote 08/20/2016 at 15:48 point

For this exact controller housing design, there might be a problem with the smaller size tube fitting and the size of the sensor itself. Electrically the signal will probably go too high for the 3.3V inputs. A perfect sensor, electrically and for fitting pressure, would be the MP3V5004GP. It has the 1369-01 case, and is 3.3V so no risk overloading the Teensy port. Should be a 3.3V version of the 4006 out there too, I guess. Then just adjust the threshold and max pressure values in the code.

  Are you sure? yes | no

tim wrote 08/06/2016 at 16:25 point

Looks great !!

  Are you sure? yes | no

tim wrote 07/18/2016 at 13:00 point

This is a very cool project.  I've been wanting to build/buy a small wind controller for travel/convenience.  

Tim/Austin Tx

  Are you sure? yes | no

Johan Berglund wrote 07/18/2016 at 14:30 point

Thank you! I always keep a TeensieWI in the side pocket of my Kånken bag. Very convenient :)

  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