Skip to content
nullcrimsonPublic

About

Drumverter: free in-browser drum MIDI converter. Remap drum MIDI between 86 drum engines: GetGood Drums, EZdrummer, Superior Drummer, Addictive Drums, BFD, General MIDI, Guitar Pro and more.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Drumverter

Convert drum MIDI between sample-engine note layouts — GetGood Drums, EZdrummer, Superior Drummer 3, Addictive Drums 2, General MIDI, Guitar Pro and 80+ others.

Use it at drumverter.com. It runs in your browser; files are never uploaded.

Drumverter converter

  • Every note goes through a shared drum vocabulary, so any engine converts to any other.
  • A drum the target lacks is played on the nearest one it has (a China on a crash), or left out if you choose Drop; a rimshot or flam still falls back to a plain hit on the same drum.
  • A note the source layout does not know is removed, or kept as it is if you choose Keep as they are (for files partly written for another kit).
  • Hover the dotted counts to see what happens to every drum before converting; each conversion comes with a report of approximated, dropped and unrecognized notes, with links to fix them in the note editor.
  • Edits can be saved as presets. Presets stay in your browser; export one (.json) and drop it on the page to use it elsewhere.
  • Batch conversion, drum-channel selection, 11 languages, and a command-line tool for offline use.

Workspace

Path What it is
midiremap-core Pure Rust engine: canonical drums, fallback chains, MIDI rewrite, loss report
midiremap-cli Offline convert / list command
midiremap-wasm Browser bindings used by the app
midiremap-site Static pages: per-engine note maps, pair tables, FAQ and guide
midiremap-testkit Test helpers that build and read small MIDI files
app/ Vite + React + TypeScript converter UI
engines/*.toml One note map per engine, embedded at build time
locales/ The locale list, and per language the Fluent messages the app shows (app.ftl, read by the site too), the ones only the site reads (site.ftl) and a documents file
content/ The site structure and the tip links, shared by the app and the site

ARCHITECTURE.md explains the design; app/README.md covers the UI.

Build and test

Requirements: rustup (it installs the Rust version pinned in rust-toolchain.toml, wasm target included), the nightly named in nightly-toolchain for rustfmt, Node 22.18+ (.nvmrc), and wasm-bindgen-cli at the version in Cargo.lock.

cargo +"$(cat nightly-toolchain)" fmt --all
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace           # the gate runs both per configuration: see xtask/src/step.rs

cd app
npm ci
npm run dev          # builds the wasm module, then starts Vite
npm run lint
npm test
npm run build:site   # app + static pages into app/dist
npx playwright install chromium   # once
npm run e2e          # browser tests of every user story against app/dist, desktop and phone
npm run size         # size budgets for app/dist/assets

cd ..
cargo xtask gate                 # every check in one run; logs and timings.json in target/gate/
cargo xtask gate --fresh         # every check run again, even those that passed with nothing they read changed
cargo xtask gate rust            # or one group (rust, app, dist) or single steps (fmt, vitest, build-site, ...)
cargo xtask gate --quick         # local fast check: changed unit tests, changed browser test files (desktop), no size budgets

Every push to master and every pull request runs the same cargo xtask gate checks in CI; a push deploys only when all pass. A separate workflow audits dependencies, and a daily job fuzzes the converter (see ARCHITECTURE.md).

Command line

cargo run -p midiremap-cli -- list
cargo run -p midiremap-cli -- convert in.mid ggd_invasion ezdrummer out.mid \
    [--channel auto|all|1-16] [--missing nearest|drop] [--unrecognized remove|keep] \
    [--preset my-kit-drumverter.json | --overrides edits.json] [--user-map map.json]

--preset applies a preset exported from the app (⋯ → Export); --overrides takes raw note edits instead; --user-map adds your own engine map (JSON), also for list; --unrecognized keep writes notes the source layout does not know out unchanged instead of removing them. The loss report is printed to stderr as JSON (unmappedSource, fallbackUsed, dropped, untouched, converted; each fallbackUsed entry names the standIn drum, its note and the count); the exit code is 0 whenever the file was written, so read the report to see what was lost.

Adding an engine

Drop a .toml note map into engines/ (see any existing file for the format) and run the tests; the catalog tests check it, and it ships with the next build.

Licence

MIT. Engine and product names are trademarks of their respective owners; Drumverter is not affiliated with them.

About

Drumverter: free in-browser drum MIDI converter. Remap drum MIDI between 86 drum engines: GetGood Drums, EZdrummer, Superior Drummer, Addictive Drums, BFD, General MIDI, Guitar Pro and more.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages