Skip to content
aroumPublic

About

No description, website, or topics provided.

Resources

Stars

21 stars

Watchers

0 watching

Forks

Latest commit

 

History

37 Commits

Folders and files

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

21 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages