Close
0%
0%

Prang

Prang is a MIDI "score sampler" for the ESP32S3 and the Teensy 4.1

Similar projects worth following
Prang intercepts your USB MIDI routing and allows you to map tracks from MIDI files to keys/pads on a MIDI Keyboard/controller to be triggered on demand during a performance.

Prang is a MIDI score sampler for the ESP32S3 and (Prang Pro) the Teensy 4.1. 

It allows you to map tracks from a MIDI file to keys/pads on a MIDI keyboard/controller. Any remaining unmapped keys/pads are simply passed through.

In terms of hardware, each platform costs about the same to build with off the shelf Arduino compliant widgets. All told I fetched everything from Amazon and built each project for about $60 USD or so. I'm working on the PCB design for Teensy 4.1 rendition and will be publishing that once it is finished.

The project itself is licensed GPL3 which isn't my favorite scheme, but I felt it was less onerous than making this available for non-commercial use. At the end of the day, I invested time and money in this, and I'd like to see others that use it similarly give back to the community rather than simply taking it, packaging it and selling it as an end product.

One of the nice things about the project is the hardware isn't even MIDI specific. You could in theory use it to intercept an arbitrary USB device and modify what's actually transmitted and received. The firmware however, is set up to do MIDI.

It's easier to show you what it does then to explain. I'm not a musician, and can't play to save my life, but this should illustrate the concept:

You'll need PlatformIO to build the firmware because the Arduino IDE just can't bend the way I need it to bend, such as using GNU C++14.

The wiring guide is in main.cpp for each project.

The software is a bit involved, but much of the heavy lifting is provided by my graphics library, htcw_gfx and my audio/MIDI library htcw_sfx.

Beyond that I had to modify the USB host libraries for each project. The one for the ESP32S3 project was hardcoded to pins it shouldn't have been hard coded to, and the Teensy's host library wouldn't give me raw MIDI message bytes like I wanted, so in each case I modified them and packaged the result with the project.

I've provided Code Project articles in the links section cover the code in more depth. 

Enjoy!

  • 1 × ESP32S3 Devkit (ESP32S3 Project) Devkit
  • 1 × USB Host module (ESP32S3 Project) One of the little "USB Host Shield 2.0" modules. (Not actually a shield, more of a stick)
  • 1 × ILI9342c (ESP32S3 Project) LCD display - you can change this out by modifying the code in main.cpp a little
  • 1 × SD Reader module (ESP32S3 Project) Just a 1-bit SPI reader module. Nothing fancy
  • 1 × Teensy 4.1 (Teensy project) Devkit

View all 8 components

  • 1
    See main.cpp

    Follow the #defines and comments at the top of the main.cpp source file.

View all instructions

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

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