Skip to content

feat(sounds): bundled sampled drum kits and offline GM kits - #23

Closed
mattromano wants to merge 3 commits into
got-feedBack:mainfrom
mattromano:feature/3-sampled-kits
Closed

mattromano wants to merge 3 commits into
got-feedBack:mainfrom
mattromano:feature/3-sampled-kits

Conversation

@mattromano

Copy link
Copy Markdown

What

Closes #3. Stacked on #22 (which is stacked on #20) — this PR's own change is the last commit.

  • Kit setting (drums_kit_v1) with six sounds, only the chosen one loaded:
    • Crocell (rock) — new default; real multi-sampled kit from CrocellKit 1.1 (DrumGizmo), CC BY 4.0, 4 velocity layers × 2 round-robins per piece, closed/pedal hi-hat chokes the open one.
    • Virtuosity (jazz) — Virtuosity Drums (Versilian Studios / Karoryfer), CC0.
    • JCLive (previous sound), FluidR3 GM, Sound Blaster Live!, Chaos — WebAudioFont GM kits (MIT data).
  • assets/kits.js (MIT) — kit.json validation, velocity-layer pick, per-layer gain, fetch + decode, and a voice player (round-robin, chokes) on plain AudioBufferSourceNodes for low latency. A broken kit falls back to JCLive.
  • Offline: the WebAudioFont player and every GM note file now ship in assets/sounds/ and load from core's plugin assets route instead of surikov.github.io — nothing loads from third-party sites.
  • tools/build_sample_kit.py rebuilds the sampled kits from the source libraries (picks/trims/fades/levels hits, encodes Ogg Vorbis, writes kit.json).
  • Licences and the CC BY credit in NOTICE.md and assets/sounds/README.md.

Size: the whole sound set is ~12.0 MB (sampled kits 8.4 MB, GM files + player ~3.6 MB), under the ~15 MB threshold, so the samples are committed rather than fetched from a release asset at first use.

Licence note: assets/sounds/WebAudioFontPlayer.js is GPL-3.0 (unmodified upstream file, loaded at runtime only for the GM kits; GPL text in LICENSE.GPL-3.0). Upstream 4.0.0 already used it, from the CDN; bundling means the repo now distributes it. MIT code may be combined with GPL code, and GPL-3.0 is compatible with feedBack's AGPL-3.0, so this is fine, but the combined plugin as distributed is subject to the GPL for that file. If maintainers prefer an all-permissive repo, the GM kits could be dropped (the two sampled kits don't use it).

Screenshots

Settings panel with the Kit picker (Crocell loaded from /api/plugins/drums/assets/sounds/kits/crocell/, 46 samples, zero requests to surikov.github.io): (b3-kit-picker.jpg)

Tests

  • node tests/kits.test.js — 6 pass (every kit resolves to bundled files for every GM note the synth uses, kit.json validation, layer pick, gain slope, round-robin + choke player, saved kit validation)
  • engine 44, session 40, highway3d 6, screen 23 — all pass; validator ok; node --check all JS
  • Manual in core: kit.json 200 application/json, .ogg 200 audio/ogg via the assets route; the default kit decodes on renderer init; no CDN requests. Sound not auditioned (audio is never played in these tests) — the kits are byte-identical to the ones in the user's custom build.

🤖 Generated with Claude Code

mattromano and others added 3 commits October 9, 2026 17:32
Score drum charts the way the rhythm games do: assets/engine.js is a
JavaScript port of YARG.Core's drums engine (LGPL-3.0, kept as its own
replaceable file with LICENSE.LGPL-3.0, LICENSE.GPL-3.0 and NOTICE.md),
driven through assets/session.js (MIT) which adds difficulty levels,
star power metadata, assists and timing / roll / drum-solo bonuses.

- Per-player difficulty Easy..Expert+ (settings, HUD badge, D/Shift+D).
  Expert drops x2 kicks; lower levels, star power, fills and solos come
  from the drum tab's feedpak 1.20.0 gameplay metadata (Expert only
  without it).
- Assists: auto kick / auto cymbals up to a difficulty (played on the
  drum sound at their own volume), timing presets, Pro cymbals, input
  offset.
- The 2D view marks hits / misses from the engine and draws a score HUD
  (multiplier, score, streak, stars, star power) with Score on.
- Drum-tab accents follow the authored `a` flag; x2 kicks map to GM 35.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
Add assets/highway3d.js, a three.js drum track in the style of the
classic drum games (MIT, original code, no artwork from those games):
pad lanes and a kick bar, bevelled rectangle pad gems, domed cymbals,
strikeline targets, hit flashes and sparks, star power / fill / solo
highlighting and a HUD with streak, multiplier, star power, score,
stars, accuracy and the difficulty badge. It renders the scoring
session from the previous change, through core's vendored three.js.

- View setting Auto (3D with WebGL2) / 3D / 2D; the main player swaps
  renderers on change; feedBackViz_drums3d / _drums2d for hosts.
- Keyboard drumming in both views (Keys, default on): B kick, F red,
  J/K/L toms, Shift or U/I/O cymbals, Enter star power.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
Closes the third-party load: the WebAudioFont player and its GM drum
sets now ship in assets/sounds/ and load from core's plugin assets
route, so the synth works offline. Adds a Kit setting with two real
multi-sampled acoustic kits (velocity layers, round-robins, hi-hat
chokes) played by assets/kits.js: Crocell (rock, CC BY 4.0, new
default) and Virtuosity (jazz, CC0), plus four GM kits (JCLive,
FluidR3 GM, SB Live!, Chaos). tools/build_sample_kit.py rebuilds the
sampled kits; licences and credits are in NOTICE.md (~12 MB total).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Oct 10, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 109 files, which is 9 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Check out review usage here.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f3e47ea6-535e-4fe3-98f3-2c50600ed13a

📥 Commits

Reviewing files that changed from the base of the PR and between 871eb0e and fe30a8e.


