A CircuitPython library designed for the pico_synth_sandbox device to provide hardware abstraction and a number of additional audio synthesis features.
As of October 21st, 2024, this repository has been archived due to a restructuring of this project. Components of this project are now separated into separate libraries with less emphasis on the overall hardware infrastructure and more on individual tasks. For more information on this project and the new aforementioned libraries, please visit the project's website.
- CircuitPython_SynthWaveform
- CircuitPython_SynthVoice
- CircuitPython_SynthKeyboard
- CircuitPython_SynthMenu
- CircuitPython_TTP229
- Device-level settings using
settings.toml
file to generate audio driver, display, MIDI, and other hardware objects - Keyboard handling for key priority and voice allocation
- Arpeggiator and sequencer classes based on
Timer
class with support for bpm, step, and gate - Waveform generator to quickly create numpy arrays
- Voice based structure to simplify note and parameter management among multiple
synthio.Note
instances - Multiple voice types available:
- Fully featured
Oscillator
with glide, pitch bend, frequency lfo (vibrato), amplitude envelope and lfo (tremolo), filter envelope and lfo, and panning lfo - Analog-based
Drum
voices:Kick
,Snare
,ClosedHat
andOpenHat
Sample
voice with WAV audio file support, auto-tuning, and all aforementedOscillator
features
- Fully featured
- Time-based synthio helpers for advanced block inputs (
LerpBlockInput
andAREnvelope
) - PDM Microphone level monitoring and trigger-based recording
- General audio helper functions such as FFT, resampling, and normalization
A number of examples of available in the ./examples
folder which demonstrate the use and capabilities of this library. Further information about each example can be found within the documentation.
A few of the provided examples use pre-recorded audio samples for playback. These samples have been provided royalty-free within the ./samples
directory and can be automatically uploaded to your device using make samples
in the root directory.
- Download and install CircuitPython bootloader: instructions & UF2 file. Requires version 9.0.0-alpha6 or greater.
- Ensure that your device is connected and mounted as CIRCUITPYTHON.
- Copy requirements.txt to the root folder of your device, make sure that the circup tool is installed in your environment with pip3 install circup, and run circup update to install all necessary libraries onto your device.
- Copy the desired code example to the root folder of your device as code.py and perform a software reset to run the code.
Note
Alternatively, you can run the included makefile with make to automatically install and update your CircuitPython device (CircuitPython must first be configured).
Documentation for the included CircuitPython library can be found on Read the Docs.
- Project inspired by todbot/pico_test_synth