Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SansApp

A free, open-source mobile editor for the Tech 21 SansAmp Programmable Bass Driver DI Elite. SansAmp, sans app.

Tech 21 ships a great preamp pedal with deep MIDI editing — but the editor is desktop-only (Mac/Windows). If you gig or practice with just a phone, you're stuck. SansApp puts a full editor in your pocket: tweak every knob, browse and design cabs, and manage all 128 presets, over MIDI (Bluetooth or wired).

Unofficial. SansApp is an independent, community project — not affiliated with, authorized, or endorsed by Tech 21 USA, Inc. "SansAmp", "Bass Driver", and "Tech 21" are trademarks of their owner, used here only nominatively to describe compatibility. The name "SansApp" is parody. SansApp speaks the pedal's MIDI protocol, documented by observing a pedal the author owns; it includes no Tech 21 code, artwork, fonts, or preset data.

Using SansApp

  1. Connect. Pair a Bluetooth MIDI adapter (a CME WIDI Jack is recommended — see Hardware) to your phone once via the CME WIDI app or GarageBand, then open SansApp and tap Connect. A USB adapter (the pedal's MD1) also works. The pill up top shows the live connection state.
  2. Edit live. The Editor has every control on one screen — Drive/EQ, Mix/Output, and the red Red Zone functions — plus a live EQ tone graph and the current preset name/number. Turn a knob and the pedal responds immediately. Tap a knob's ▸ chevron to jump to its deep page (Amp, Parametric EQ, Dynamics, Auto Filter, Ambience, Chorus, IR Studio).
  3. Cabs & IRs. The IR page pulls your pedal's own cabs and shows each one's real frequency curve. Design a custom cab — high-pass a cab (drop the HPF pedal!), blend two, or build a filter from scratch — and upload it straight to a user slot over MIDI, with its own gain and a per-preset on/off. (Details in How cabs work.)
  4. Presets. Step through all 128, recall any of them, and see what's changed.
  5. Back up & restore. Export every preset to a .p3b file you can keep, share, or open in the desktop editor — and restore one back. Same format the desktop editor uses.

Features

  • Full editor — all knobs on one page (main + Red Zone), a live EQ tone graph, and preset name/number with a dirty indicator.
  • Deep pages — Amp, 3-band parametric EQ, Dynamics (compressor + gate), Auto Filter, Ambience, Chorus, and IR Studio — with hardware-calibrated units and live graphs.
  • All 10 amp models + 7 ambience types, applied live.
  • IR page — pull the pedal's cabs with real curves, select/blend live, and design and upload custom cabs (high-pass, shelves, tilt, notch, or a 2-cab blend) to a user slot, each with a ±12 dB gain and a per-preset enable toggle. Export a WAV too if you want a copy.
  • Presets — recall and step through all 128.
  • Backup / restore / share.p3b bundles, byte-compatible with the desktop editor.
  • Connection — Bluetooth MIDI (CME WIDI Jack) or USB (MD1), auto-detected.

Under the hood: a framework-free protocol + DSP core (used by the app, the Node tools, and the tests), a live connection/session engine validated against a software pedal emulator, and quality gates in CI (oxc lint/format, tsc, 170+ vitest tests, and Fallow for dead code / cycles / duplication).

How cabs work

The pedal has 8 cab (IR) slots. Slots 1–6 are fixed factory cabs. Slots 7 and 8 are special: each one holds a factory cab (Voice 12L in slot 7, Brit V30 in slot 8) and a user IR, and every preset carries a per-preset IR Mode toggle that picks which of the two that preset plays. (About 91 of the 128 factory presets use slot 7's factory cab, so it matters that the factory cab stays put.)

When you design a custom cab, SansApp uploads it through the same import path the desktop editor uses — it fills the user half of slot 7 or 8 and does not overwrite the factory cab. Flip IR Mode back and the factory cab returns, per preset, untouched. Each user IR has its own ±12 dB gain and a per-preset on/off. SansApp pulls and shows you each slot's real frequency curve first, so you always know what you're working with.

Hardware

Bluetooth via a CME WIDI Jack (25TRS35 bundle, ~$60) is the recommended connection; a wired path (the pedal's MD1 USB adapter) works too. Full cabling guide: docs/HARDWARE.md.

Platforms: iOS is the primary, tested target. Android (both Bluetooth and USB MIDI) has landed and is ready for community testing — see docs/HARDWARE.md. If you have an Elite and an Android phone, we'd love a report.

Develop (core — Node 20+)

npm install
npm run check      # the full gate: lint + format + typecheck + test + fallow
npm test           # vitest (framework-free core: protocol, DSP, codec, state)
npm run fallow     # codebase intelligence: dead code, cycles, duplication
npm run emulate    # software pedal on virtual MIDI ports — build with no hardware
npm run probe      # read-only hardware check: read all 128 presets, verify checksums
npm run capture    # log MIDI between the desktop editor and the pedal (protocol notes)

Nothing under src/protocol/, src/device/, or src/dsp/ imports React — so the same tested core runs on the phone, in the Node tools, and in a web build.

Run the app

npm install
npm run web             # renders in the browser via react-native-web (fastest to iterate)
npm run ports           # list CoreMIDI endpoints (find the WIDI Jack / MD1 name)
npm run ble-check       # Bluetooth latency + non-destructive send-path check
npm run ios:device      # LOCAL development build → installs to a tethered iPhone (no cloud)
npm run android         # LOCAL development build → installs to a connected Android device/emulator
npm run start           # Metro for the dev build (hot-reload JS + native MIDI)

Expo Go won't work — it can't load the @motiz88/react-native-midi native module. You need a local development build: npm run ios:device compiles a binary on your Mac (no cloud, no EAS) and installs it to a USB-tethered iPhone; after that npm run start gives hot reload with native MIDI. (First device build: set your Apple team once via open ios/SansApp.xcworkspace → Signing & Capabilities.) Web uses the browser's Web MIDI (Chrome/Edge). See docs/HARDWARE.md for pairing the WIDI Jack.

Shipping to the App Store is a plain fastlane setup (no EAS / paid service) — see docs/RELEASE.md.

How it works

  • src/protocol/ — framework-free SysEx codec, 256-byte preset codec, parameter registry, settings/PC-map/.p3b codecs, IR + WAV codecs.
  • src/dsp/ — framework-free FFT, biquads, IR frequency-response, high-pass/EQ/IR generators.
  • src/device/ — transport abstraction, session/handshake, sync engine, librarian, pedal model.
  • src/state/, src/ui/ — framework-free zustand store + knob math (unit-tested in Node).
  • app/, src/components/, src/midi/ — the React Native surface (Expo).
  • tools/emulate, probe, capture, replay, send, ports, ble-check: the dev and hardware harness.
  • docs/PROTOCOL.md (the MIDI protocol reference), PARAM-MAP.md, HARDWARE.md, RELEASE.md.

Contributing

Contributions welcome — especially protocol observations from your own Elite. See CONTRIBUTING.md.

License

GPL-3.0-only. This keeps SansApp free and open for players forever — any distributed fork must also be open source. See LICENSE and the contribution terms in CONTRIBUTING.md.

About

Free, open-source mobile editor for the Tech 21 SansAmp Programmable Bass Driver DI Elite (unofficial).

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages