{"id":51524891,"url":"https://github.com/merumerutho/dsy-ott","last_synced_at":"2026-07-08T20:01:53.002Z","repository":{"id":358822699,"uuid":"1241523355","full_name":"merumerutho/DSY-OTT","owner":"merumerutho","description":"A custom firmware for the Daisy Seed Patch.Init() eurorack module, conceived as an external sound processor for Nanoloop2 running on GBA. Notch filtering into noise gate into 4-band OTT compressor into 4-band equalizer.","archived":false,"fork":false,"pushed_at":"2026-06-20T08:48:06.000Z","size":72,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-20T10:19:56.836Z","etag":null,"topics":["daisy","gba","init","nanoloop","patch","seed"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/merumerutho.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-17T13:52:52.000Z","updated_at":"2026-06-20T08:48:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/merumerutho/DSY-OTT","commit_stats":null,"previous_names":["merumerutho/gba-ott","merumerutho/dsy-ott"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/merumerutho/DSY-OTT","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merumerutho%2FDSY-OTT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merumerutho%2FDSY-OTT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merumerutho%2FDSY-OTT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merumerutho%2FDSY-OTT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/merumerutho","download_url":"https://codeload.github.com/merumerutho/DSY-OTT/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merumerutho%2FDSY-OTT/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35276781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-08T02:00:06.796Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["daisy","gba","init","nanoloop","patch","seed"],"created_at":"2026-07-08T20:01:51.048Z","updated_at":"2026-07-08T20:01:52.997Z","avatar_url":"https://github.com/merumerutho.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DSY-OTT\n\nAn OTT-style 4-band upward + downward compressor, with a tuned harmonic notch bank\nand noise gate, compatible with the Electrosmith **patch.Init()** Eurorack\nmodule (Daisy Patch SM).\n\nThe firmware targets specifically the use with a **Game Boy Advance running Nanoloop 2**. \nThe notch frequencies are chosen specifically to match the\nGBA's hum. Other than that, it perfectly works as a general\nmultiband compressor for any source, but you might want to rework the settings.\n\n## Features\n\n- Per-band OTT compression: peak detection, fixed 3:1 ratio applied both\n  upward and downward, per-band makeup.\n- Harmonic notch gate: a bank of biquad notches, each either always-on or\n  sidechain-masked, pre-tuned to the Game Boy's tonal noise.\n- Broadband noise gate with hysteresis for the residual hiss.\n- 4-band post EQ (low shelf / two bells / high shelf, +/-12 dB).\n- CV-input sidechain ducking; sidechain CV output from the Sub band.\n- Output soft clipper (rational saturator), 2x oversampled to suppress\n  clipper aliasing on harmonically dense material.\n- Paged control surface: 4 knobs reach all 20 parameters, with\n  soft-takeover and per-page memory.\n- Save / recall of all settings to onboard QSPI flash, no SD card.\n- Compile-time CPU profiler over USB serial.\n\n## Requirements\n\n- **GNU Arm Embedded Toolchain** (`arm-none-eabi-gcc`) on `PATH`. The\n  Electrosmith \"Daisy Toolchain\" installer bundles this on Windows.\n- **GNU make** and **dfu-util** on `PATH`.\n- **libDaisy** and **DaisySP** checked out and built once. The Makefile\n  points at them via `LIBDAISY_DIR` / `DAISYSP_DIR` (default\n  `../../libDaisy` and `../../DaisySP`, relative to the repo root); adjust\n  those if your layout differs.\n\n## Build\n\nBuild the two dependencies once, then build this project from the repo\nroot:\n\n```sh\nmake -C ../../libDaisy\nmake -C ../../DaisySP\nmake -j\n```\n\n\n## Flash\n\nPut the module in DFU mode (hold **BOOT**, tap **RESET**, release\n**BOOT**), then:\n\n```sh\nmake program-dfu\n```\n\nor flash using [flash.daisy.audio](https://flash.daisy.audio/).\n\n## Controls\n\nThe toggle selects a group (BANDS or GLOBAL). Each group has sub-pages\n(BANDS has 3, GLOBAL has 2). A short button press cycles to the next\nsub-page within the current group; each group remembers its own page. The\nLED encodes the active page: **solid = page 1**, **fast blink = page 2**,\n**slow blink = page 3**.\n\n| Toggle | Page (LED)     | Knob 1          | Knob 2         | Knob 3        | Knob 4          |\n|--------|----------------|-----------------|----------------|---------------|-----------------|\n| BANDS  | 1 (solid)      | Sub Threshold   | Bass Threshold | Mid Threshold | High Threshold  |\n| BANDS  | 2 (fast blink) | Sub Makeup      | Bass Makeup    | Mid Makeup    | High Makeup     |\n| BANDS  | 3 (slow blink) | Post EQ Sub     | Post EQ Bass   | Post EQ Mid   | Post EQ High    |\n| GLOBAL | 1 (solid)      | Depth (dry/wet) | Input Gain     | Output Gain   | Time Multiplier |\n| GLOBAL | 2 (fast blink) | Gate Threshold  | Sidechain Thr. | Duck Depth    | Notch Depth     |\n\n**Button gestures**\n\n- Press and release in under 1.5 s: advance the current group's page.\n- Hold for 1.5 s or more: save all pages to flash (the LED flashes\n  rapidly to confirm).\n\n**Soft-takeover.** A knob is ignored until it is moved into a small window\naround the stored value, so changing pages, recalling saved state, or\npowering on never causes value jumps. The boot values are heard until a\nknob is touched.\n\n**CV and gates**\n\n- **CV in jacks**: three are summed into the band thresholds (bipolar,\n  centered = no offset). The configured ducking jack (default CV jack 5)\n  instead drives sidechain ducking, scaled by `Duck Depth`.\n- **CV out 1**: sidechain CV from the Sub-band envelope (0 V when\n  the `Sidechain Thr.` knob is at zero, otherwise 0-5 V over a 12 dB range).\n- **CV out 2** (pin C1): drives the carrier-board LED via the DAC.\n- **Gate ins/outs**: unused.\n\n## Saving and recalling\n\nHolding the button for 1.5 s or more saves all parameters from all pages\n to onboard QSPI Flash. \n The snapshot is captured in the audio interrupt, but the flash write\nhappens in the main loop. The LED reports writing on memory with a rapid flash.\n\nAt startup the patch loads a saved snapshot if flash holds onem\n, otherwise it falls back to the compiled defaults. \n\n## Tuning\n\nTwo files are meant for the end user to edit and play with, then rebuild:\n\n- **`src/config/settings.h`** -- main constants: crossover\n  frequencies, gate timings, post EQ frequencies and gain range, and the\n  harmonic-gate **notch list**. The notch bank is a list of entries\n  so one can easily add, retune or remove them.\n- **`src/config/defaults.h`** -- the default parameter values at power-on\n  (normalised 0..1 as the knob positions). \n  These hold until you move the related knob in the related page,\n  and they are valid only while no savestates are present in the QSPI Flash.\n\n\n## CPU profiler\n\n`profile.h` is a cycle-counter profiler. The Makefile has it \n**enabled** by default. Comment that line out to disable it.\n\nWhen on, the main loop prints over USB serial:\n\n```\n[profile] CPU avg=18.42% peak=27.31% blocks=10000 period=480000 cyc\n```\n\n`period` is the per-block cycle budget. The instrumented hot path adds\nabout 10 cycles;\n\n\n## Credits\n\nOTT is a free multiband upward/downward compressor plugin by\n[Xfer Records](https://xferrecords.com/). DSY-OTT is an independent,\nunaffiliated implementation inspired by it for Eurorack hardware; \"OTT\" is\na product of Xfer Records and this project is not associated with or\nendorsed by them.\n\nBuilt on [libDaisy](https://github.com/electro-smith/libDaisy) and\n[DaisySP](https://github.com/electro-smith/DaisySP) by Electrosmith.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerumerutho%2Fdsy-ott","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmerumerutho%2Fdsy-ott","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerumerutho%2Fdsy-ott/lists"}