Releases: SH4DOWSIX/SH4DOWNOME
4.0.1
SH4DOWNOME v4.0.1
Highlights
- Added automatic GitHub update checking on startup.
- Added manual update checking from Settings.
- Added the ability to ignore a specific update version.
- Added separate saved beat window style preferences for subdivision and polyrhythm modes.
Android
- Added Android launcher icons.
- Added Android OpenSSL packaging so HTTPS update checks can work on Android.
- Android builds now support the newer Qt/Android SDK requirements.
- APKs are debug/unsigned builds. Android may show install warnings when installing; this is expected for this release.
Interface Refresh
- Reworked the main app layout for better Android and small-screen usability.
- Redesigned the section list with:
- inset panel styling
- rounded corners
- section number badges
- improved selected-row styling
- better column alignment
- cleaner tempo alignment
- Updated most controls to use a consistent inset visual style.
- Improved the preset selector, time signature, subdivision, tempo, volume, timer, and speed controls.
- Updated toolbar buttons, mode buttons, START/STOP, and beat-window button styling.
- Improved settings layout and added a manual update check button.
Beat Window
- Beat window now saves the last selected style separately for:
- normal subdivision mode
- polyrhythm mode
- Polyrhythm-only styles are now only shown when appropriate.
Update Checking
- SH4DOWNOME now checks GitHub releases on startup.
- If a newer version is available, the app shows an update dialog.
- Users can:
- open the GitHub release page
- dismiss the update for now
- ignore that specific version
- Ignored versions are remembered locally.
- Manual update checks from Settings bypass ignored-version suppression.
- Android HTTPS support was fixed by packaging OpenSSL runtime libraries.
Sounds
- Renamed wood sound sets to:
- Wooden
- Wooden 2
- Wooden 3
- Kept
Defaultat the top of the sound list. - Sorted the remaining sound sets alphabetically.
4.0.0
SH4DOWNOME 4.0.0
SH4DOWNOME 4.0.0 is a major update focused on Android support, a redesigned responsive interface, improved rhythm workflows, expanded Beat Window visuals, and more reliable section-based practice.
Highlights
- Added Android builds.
- Rebuilt the main interface with a responsive Android-friendly layout.
- Added multiple Beat Window visual presets.
- Improved polyrhythm playback with per-beat and per-bar modes.
- Improved custom subdivision support and persistence.
- Added the new Woodblock 2 sound set.
- Fixed several section workflow, Beat Window, and always-on-top issues.
Android Support
- Added Android build support across supported ABIs.
- Rebuilt the GUI so SH4DOWNOME works properly on smaller touch screens.
- Added larger touch targets and a mobile-friendly control layout.
- Improved Android input handling for text, numbers, and bulk section entry.
- Updated Android packaging for Qt 6.11.1.
- Added Android compile SDK 36 support.
Interface
- Reworked the main layout for both desktop and Android.
- Desktop keeps the dense table-based workflow.
- Android now uses a stacked touch-first layout.
- Improved grouping for tempo, subdivision, polyrhythm, count-in, timer, speed trainer, accents, and volume.
- Added/fixed keyboard workflow:
Spacestarts/stops playback.Up/Downselects sections.Ctrl+Up/Ctrl+Downmoves the selected section.- Double-click section labels to rename.
Beat Window
- Added a Beat Window style selector.
- Added multiple Beat Window visual presets.
- Added timer remaining display to the Beat Window.
- Added subdivision relation display across Beat Window presets.
- Beat Window now filters styles depending on whether polyrhythm mode is active.
- Fixed Pulse preset text moving during the pulse animation.
- Fixed Sweep preset timer/subdivision overlap.
Rhythm Features
- Improved polyrhythm behavior with per-beat and per-bar modes.
- Improved common polyrhythm ratios in normal time signatures.
- Improved polyrhythm state handling during playback, count-in, and speed trainer use.
- Improved custom subdivision persistence.
- Custom subdivision patterns are now stored alongside presets in
presets.json. - Improved display handling for long custom subdivision patterns.
Sounds
- Added Woodblock 2 click sound:
wooden2.wavwooden2_accent.wav
Fixes
- Fixed section tempo changes not saving after restarting the app.
- Fixed regular up/down section navigation.
- Fixed section moving with
Ctrl+Up/Ctrl+Down. - Fixed Windows title bar disappearing when enabling always-on-top.
- Fixed always-on-top behavior so it works without needing an app restart.
- Fixed Android packaging failure caused by AndroidX requiring compile SDK 36.
- Fixed Beat Window style list showing incompatible styles in polyrhythm mode.
Android APK Note
The Android APKs included with this release are debug builds and are not release-signed.
When installing manually, Android may show warnings such as:
- the app is from an unknown source
- the app was built for testing
- Play Protect or the package installer may ask for confirmation
These warnings are expected for the current APKs. They do not mean the build failed.
Build Notes
- Current builds use Qt 6.11.1.
- Android packaging requires Android SDK Platform 36.
- Some Android Java deprecation warnings may appear during build; these do not currently block packaging.
3.0.4
What's Changed
🔄 Auto Update Checker
- On startup, the app silently checks the GitHub releases API for a newer version; a dialog is shown only if one is found, offering to open the download page in your browser
- Added a Check for Updates... button to the Settings dialog for manual checks
🪟 Title Bar Version
- Window title now displays the current version:
SH4DOWNOME v3.0.4
🐛 Bug Fixes
- Fix rest checkboxes overlapping subdivision grid — When selecting a subdivision pattern in the Subdivision Selector dialog, the Rest checkbox row now correctly expands the dialog height (250px → 290px) rather than clipping into the pattern grid. The dialog also properly returns to its compact size when switching tabs or clearing the selection.
🧹 Cleanup: Remove Unused Assets
Removed 30 orphaned/dead files:
Orphaned artifacts
resources/accent_dump.txt,resources/accent_hex.txt— leftover CertUtil inspection artifactspreset.json(root) — stale empty preset file superseded by the runtimedata/presets.json- 16 legacy pre-rendered rhythm icons from
resources/—quarter.svg,eighth.svg,sixteenth.svg,triplet.svg,treble_clef.png, and 11 compound-rhythm SVGs (dotted8th_16th,eighthresteighth, etc.) that were never loaded; NoteAssembler renders all note graphics dynamically
Unused svg/ assets (11 files)
flag*_down.svg(×4) — only_upflag variants are ever returnedaccidental_flat.svg,accidental_natural.svg,accidental_sharp.svg— no references anywherestem_up.svg,beam_single.svg,beam_double.svg,dot.svg— declared as stubs in NoteAssembler; all drawn directly via QPainter
resources.qrc refactored
- Merged three duplicate
<qresource prefix="/resources">blocks into one - Removed all entries for deleted files
3.0.3
What's Changed
🐛 Bug Fixes
- OBS Beat Window — resize no longer breaks after changing settings
The OBS beat window would resize correctly on first launch but lose its resize capability after opening and saving the Settings dialog. This was caused by astaticone-shot block in the settings handler that forced the beat widget into a fixed 306 px height withQSizePolicy::Fixed, overriding theExpandingpolicy applied when the popout window was created. The block has been removed, allowing the window to remain freely resizable across settings changes and app sessions.
3.0.2
Custom Subdivision Dialog — UX Improvements
New Features
- Insert after selection — "Add Pulse" now inserts immediately after the selected pulse instead of always appending to the end
- Drag to reorder — Pulse tiles can be dragged left/right to swap positions within the pattern
- Ctrl+Z undo — Up to 50-step undo history; all add, remove, clear, drag, and type changes are undoable
- Total duration display — Live beat count label next to the Preview button, time-signature-aware (respects compound time, half-note denominators). Colour-coded: green = fills whole bars, teal = whole beats, yellow = fractional
- Play preview — "▶ Preview" button plays the current pattern exactly once at the current tempo then stops automatically. Clicking again stops early
- Preset dropdown — Individual preset buttons replaced with a
QComboBox+ Apply button (10 built-in presets). Applies at the cursor position rather than always appending - Clearer pulse selection — Selected pulse shows a solid 3 px cyan border and top strip for unambiguous visual feedback
- Dotted / Accented grouped with Note / Rest — All four type controls are now in one logical row separated by a thin divider, instead of Dotted/Accented being stranded on the right
Changes
- Tuplet × button relabelled to None
CustomSubdivisionDialognow acceptsnumerator,denominator, andcompoundTimefrom the callingSubdivisionSelectorDialog, making all duration calculations and beat counts time-signature-aware- Preview timer duration calculation uses
compoundTimeso playback stops correctly in compound and half-note-denominator meters SubdivisionSelectorDialogforwardsMetronomeEngine*and time signature context to both Create and Edit custom pattern dialogsMainWindowpasses&metronomewhen openingSubdivisionSelectorDialog
3.0.1
What's Changed
🗂️ Portable Data Storage
All app data now lives in a data/ folder next to the executable — no more Windows Registry writes or roaming AppData usage. The folder is created automatically on first launch.
| File | Contents |
|---|---|
data/settings.ini |
Accent color, sound set, OBS state, always on top, volume |
data/presets.json |
All presets and sections |
data/custom_subdivisions.dat |
Custom subdivision patterns |
🪟 OBS Beat Window
- OBS window no longer opens automatically on first launch
- Window size is now saved and restored between sessions
- Added Lock size checkbox at the bottom of the window — prevents accidental resizing, state persisted to
settings.ini
🐛 Bug Fixes
- OBS widget not filling window — was locked to a fixed 306px height regardless of window size
- Subdivision image not scaling — note image now scales proportionally with the window
- Notes overflowing circle — wide patterns (e.g. 16× sixteenth notes) no longer extend outside the circle boundary
3.0.0
What's New
NoteValue Architecture Refactor
- Replaced all raw float
pulse.durationfields with a canonicalNoteValueenum across the entire codebase - Every note is now identified by type (Quarter, DottedEighth, TripletSixteenth, etc.) rather than a raw duration fraction
- Updated across all files: subdivision patterns, metronome engine, preset manager, pattern editor, main window, and serialisation
- Legacy preset migration: old float-based JSON presets automatically converted on load
- Preset JSON now saves human-readable note names instead of raw floats
Subdivision Presets — Additions
- Simple time: added Sixteenth Triplets, and composite patterns with 32nd notes
- Compound time: added composite patterns (Quarter + Two 16ths, etc.) and new tuplets (Duplets, Quartuplets, Quintuplets)
- Added
DupletNoteandQuartupletNoteenum values for compound-time tuplets
Custom Subdivision Dialog — Major Overhaul
- Replaced duration dropdown with a visual note tile picker (7 plain notes: 64th → Whole)
- Added tuplet button row (×, 2–9) replacing old triplet-specific tiles; invalid combinations automatically hidden per selected note
- Clicking a note tile immediately adds a pulse when nothing is selected — no need to click "Add Pulse"
- Pattern name field embedded directly in the dialog — no second popup after OK
- Group title renamed: Edit Selected Pulse → Add / Edit Selected Pulse
NoteValue System — Further Expansion
- Added 22 new NoteValue entries covering duplet through nonuplet × Quarter/Eighth/Sixteenth/32nd (2–9 per beat)
- Full serialisation and lookup support for all new values
- New
resolveTupletNoteValuehelper for mapping base note + tuplet number to a concrete value
Rendering Fixes
- Beam partial stubs no longer appear on both sides of a note — right-side stub now only draws on the first note in a group
- Mixed tuplet patterns (some tuplet notes, some plain) now render sub-group brackets over consecutive tuplet runs instead of bare floating numbers
number_2.svgglyph added for duplet bracket display
Renaming
- Rename Preset (Song) → Rename Piece
- New song name: → New piece name:
2.0.2
Release Notes
Audio & Timing
- Pitch shift on startup fixed — samples now reloaded to actual device rate after the audio device opens, not the constructor default
- Cumulative drift eliminated — beat and polyrhythm positions computed as round(cycle × barLength × sampleRate) per cycle instead of accumulated integer addition
- First-beat click fixed — playback pre-rolls by one buffer period so hardware has settled before the first beat fires
- Schedule swap deduplication — boundary beats no longer double-fire when tempo or subdivision changes mid-bar
- Runtime sample rate changes handled gracefully — buffers reloaded and all pulse positions rescaled if device rate shifts during a session
- Dotted note playback — duration stored as base × 1.5 so the engine reads it directly with no extra multiplier
- Count-in correctly isolated from the repeating pattern in both subdivision and polyrhythm modes
Sections
- New sections insert below the selected row instead of always appending to the bottom
- Accents now save and recall correctly in standard subdivision mode
Note Rendering
- Whole notes no longer draw a stem
- Beam groups break correctly on Quarter, Half, and Whole notes — no more malformed glyphs
- Triplet "3" bracket and number now render for all tuplet sizes, including single-note widgets
- Mixed patterns (some triplet, some not) show per-note "3" markers via new perNoteTupletNumbers config field
- Half and Whole note types now correctly resolved in all three configForPattern implementations
Custom Subdivision Editor
- Dotted notes display correct glyph — all duration-to-type lookups divide by 1.5 before selecting the base note shape
- Dotted note labels show proper names (Dot Qtr, Dot 8th, etc.) instead of raw numbers like 1.500
- Note glyph no longer overlaps the label — reserved content area with gap enforced in each pulse widget
- Triplet "3" no longer clips at the top of pulse widgets
Upgrading
Move the presets.json file to the new folder.
Known Issues
- Custom Subdivisions are in an early state of development.
- Some Subdivisions look a little funky.
v2.0.1 Alpha
- Fixed compound time thanks to Blake.
- Changed the way the OBS Widget was shown to help with display scaling, it now opens in a new window for OBS to capture.
v2.0.0 Alpha
Alpha version.
This is mostly stable and is the most up to date version I have, lost interest for the time being, might revisit in the future for bug squashes.
- Changed audio engine and fixed bugs for more stability.
- Added custom subdivision stuff to allow whatever you want to come up with, not sure on the issues/bugs.
- You can reorder sections using CTRL+Arrows.
- Space bar to play and stop.
- Probably other stuff that I've forgot I added.