Skip to content
A portable, cheap, and easy to use, monophonic + polyphonic digital synthesizer for use with a MIDI controller
C++ C
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
firmware turn on midi led for prototype 2 Sep 12, 2019
graphics updating readme Aug 23, 2019
hardware update readme Sep 5, 2019
renders pushing graphics Aug 14, 2019
.DS_Store board rev 2 done, sent to seeed for manufacture Aug 30, 2019
.gitignore trying to resolve git conflicts Aug 22, 2019
LICENSE update readme Aug 23, 2019

KELPIE - a polyphonic pocket synth



The KELPIE is a digital polyphonic synthesizer powered by the SGTL5000 audio DAC and an ARM Cortex M4 microcontroller. For a description of the full project, please visit the Hackaday Project Page

Repository Details

This repo houses all mechanical, electrical, and software files relating to the project, as well as graphical assets and other additional files.

  • Mechanical CAD (mCAD) files can be found and viewed here via Fusion 360's online viewer. They can be downloaded directly in whatever format you need (including STLs for 3D printing). The link provided here directly reflects the most current progress and is kept up-to-date in real time.
  • Electronics CAD (Autodesk Eagle) files and schematics can be found here. The parts library and full BOM can be exported from the schematic. This is the most up-to-date BOM.
  • Firmware files, written in Arduino/C++ using PlatformIO can be found here

Firmware Directory Structure

The device firmware is written in C++ using the Arduino framework. The main entrypoint is /src/main.cpp. The directory structure is as follows:

├── include
│   ├── HardwareInputs.h    // STRUCTS TO ORGANIZE KNOBS/BUTTON DATA
│   ├── KelpieHelpers.h     // SEE .src DIR
│   ├── KelpieIO.h          // SEE .src DIR
│   ├── contants.h          // CONSTANTS USED TO CONVERT KNOB READINGS
│   ├── freqKnobLookup.h    // LOOKUP TABLE FOR LIN->LOG POT READINGS
│   ├── globalSynthState.h  // SOURCE OF TRUTH FOR GLOBAL STATE OF SYNTH
│   ├── keyMappings.h       // LOOKUP TABLE FOR NOTE->FREQ CONVERSION
│   ├── pinDefines.h        // MCU PIN MAPPINGS
│   └── voices.h            // STRUCTS TO ORGANIZE 'VOICES'
├── lib
│   └── README
├── platformio.ini
├── src
│   ├── KelpieHelpers.cpp   // ALL HELPER FUNCTIONS
│   ├── KelpieIO.cpp        // LIBRARY HANDLING KNOBS/BUTTONS
│   └── main.cpp            // MAIN ENTRY POINT
└── test
    └── README

Audio Design

The synthesizer block diagram is shown below and was designed using the Teensy Audio Design Tool



I utilized and referenced a couple of open source libraries + repos for this project, as well as some very useful tools:

You can’t perform that action at this time.