Consider this early alpha software for now.
Chirp is a Teensy 4.0 MIDI processing firmware with an on-device Wren runtime, USB control protocol, and flash-backed script/data storage.
- MCU board: Teensy 4.0
- MIDI breakout used in this project: https://www.tindie.com/products/deftaudio/teensy-40-midi-breakout-board-5in-5out-usb/
- Wren language: https://wren.io/
- Wren source repo: https://github.com/wren-lang/wren
- Teensy platform: https://www.pjrc.com/teensy/
- Teensyduino / Arduino core package: https://www.pjrc.com/teensy/td_download.html
From the current build configuration/logs:
- Arduino FQBN:
teensy:avr:teensy40:usb=serialmidi - Teensy platform/core:
teensy:avrversion1.60.0 - Core variant:
teensy4 - Libraries:
MIDI Libraryversion5.0.2LittleFSversion1.0.0SPIversion1.0
chirp/chirp.ino: Arduino sketch entrypointsrc/: firmware components (MIDI router, USB protocol handlers, Wren bridge/host)src/include/: headers and protocol definitionstools/chirp_fs.py: host-side serial tool for managing files on device flashscripts/*.wren: user Wren scripts uploaded to/scripts/useron the devicemidi_maps/*.json: user data uploaded to/userdataon device flashthird_party/wren-json/: JSON parser module for Wren
From repo root:
makeUpload firmware (press Teensy button when prompted):
make uploadUpload scripts + maps to on-device flash:
make upload-fsFull flow (build + upload + filesystem sync):
make upload-allpython3 -m venv .venv
source .venv/bin/activate
pip install pyserialIf you do not want a venv, install system/user-wide:
pip3 install --user pyserialDefault serial port is /dev/ttyACM0. If needed, pass -p.
./tools/chirp_fs.py -p /dev/ttyACM0 ping./tools/chirp_fs.py -p /dev/ttyACM0 list
./tools/chirp_fs.py -p /dev/ttyACM0 sync --delete scripts/ midi_maps/ third_party/wren-json/
./tools/chirp_fs.py -p /dev/ttyACM0 reboot
./tools/chirp_fs.py -p /dev/ttyACM0 monitor- Device flash layout used by sync:
/scripts/user: user Wren scripts/scripts/builtin: runtime/modules (e.g.json.wren)/userdata: JSON maps and cached user data
- The D-Station script forwards translated CC to MIDI port
1, MIDI channel10.