an synthesizer made out of surplus Raspberry Pi
Go to file
severak c99506d752 Updated readme. 2021-01-06 20:09:26 +01:00
akwf Added amateur. 2021-01-06 19:53:31 +01:00
README.md Updated readme. 2021-01-06 20:09:26 +01:00
amateur.csd Added amateur. 2021-01-06 19:53:31 +01:00
analog_nomad.csd Updated Amateur. Minor fixes. 2021-01-01 18:19:40 +01:00
autostart.sh Updated Amateur. Minor fixes. 2021-01-01 18:19:40 +01:00
ctcsoundSession.py with CSound 2020-11-09 00:29:13 +01:00
guinea-synth.jpg added pic 2021-01-01 18:33:53 +01:00
guinea-synth.py Updated Amateur. Minor fixes. 2021-01-01 18:19:40 +01:00
i2c_lib.py Using actual hardware. 2020-11-09 19:33:08 +01:00
lcddriver.py Using actual hardware. 2020-11-09 19:33:08 +01:00
traveller.csd Updated Amateur. Minor fixes. 2021-01-01 18:19:40 +01:00

README.md

guinea-synth

an synthesizer made out of surplus Raspberry Pi

real machine

See demo video.

hardware list

  • Raspberry Pi
  • 16x2 LCD I2C display
  • rotary encoder with switch
  • USB MIDI controller
  • some wires and LEGO to keep it together

you need to setup that display first - see https://github.com/the-raspberry-pi-guy/lcd

wiring diagram

Display Raspberry Pi
GND pin 6 (GND)
VCC pin 4 (5V)
SDA pin 3 (GPIO 2)
SCL pin 5 (GPIO 3)

see https://pinout.xyz/#

Rotary encoder Raspberry Pi
CLK pin 19 (GPIO 9)
DT pin 21 (GPIO 10)
SW pin 22 (GPIO 25)
+ pin 17 (5V)
GND pin 20

DT and CLK pins can be exchanged, it just switches knob direction.

software setup

install these things from apt:

  • python2.7
  • CSound
  • python-csound

add this to your crontab -e:

@reboot /home/patch/guinea-synth/autostart.sh &

You have three synthesizers in one box:

  • amateur.csd - sample-based morphing synth
  • analog_nomad.csd - flexible polsynth (Juno-like)
  • traveller.csd - monosynth for weird sounds

API

TODO - now only method signatures are documented.

  • cls()
  • echo(text, linenum=0)
  • menu(obj)
  • act_menu(), menu.add(item)
  • act_select(label, params, callback)
  • act_confirm(prev, question, callback)
  • csd_param(prev, csd, param_name, label, preset=1, min=0, max=1, per_round=20.0)
  • csd_select(prev, csd, param_name, label, preset=0, params=[])
  • csd_checkbox(prev, csd, param_name, label, preset=0)

known bugs

  • sometimes some notes are stuck when playing chords, you need to reset synth

ideas & todo

  • sequencer
  • loading & saving presets
  • refactor python code

credits & thanks