⛔ Files ignored due to path filters (256)
  • assets/sounds/kits/crocell/bell_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v4_b.ogg is excluded by !**/*.ogg

📒 Files selected for processing (109)
  • CHANGELOG.md
  • LICENSE.GPL-3.0
  • LICENSE.LGPL-3.0
  • NOTICE.md
  • README.md
  • assets/engine.js
  • assets/highway3d.js
  • assets/kits.js
  • assets/session.js
  • assets/sounds/12835_0_Chaos_sf2_file.js
  • assets/sounds/12835_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12835_0_JCLive_sf2_file.js
  • assets/sounds/12835_0_SBLive_sf2.js
  • assets/sounds/12836_0_Chaos_sf2_file.js
  • assets/sounds/12836_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12836_0_JCLive_sf2_file.js
  • assets/sounds/12836_0_SBLive_sf2.js
  • assets/sounds/12837_0_Chaos_sf2_file.js
  • assets/sounds/12837_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12837_0_JCLive_sf2_file.js
  • assets/sounds/12837_0_SBLive_sf2.js
  • assets/sounds/12838_0_Chaos_sf2_file.js
  • assets/sounds/12838_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12838_0_JCLive_sf2_file.js
  • assets/sounds/12838_0_SBLive_sf2.js
  • assets/sounds/12840_0_Chaos_sf2_file.js
  • assets/sounds/12840_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12840_0_JCLive_sf2_file.js
  • assets/sounds/12840_0_SBLive_sf2.js
  • assets/sounds/12841_0_Chaos_sf2_file.js
  • assets/sounds/12841_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12841_0_JCLive_sf2_file.js
  • assets/sounds/12841_0_SBLive_sf2.js
  • assets/sounds/12842_0_Chaos_sf2_file.js
  • assets/sounds/12842_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12842_0_JCLive_sf2_file.js
  • assets/sounds/12842_0_SBLive_sf2.js
  • assets/sounds/12843_0_Chaos_sf2_file.js
  • assets/sounds/12843_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12843_0_JCLive_sf2_file.js
  • assets/sounds/12843_0_SBLive_sf2.js
  • assets/sounds/12844_0_Chaos_sf2_file.js
  • assets/sounds/12844_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12844_0_JCLive_sf2_file.js
  • assets/sounds/12844_0_SBLive_sf2.js
  • assets/sounds/12845_0_Chaos_sf2_file.js
  • assets/sounds/12845_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12845_0_JCLive_sf2_file.js
  • assets/sounds/12845_0_SBLive_sf2.js
  • assets/sounds/12846_0_Chaos_sf2_file.js
  • assets/sounds/12846_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12846_0_JCLive_sf2_file.js
  • assets/sounds/12846_0_SBLive_sf2.js
  • assets/sounds/12847_0_Chaos_sf2_file.js
  • assets/sounds/12847_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12847_0_JCLive_sf2_file.js
  • assets/sounds/12847_0_SBLive_sf2.js
  • assets/sounds/12848_0_Chaos_sf2_file.js
  • assets/sounds/12848_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12848_0_JCLive_sf2_file.js
  • assets/sounds/12848_0_SBLive_sf2.js
  • assets/sounds/12849_0_Chaos_sf2_file.js
  • assets/sounds/12849_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12849_0_JCLive_sf2_file.js
  • assets/sounds/12849_0_SBLive_sf2.js
  • assets/sounds/12850_0_Chaos_sf2_file.js
  • assets/sounds/12850_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12850_0_JCLive_sf2_file.js
  • assets/sounds/12850_0_SBLive_sf2.js
  • assets/sounds/12851_0_Chaos_sf2_file.js
  • assets/sounds/12851_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12851_0_JCLive_sf2_file.js
  • assets/sounds/12851_0_SBLive_sf2.js
  • assets/sounds/12852_0_Chaos_sf2_file.js
  • assets/sounds/12852_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12852_0_JCLive_sf2_file.js
  • assets/sounds/12852_0_SBLive_sf2.js
  • assets/sounds/12853_0_Chaos_sf2_file.js
  • assets/sounds/12853_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12853_0_JCLive_sf2_file.js
  • assets/sounds/12853_0_SBLive_sf2.js
  • assets/sounds/12855_0_Chaos_sf2_file.js
  • assets/sounds/12855_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12855_0_JCLive_sf2_file.js
  • assets/sounds/12855_0_SBLive_sf2.js
  • assets/sounds/12857_0_Chaos_sf2_file.js
  • assets/sounds/12857_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12857_0_JCLive_sf2_file.js
  • assets/sounds/12857_0_SBLive_sf2.js
  • assets/sounds/12858_0_Chaos_sf2_file.js
  • assets/sounds/12858_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12858_0_JCLive_sf2_file.js
  • assets/sounds/12858_0_SBLive_sf2.js
  • assets/sounds/12859_0_Chaos_sf2_file.js
  • assets/sounds/12859_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12859_0_JCLive_sf2_file.js
  • assets/sounds/12859_0_SBLive_sf2.js
  • assets/sounds/README.md
  • assets/sounds/WebAudioFontPlayer.js
  • assets/sounds/kits/crocell/kit.json
  • assets/sounds/kits/virtuosity/kit.json
  • plugin.json
  • screen.js
  • tests/engine.test.js
  • tests/highway3d.test.js
  • tests/kits.test.js
  • tests/screen.test.js
  • tests/session.test.js
  • tools/build_sample_kit.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mattromano

Copy link
Copy Markdown
Author

Closing to keep the drums work reviewable: I've narrowed it to scoring (#25) and the 3D highway (#26). Sampled kits and the settings page may come back later as their own smaller PRs.

@mattromano mattromano closed this Oct 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Multiple kit choices (acoustic / electronic / 808)

1 participant