Go to file
2026-02-26 19:35:04 +01:00
README.md first commit 2026-02-26 19:35:04 +01:00

NoiceSynth - A Compact RP2040 Synthesizer

A pocket-sized, battery-powered MIDI synthesizer built around the Raspberry Pi Pico. It's designed to be housed in a small enclosure (like an Altoids tin) and features an I2S DAC for quality audio, an OLED display for visual feedback, and a TRS MIDI input.

This guide provides the blueprint for building your own.

Features

  • Compact & Portable: Designed to be powered by a LiPo battery and fit into a small tin.
  • High-Quality Audio: Uses an I2S audio module for clean, low-noise sound output.
  • MIDI Connectivity: Standard 3.5mm TRS-A MIDI input for control with external keyboards and sequencers.
  • Expressive Controls: Features a rotary encoder for navigation and a potentiometer for volume control.
  • Visual Feedback: A crisp 128x64 OLED display shows synth parameters and status.

Hardware Requirements

Component Description
MCU Raspberry Pi Pico or Pico W (RP2040)
Audio Output I2S DAC Amplifier (e.g., MAX98357A or PCM5102A) with a 3.5mm headphone jack.
Display 0.96" SSD1306 128x64 I2C OLED Display.
Controls 1x Rotary Encoder with push-button, 1x 10kΩ Potentiometer.
MIDI Input 1x 3.5mm TRS (Stereo) Jack.
Power 3.7V LiPo Battery and a 5V booster/charger board (e.g., Adafruit PowerBoost).
MIDI Circuit Parts 6N138 or 6N137 Optocoupler, 1N4148 Diode, various resistors (see diagram).

Powering Your Synth (Battery Operation)

To make the synth truly portable, we'll use a LiPo battery and a booster board. This is critical for providing stable power to all components.

LIPO BATTERY WARNING: LiPo batteries are powerful but require careful handling.

  • Never use a LiPo battery without a dedicated protection and charging circuit like the PowerBoost.
  • Do not puncture, bend, or short-circuit a LiPo battery.

Wiring for Power:

  1. Connect the LiPo battery to the JST connector on the PowerBoost board.
  2. Connect the PowerBoost's 5V output to the Pico's VBUS pin (Pin 40). This powers the Pico.
  3. Connect the PowerBoost's 5V output to the VCC/VIN pin of your I2S Audio Module.
  4. Connect the PowerBoost's GND to one of the Pico's GND pins.
  5. Connect this common ground to the GND pins of all other components (OLED, I2S Module, Encoder, Potentiometer, MIDI circuit).

This setup ensures everything shares a common ground and that the power-hungry components get the stable 5V they need, while the Pico's onboard regulator provides 3.3V for the lower-power parts.

Wiring & Connections

Establish a common ground by connecting the ground from your PowerBoost board to the Pico, and then to all other components' GND pins.

Component Pico Pin Description
I2S Audio Module
VCC 5V from PowerBoost Power for the amplifier
GND Common GND Ground
DIN (Data) GP11 (Pin 15) I2S Data Out
BCLK (Bit Clock) GP9 (Pin 12) I2S Bit Clock
LRCK (Word Clock) GP10 (Pin 14) I2S Left/Right Clock
SSD1306 OLED
VCC 3V3 (OUT) (Pin 36) 3.3V Power
GND Common GND Ground
SDA GP4 (Pin 6) I2C Data
SCL GP5 (Pin 7) I2C Clock
Rotary Encoder
+ (VCC) 3V3 (OUT) (Pin 36) 3.3V Power
GND Common GND Ground
CLK GP12 (Pin 16) Encoder Clock
DT GP13 (Pin 17) Encoder Data
SW GP14 (Pin 19) Encoder Switch
Volume Pot
VCC 3V3 (OUT) (Pin 36) 3.3V Power
GND Common GND Ground
Wiper (Output) GP26 (Pin 31) ADC0 for volume reading
MIDI IN
(Circuit Output) GP1 (Pin 2) UART0 RX for MIDI Data In

MIDI IN Circuit (TRS Jack)

MIDI requires an opto-isolated input to protect the Pico from electrical faults. We will use a Type A TRS MIDI wiring standard, which is the most common.

  • TRS Tip: Connects to MIDI Pin 5 (Current Source)
  • TRS Ring: Connects to MIDI Pin 4 (Current Sink)
  • TRS Sleeve: Connects to MIDI Pin 2 (Ground/Shield)

Here is a schematic for the input circuit:

TRS JACK
  TIP ---- 220Ω ----+----|>|---- (Pin 6 of 6N138)
(MIDI 5)            |  (Diode)
                    |
 RING --- 220Ω -----+----------- (Pin 5 of 6N138)
(MIDI 4)

6N138 OPTOCOUPLER
  Pin 8 (VCC) ----> 3.3V (from Pico)
  Pin 7 (VB)  ----> GND
  Pin 6 (E)   --+-> 10kΩ Pull-up Resistor -> 3.3V
                |
                +-> To Pico GP1 (UART RX)
  Pin 5 (GND) ----> GND

This circuit correctly isolates the incoming MIDI signal and inverts it for the Pico's UART receiver.

Software Setup

  1. Install RP2040 Board Core:

    • In the Arduino IDE, go to Preferences and add this URL to "Additional Boards Manager URLs": https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
    • Go to Tools > Board > Boards Manager, search for "pico", and install Raspberry Pi Pico/RP2040.
    • Select Raspberry Pi Pico from the board menu.
  2. Install Libraries:

    • Install the following from the Arduino Library Manager:
      • Adafruit GFX Library
      • Adafruit SSD1306
      • An I2S Audio Library for the Pico (e.g., I2S by Earle F. Philhower, III, which is often included with the core).
  3. Upload Code:

    • Once everything is wired, you can upload your synthesizer code to the Pico.

Controls & Usage

The specific function of the controls will depend on your code, but here is a common layout:

  • Rotary Encoder (Turn): Navigate menus, change synth parameters (e.g., waveform, filter cutoff), or select notes.
  • Rotary Encoder (Press): Enter/exit edit mode for a parameter, or trigger an action.
  • Volume Potentiometer: Controls the final output volume before it goes to the headphone jack.

Ideas for Unorthodox Sounds

The beauty of a programmable synth is the ability to go beyond simple subtractive synthesis. Here are some fun ideas to code:

  1. Glitchy Wavetable Synthesis:

    • Concept: Store several single-cycle waveforms (sine, saw, square, triangle) in arrays. The encoder selects the primary waveform.
    • The Twist: Add a "glitch" parameter. When activated (e.g., by a long press of the encoder), the code starts intentionally misreading the wavetable. It could randomly jump to a different table, read sample points backward, or apply bitwise operations (XOR, AND) to the sample data before sending it to the DAC. This creates a source of controlled digital chaos and unexpected textures.
  2. Karplus-Strong Physical Modeling:

    • Concept: This algorithm simulates a plucked string. A buffer (delay line) is filled with random noise (the "pluck"), then played back and fed back into itself through a simple low-pass filter.
    • The Twist: Use the controls in non-standard ways. Map the volume pot to the filter cutoff or the feedback amount instead of volume. High feedback can cause the "string" to resonate infinitely, like an e-bow. Map the rotary encoder to the length of the delay line to change pitch, but allow it to be modified while a note is playing, creating bizarre pitch-bending and warping effects.
  3. Chaotic Oscillators:

    • Concept: Instead of a standard oscillator, generate sound using a mathematical logistic map, like x_n+1 = r * x_n * (1 - x_n). The output x is a value between 0.0 and 1.0.
    • The Twist: Map the output x directly to the audio sample value. The potentiometer controls the r parameter. At low r values, the output is stable or oscillates simply. As you increase r past ~3.57, it becomes chaotic, generating complex, noise-like, but still structured tones. This gives you a controller that smoothly transitions a sound from a pure tone into pure noise and back again.

Happy building, and enjoy your new tiny synth!