Skip to content

Latest commit

 

History

32 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OMSK

alt text alt text

OMSK is an experimental, pocket-sized hardware platform designed primarily (but not exclusively) for custom synthesizer firmware development. Built around the RP2350-Zero microcontroller module, OMSK packs an exceptional density of tactile controls, audio routing, and visual indicators into a highly portable footprint.

Hardware Features

  • MCU: RP2350-Zero module (or RP2040-Zero)
  • Controls:
    • 4x4 matrix of Kailh Choc v2 mechanical switches (supports hot-swap sockets)
    • 4 rotary encoders (Alps EC12)
  • Display: 128x64 OLED screen (supports SH1107 or SSD1312 via I2C)
  • Visuals: 22 addressable RGB LEDs (WS2812B MINI-E) for parameter tracking and custom animations
  • Audio & Connectivity:
    • Built-in mono PWM audio output (with optional onboard headphone amplifier circuit)
    • Classic hardware MIDI In/Out jacks (TRS Type A)
    • USB MIDI class-compliant device interface
    • Support for an optional external PCM5102 I2S DAC for high-fidelity stereo audio

For more details on assembly, schematic routing, and BOM, see the Hardware PCB Guide and 3D Case/Enclosure Design.

Bare-metal Software

All official firmware is written in pure C/C++ using the native Raspberry Pi Pico SDK. There is no Arduino overhead and no RTOS, ensuring maximum CPU availability, bare-metal performance, and sub-millisecond audio and MIDI latency.

Architecture

Rather than compiling a single monolithic application, OMSK uses separate firmware files for different applications. This separation is dictated by hardware memory limits and fundamental architectural differences:

  • Synthesizer engines require different memory structures (e.g., flash space allocated for wavetables and filter LUTs vs. granular sample buffers).
  • Audio paths, envelopes, and modulation matrices differ completely between engines.

All firmware targets share a unified low-level core library located in firmware/shared, but compile as independent binaries.

Note

Each firmware folder contains its own documentation and parameter reference: see the respective README.md (e.g., omsk_fm/README.md) and the docs/ directory for detailed configuration options (e.g., omsk_fm/docs). Shared hardware pinouts and peripheral configurations are defined in firmware/shared/hw_config.h (see firmware/shared/README.md).

Firmwares

Explore the firmware directory at firmware to flash any of the following targets:

  • omsk_wave: A polyphonic wavetable synthesizer featuring deep modulation routing, resonant filters, and non-volatile patch storage.
  • omsk_grain: A 4-voice granular synthesizer offering real-time grain manipulation, modulation matrices, and full MIDI control.
  • omsk_fm: An FM (Frequency Modulation) synthesizer engine.
  • omsk_tracker: A pocket music tracker and step sequencer to compose patterns and songs directly on the device. [planned]
  • DMK: A customizable mechanical macropad firmware featuring full Vial compatibility. Remap keys, layout layers, macros, and rotary encoder actions directly from your web browser.
  • omsk_midi: A simple demonstration firmware that configures the device as a class-compliant USB/TRS MIDI controller.
  • omsk_oled_test: A diagnostic utility to test OLED display functionality, address configuration, and graphics rendering.

Both synth engines support full MIDI CC mapping and preset saving directly to the onboard non-volatile memory.

Desktop Simulators & Tools

The desktop directory contains Python-based software simulators, hardware emulators, and firmware development utilities managed via uv:

  • desktop/grain_simulator: PySide6 GUI simulation of the OMSK Granular Synth engine (omsk_grain).
  • desktop/synth_simulator: PySide6 GUI simulation of the OMSK Analog/Wavetable Synth engine (omsk_synth).
  • desktop/synth_tools: Firmware LUT header generators, hardware emulators (128x64 OLED display, 4x4 matrix keypad), and interactive web testbenches.

Quick launch:

cd desktop
uv sync
uv run synth_simulator/main.py

For more details, see the Desktop README.

Roadmap & Status

This project is currently a work in progress.

  • Hardware: Case and knob designs are being actively iterated.
  • Software: A dedicated web-based editor using WebMIDI is planned to allow quick parameter tweaking, firmware updates, and preset backup/sharing.

About

No description, website, or topics provided.

Resources

Stars

19 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages