Skip to content

TeensyMix synth is an 8-voice polyphonic synthesizer based on the Teensy 4.1 development board.

License

Notifications You must be signed in to change notification settings

jgrahame/TeensyMixSynth

 
 

Repository files navigation

TeensyMix Synth

TeensyMix synth is an 8-voice polyphonic synthesizer based on the Teensy 4.1 development board. It is designed to be an easy build with just an LCD display and a digital to analog converter. An Akai MIDImix is used to control the synthesizer. The MIDImix is a compact and affordable MIDI based mixing controller with 24 dials, 9 sliders and 19 buttons with LEDs.

All sound parameters of the synthesizer can be controlled directly using these dials, sliders and buttons. No complicated menus and pages of parameters to scroll through!

See and listen to what it looks and sounds like!

Features:

  • 8-voices with sawtooth, square, sine, triangle, sample & hold noise and several sampled waveforms
  • 2 oscillators per voice, one with waveform shape modulation, one with frequency modulation (FM)
  • Oscillator 1 supports unison detune with a total of 7 stereo panned oscillators with adjustable detune and mix levels
  • 2 12db filters, individually controllable, one with adjustable resonance, allows various combinations of low-pass and high-pass
  • 2 envelope generators, one for amplitude, one for modulating the filter, shape, etc
  • 1 LFO for modulating the frequency, filter, shape, etc
  • Per voice wavefolder for manipulating the waveform
  • Per voice waveshaper for distortion
  • Stereo ensemble chorus
  • Stereo audio using a 24 bit digital to analog converter
  • MIDI over USB
  • Optional: (5 pin DIN) serial MIDI

For more information about the hardware and schematics, see: Hardware.md

For more information about the source code, see: Code.md

Please note: this project overclocks the Teensy 4.1 slightly, see platformio.ini for more information.

Usage

MIDImix controls

To load a patch:

  • press BANK LEFT to enter patch selection mode, the button LED will start to blink slowly
  • press MUTE of channel 1 to 8 to select the first digit of the patch to load, the LED will light up
  • press REC ARM of channel 1 to 8 to select the second digit of the patch to load, the LED will light up
  • the patch is loaded
  • you can switch to another patch by selecting another digit using the MUTE or REC ARM buttons
  • you can leave patch selection by pressing the BANK LEFT button, the button LEDs of both BANK LEFT and BANK LEFT will turn on (without blinking)
  • changing any slider or dial while in patch selection mode will also leave patch selection mode

All patch parameter values will be sent out to external MIDI whenever a patch is loaded. It is possible to record these parameter values using your DAW so your song contains the right parameter values regardless of what the patch is set to.

To save a patch:

  • press BANK RIGHT to enter patch save mode, the button LED will start to blink slowly
  • the first and second digits of the current patch are indicated using the button LEDs of the MUTE and REC ARM buttons
  • optionally press MUTE of channel 1 to 8 to select the first digit of the patch location to save to, the LED will light up
  • optionally press REC ARM of channel 1 to 8 to select the second digit of the patch location to save to, the LED will light up
  • press BANK RIGHT again to enter patch name mode, the button LED will start to blink quickly
  • you can use the MUTE and REC ARM buttons to change the letters 1 to 8 of the patch name
  • press BANK RIGHT again to save the patch, the button LEDs of both BANK LEFT and BANK LEFT will turn on (without blinking)
  • changing any slider or dial while in patch save / name mode will leave without saving

All other dials, sliders and buttons are directly linked parameters of the synthesizer during play mode. The MUTE and REC ARM buttons are used to increment / decrement parameter values. Keeping MUTE or REC ARM buttons pressed will make them repeat (first slow, then fast).

The display will show the parameter name and value whenever you adjust a parameter value. These values will also be sent out on the external MIDI, so you can record value changes in your song.

Check control_map.xlsx to see which dials, sliders and buttons are linked to which parameter.

A few additional parameters such as keyboard tracking can be accessed through menu parameters.

To access the menu parameters:

  • press SOLO to enter menu mode
  • press the MUTE or REC ARM buttons to select the menu parameter (only a few are currently in use)
  • use the MASTER slider to adjust the parameter value
  • press SOLO to exit menu mode

Control changes

The following control changes are accepted on the external USB and 5 pin DIN MIDI:

Parameter CC
ENV_1_ATTACK 73
ENV_1_DECAY 75
ENV_1_SUSTAIN 79
ENV_1_RELEASE 72
ENV_2_ATTACK 16
ENV_2_DECAY 17
ENV_2_SUSTAIN 18
ENV_2_RELEASE 19
FILTER_1_FREQ 74
FILTER_1_RES 71
FILTER_1_KBD_TRACK 20
FILTER_1_KBD_VELOCITY 21
FILTER_1_ENV_2 22
FILTER_1_LFO 23
FILTER_MODE 24
LFO_FREQ 76
LFO_SHAPE 25
LFO_WAVEFORM 26
LFO_ATTACK 78
OSC_1_WAVEFORM 27
OSC_1_WAVEFOLD 28
OSC_1_SHAPE 29
OSC_1_TRANSPOSE 30
OSC_1_DETUNE 31
OSC_1_MOD_FREQ_ENV_2 80
OSC_1_MOD_FREQ_LFO 81
OSC_1_MOD_SHAPE_ENV_2 82
OSC_1_MOD_SHAPE_LFO 83
OSC_1_MOD_WAVEFOLD_ENV_2 85
OSC_1_UNISON_DETUNE 86
OSC_1_UNISON_MIX 87
OSC_FM_WAVEFORM 88
OSC_FM_OCTAVE 89
OSC_FM_TRANSPOSE 90
OSC_FM_MOD_PHASE_MOD_ENV_2 102
OSC_FM_PHASE_MOD 103
FILTER_2_FREQ_OFFSET 81
WAVESHAPE_LEVEL 104
PITCH_CHANGE_RANGE_LEVEL 105
OSC_VOLUME_MIX 106
ENSEMBLE_MIX 93
ENSEMBLE_LFO_RATE 94
AMP_MOD_LFO 92
AMP_KBD_VELOCITY 95
MOD_WHL_ENV_REVERSE 107

This chart is generated using generate_external_midi_control_chart.py. Regenerate and replace this chart whenever you change external MIDI control changes in src/ConstantValues.h

Program changes

The TeensyMix Synth uses patch number with two digits each containing a number between 1 and 8. The corresponding MIDI program number is shown on the display after the → symbol.

The follow table shows the mappings from MIDI programs to patch numbers:

Program Patch
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 21
10 22
11 23
12 24
13 25
14 26
15 27
16 28
17 31
18 32
19 33
20 34
21 35
22 36
23 37
24 38
25 41
26 42
27 43
28 44
29 45
30 46
31 47
32 48
33 51
34 52
35 53
36 54
37 55
38 56
39 57
40 58
41 61
42 62
43 63
44 64
45 65
46 66
47 67
48 68
49 71
50 72
51 73
52 74
53 75
54 76
55 77
56 78
57 81
58 82
59 83
60 84
61 85
62 86
63 87
64 88

About

TeensyMix synth is an 8-voice polyphonic synthesizer based on the Teensy 4.1 development board.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 93.4%
  • C++ 6.5%
  • Python 0.1%