Sound Cycling in Mighty Drum Machine
Sound Cycling lets you press the left and right arrow keys on a selected pad to step through every sample of that pad's type. Kicks on a Kick pad, snares on a Snare pad, and so on.
The point is fast sound exploration during early song-making, without hunting through Finder.
Sound cycling is a useful feature for making beats. Especially true in the early stages when you're exploring your drum patterns.
It solves a problem many producers and beat makers experience.
The Problem
The problem producers run into: you have a pattern playing but you want to hear whatit sounds like with different drum sounds (a different snare for example). Or, you have the pattern, just looking for the perfect snare to fit.
To do so either requires dragging sounds from a folder, or previewing a folder separate from the beat.
The Solution
Sound Cycling lets you switch different drum sounds while listening to your beat. So you can hear a beat playing and, with just pressing a key, hear a new snare.
It removes the friction to hearing different sounds.
What it allows you to do is cycle through sounds while your beat is playing. Here's a video in detail
To set it up, go to the Settings tab and select your folder from the Samples Root folder option.
The Cycling Pool
For each pad type (Kick, Snare, Hat, Tom, Aux), the pool is the union of two halves, merged, de-duplicated and sorted:
| Half | What's In It | How It's Scanned |
| Library (or the "homebase" | Bundled Kits, user-saved kits, imported packs | Synchronously, whenever the library refreshes. |
| Samples Root | Everything under the user's chosen folder, at any depth | When a user requests a scan through the settings. |
De-duplication
A file at the same absolute path appears once, no matter how many rules it matches.
Sort
ascending alphabetically by filename, so cycling order is deterministic
No Samples Root Set
The pool is library-only. Still broad in the sense it scans every kit and pack in the "homebase" and not necessarily just one folder.
Audio Formats
.wav, .aif, .aiff, .mp3, .flac, and .ogg are scanned (extension match is case-sensitive). Anything else is skipped.
Because packs land in the library, newly imported content joins the pool automatically on the next library refresh.
How Files Are Classified: Folder-Name Match
The folder-name rule is the reliable one and is always on. If any ancestor folder of a file at any depth up to the Samples Root, is named with a type keyword, the file belongs to that type. The folder is the authority; the file's own name doesn't matter.
Matching is case-insensitive and tolerant of singular/plural:
| Type | Folder names that match |
|---|---|
| Kick | Kick, Kicks, kicks, KICKS |
| Snare | Snare, Snares |
| Hat | Hat, Hats, HiHat, HiHats, Hi-Hats |
| Tom | Tom, Toms |
| Aux | Aux, Perc, Percussion |
Examples:
- ~/Samples/BoomBap/Kicks/Thump.wav → kick (parent is Kicks)
- ~/Samples/MyPack/Kicks/Dusty/Low.wav → kick (ancestor Kicks, two levels up)
- ~/Samples/BoomBap/Kicks/ and ~/Samples/Lofi/Kicks/ both contribute — one pool spanning both folders
Include filename matches
"Include filename matches" is a Settings toggle, on by default, that adds a second, looser rule on top of the folder rule: a file also joins a type's pool if its own filename contains the type keyword (case-insensitive), wherever it lives in the Samples Root.
- My Random Samples/Thump_kick.wav → kick, even though no folder says "Kicks"
- Loose/808_snare_hit.wav → snare
- Loose/unrelated.wav → ignored (no folder match, no keyword in the name)
How the two rules combine. A file is in the pool if it matches the folder rule or (when the toggle is on) the filename rule. A file matching both, say Kicks/Thump_kick.wav, is still one entry.
Why it's a toggle. The folder rule is reliable; the filename rule is "noisy but inclusive." It catches loosely organized libraries but can also pull in mislabeled files or loops like snare_loop.wav. Turning it off switches to folder-only matching for a cleaner pool.
Library exception. The toggle only affects the Samples Root half. The library half always uses folder matching alone, because kit folders are already type-named. Applying the filename rule there could misfile a sample, e.g. MyKit/Kicks/snare_hit.wav would wrongly land in the snare pool.
Changing the toggle invalidates the cached pool, so the next cycle reflects the new rule.
When you press an arrow on a selected pad, cyclePadSample uses the pad's structural type to pick the pool, then finds the current sample's position in that pool by absolute path:
| Situation | → (next) | ← (previous) |
|---|---|---|
| Current sample is in the pool | Position + 1 | Position − 1 |
| At the end / start of the pool | Wraps to the first sample | Wraps to the last sample |
| Current sample isn't in the pool | Starts at the first sample | Starts at the last sample |
| Pad is empty | Fills it with the first sample | Fills it with the last sample |
| Pool is empty | No-op | No-op |
- Empty pads fill. This emerged from pool-based cycling and was ratified: select an empty pad and arrow through its type's pool — no drag needed first.
- Dirty flag. Each cycle loads the new sample and marks the kit as modified, so you're prompted to save.
- Starting point. Loading a kit still starts each pad on the sample its JSON references; cycling moves away from there until you save.
Settings dialog
Open it from Settings… in the overflow menu, just below Import pack…
- Samples Root: the current path, with Choose… (folder picker) and Clear.
- Include filename matches:the checkbox described above.
- Pool readout: per-type counts and folder count, e.g. Found 847 kicks, 523 snares, 1,204 hats, 312 toms, 189 aux across 23 folders. It reflects the last applied scan, not unsaved edits.
- Scan:previews the pending settings with live progress and updates the readout, without saving.
- Save / Cancel: Save (or Return) persists; it skips a rescan if the pool already matches, otherwise scans after saving. Cancel (or Escape) discards edits and reverts the pool.
Settings persist to State/settings.json, next to last.json, so wiping the library keeps your preferences. Missing or malformed fields fall back to defaults, and a relative Samples Root path is rejected.

Known limitations and V1.1+ candidates
As of this writing, Mighty Drum Machine V1.1 is out. THere are known limitations that may be addressed in future versions:
-
Long files can slip in. Loops and melodic phrases are picked up if they match a folder or filename rule; a long snare_loop.wav may still be ringing when the next step fires. V1.1 workaround: keep loops out of type-named folders in your Samples Root, or turn off "Include filename matches."
- V1.2 options: a duration-based filter (preferred — matches the "one-shots only" intent), a filename exclude list (loop, beat, melody), or a "One-shot mode" combining both.
- Library is always included. There's no Samples Root–only mode yet. V1.2 candidate: an "Include library samples" toggle, deferred until users ask.
- No pack grouping. Pack content mixes into the pool with everything else; grouping or filtering is a V1.2+ idea.