- buildClassicalNotes() had an unreachable return after the note-building chain, so simplifyNotes() (the Full/Simple note-density toggle) was never applied to any isClassical piece — fixed by assigning to a variable first. - Jingle Bells' note durations used an eighth-note-heavy pattern that compressed the tune to roughly half its correct length instead of the familiar quarter/half-note "Jingle bells, jingle bells" cadence — replaced with a standard, measure-verified rhythm. - Drunken Sailor inserted a stray extra beat between each of its 3 passes (t+=q, one full quarter note tied to the beat grid) which broke the 4/4 pulse; changed to an off-grid pause. Also extended its chord backing to cover the chorus (mm9-16), which previously had none on repeat passes. - Removed O Fortuna (Orff, 1936) and Sabre Dance (Khachaturian, 1942) from Classical, and Rudolph the Red-Nosed Reindeer (1949), Frosty the Snowman (1950), and Winter Wonderland (1934) from Christmas — none of these are actually public domain (all still under active copyright), despite being filed under a "public domain compositions" list. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PbwKCCj1vwAoqgRYDoqgeL
266 lines
9.9 KiB
Markdown
266 lines
9.9 KiB
Markdown
# Drum Rhythm Game
|
|
|
|
A browser-based drum rhythm game. Notes scroll down the screen and you hit the matching drum pad in time — like Rock Band, but it runs entirely in your browser with no server, no dependencies, no install. Just open `index.html`.
|
|
|
|
Works with **keyboard**, **Wii Rock Band drums**, **Xbox/PS Rock Band drums**, **Guitar Hero drums**, or any USB gamepad. Includes a **Remap Pads** button to configure any controller.
|
|
|
|
## How to Play
|
|
|
|
1. Open `index.html` in Chrome or Edge
|
|
2. Pick a genre and song
|
|
3. Adjust speed/volume sliders if desired
|
|
4. Click **Start**
|
|
5. Hit the pads when notes reach the line:
|
|
- **F** = Red (Tom)
|
|
- **G** = Yellow (Snare)
|
|
- **H** = Blue (Hi-hat)
|
|
- **J** = Green (Tom 2)
|
|
- **Space** = Kick (Bass drum)
|
|
- **D** = Crash (off by default)
|
|
- **K** = Ride (off by default)
|
|
- **L** = Tom 3 (off by default)
|
|
- **Escape** = Pause
|
|
6. **Right-click** any genre tab or song to hide it
|
|
|
|
## Features
|
|
|
|
- **18 Genres** across two modes: synth orchestra songs + drum beat patterns
|
|
- **119 synth pieces** with full synthesized orchestra background
|
|
- **120 drum patterns** across 8 genres
|
|
- **Note density toggle** — switch between Full and Simple (fewer notes for beginners)
|
|
- **Drums or Orchestra mode** — choose whether pad hits play drum sounds or the actual melody note
|
|
- **Speed control** — slow down to 50% for practice or speed up to 150%
|
|
- **Volume control** — adjustable master volume
|
|
- **Pause/Resume** — press Escape or the pause button mid-song
|
|
- **Gamepad Remap** — configure any USB drum kit with the Remap Pads button
|
|
- **Hide genres/songs** — right-click to hide, "Show All" to restore, saved across sessions
|
|
- **Multiplayer** — take turns, scores compared at the end
|
|
- **8 lanes** — 5 default pads + 3 extra (Crash, Ride, Tom 3) toggled on via Active Pads
|
|
- **Preview** — hear any song before playing
|
|
- **Leaderboard** — scores saved locally
|
|
- **Settings persistence** — speed, volume, gamepad mapping, hidden items all saved to localStorage
|
|
- **Math-protected reset** — Reset All Data requires solving a math problem to prevent accidents
|
|
|
|
## Song List
|
|
|
|
### Nursery Rhymes (15 songs)
|
|
- Twinkle Twinkle Little Star (Traditional, 1760s)
|
|
- Mary Had a Little Lamb (S.J. Hale, 1830)
|
|
- Happy Birthday (P.S. Hill, 1893)
|
|
- Hot Cross Buns (English, 1798)
|
|
- London Bridge Is Falling Down (English, 1744)
|
|
- Old MacDonald Had a Farm (English, 1706)
|
|
- Row Row Row Your Boat (English, 1852)
|
|
- Three Blind Mice (English, 1609)
|
|
- Itsy Bitsy Spider (English, 1910s)
|
|
- Pop Goes the Weasel (English, 1850s)
|
|
- Chopsticks (Euphemia Allen, 1877)
|
|
- Lavender's Blue (English Traditional, 1670s)
|
|
- Shortnin' Bread (Traditional, 1900s)
|
|
- Jack and Jill (English, 1765)
|
|
- Humpty Dumpty (English, 1797)
|
|
|
|
### Singalong (20 songs)
|
|
- Drunken Sailor (Sea Shanty)
|
|
- Wellerman (NZ Sea Shanty, 1860s)
|
|
- Molly Malone (Irish, 1880s)
|
|
- Whiskey in the Jar (Irish Traditional)
|
|
- The Parting Glass (Irish/Scots Traditional)
|
|
- Leave Her Johnny (Sea Shanty)
|
|
- Blow the Man Down (Sea Shanty)
|
|
- Randy Dandy Oh (Sea Shanty)
|
|
- South Australia (Sea Shanty)
|
|
- Roll the Old Chariot Along (Sea Shanty)
|
|
- Haul Away Joe (Sea Shanty)
|
|
- Spanish Ladies (Royal Navy, 1790s)
|
|
- The Skye Boat Song (Scottish, 1884 — Outlander)
|
|
- Bella Ciao (Italian Partisan Folk — Money Heist)
|
|
- Amazing Grace (1779)
|
|
- Auld Lang Syne (1788)
|
|
- When the Saints Go Marching In (Spiritual)
|
|
- Oh My Darling, Clementine (1884)
|
|
- Scarborough Fair (English Medieval)
|
|
- My Bonnie Lies Over the Ocean (Scottish, 1881)
|
|
|
|
### Christmas (17 songs)
|
|
- Jingle Bells (1857)
|
|
- Silent Night (1818)
|
|
- Deck the Halls (1862)
|
|
- We Wish You a Merry Christmas (1500s)
|
|
- O Christmas Tree (1824)
|
|
- The First Noel (1823)
|
|
- Joy to the World (1719)
|
|
- Away in a Manger (1885)
|
|
- 12 Days of Christmas (1780)
|
|
- Hark the Herald Angels Sing (1840)
|
|
- O Come All Ye Faithful (J.F. Wade, 1743)
|
|
- God Rest Ye Merry Gentlemen (English, 1500s)
|
|
- What Child Is This (English, 1865)
|
|
- Angels We Have Heard on High (French, 1862)
|
|
- O Holy Night (A. Adam, 1847)
|
|
- Good King Wenceslas (Finnish, 1582)
|
|
- We Three Kings (J.H. Hopkins Jr., 1857)
|
|
|
|
### Folk (8 songs)
|
|
- Oh! Susanna (Stephen Foster, 1848)
|
|
- Greensleeves (English, 1580)
|
|
- Camptown Races (Stephen Foster, 1850)
|
|
- Red River Valley (American, 1870s)
|
|
- Home on the Range (American, 1870s)
|
|
- Yankee Doodle (American, 1770s)
|
|
- Turkey in the Straw (American, 1820s)
|
|
- Danny Boy (Irish, 1910s)
|
|
|
|
### Spirituals (8 songs)
|
|
- Swing Low, Sweet Chariot (1862)
|
|
- Go Down Moses (Traditional)
|
|
- Wade in the Water (Traditional)
|
|
- Kumbaya (Traditional)
|
|
- Michael Row the Boat Ashore (1860s)
|
|
- He's Got the Whole World (Traditional)
|
|
- Nobody Knows the Trouble I've Seen (Traditional)
|
|
- Battle Hymn of the Republic (1861)
|
|
|
|
### World (8 songs)
|
|
- Hava Nagila (Jewish/Israeli, 1918)
|
|
- La Cucaracha (Mexican Traditional)
|
|
- Frere Jacques (French, 1780s)
|
|
- Cielito Lindo (Mexican, 1882)
|
|
- Waltzing Matilda (Australian, 1895)
|
|
- 'O Sole Mio (Italian, 1898)
|
|
- Take Me Out to the Ball Game (American, 1908)
|
|
- She'll Be Coming Round the Mountain (American, 1890s)
|
|
|
|
### Ragtime (8 pieces)
|
|
- The Entertainer (Scott Joplin, 1902)
|
|
- Maple Leaf Rag (Scott Joplin, 1899)
|
|
- The Easy Winners (Scott Joplin, 1901)
|
|
- Elite Syncopations (Scott Joplin, 1902)
|
|
- Solace (Scott Joplin, 1909)
|
|
- Peacherine Rag (Scott Joplin, 1901)
|
|
- The Cascades (Scott Joplin, 1904)
|
|
- Pineapple Rag (Scott Joplin, 1908)
|
|
|
|
### Classical (24 pieces)
|
|
- Beethoven's 5th (Opening)
|
|
- Hall of the Mountain King (Grieg)
|
|
- Ride of the Valkyries (Wagner) — Apocalypse Now
|
|
- Mars, Bringer of War (Holst)
|
|
- Toccata & Fugue in D Minor (Bach)
|
|
- William Tell Overture — Gallop (Rossini) — The Lone Ranger
|
|
- Bolero (Ravel)
|
|
- Also Sprach Zarathustra (R. Strauss) — 2001: A Space Odyssey
|
|
- Barber of Seville Overture (Rossini) — Bugs Bunny
|
|
- The Blue Danube (J. Strauss II) — 2001: A Space Odyssey
|
|
- Night on Bald Mountain (Mussorgsky) — Fantasia
|
|
- Sorcerer's Apprentice (Dukas) — Fantasia
|
|
- Swan Lake Theme (Tchaikovsky)
|
|
- Morning Mood (Grieg)
|
|
- Flight of the Bumblebee (Rimsky-Korsakov)
|
|
- Dance of the Sugar Plum Fairy (Tchaikovsky)
|
|
- 1812 Overture Finale (Tchaikovsky)
|
|
- Habanera from Carmen (Bizet)
|
|
- Spring from Four Seasons (Vivaldi)
|
|
- Fur Elise (Beethoven)
|
|
- Canon in D (Pachelbel)
|
|
- Hungarian Dance No. 5 (Brahms)
|
|
- Ode to Joy (Beethoven)
|
|
- William Tell Overture — Storm (Rossini)
|
|
|
|
### Video Games (5 pieces)
|
|
- Korobeiniki / Tetris Theme (Russian Folk, 1861)
|
|
- Turkish March (Mozart)
|
|
- Hungarian Rhapsody No. 2 (Liszt)
|
|
- Can-Can (Offenbach)
|
|
- Kalinka (Russian Folk, 1860)
|
|
|
|
### Chiptune Originals (6 pieces, composed by Claude.ai)
|
|
- Pixel Quest (Platformer)
|
|
- Starfield (Space Shooter)
|
|
- Dragon's Keep (RPG Overworld)
|
|
- Turbo Dash (Racing)
|
|
- Dungeon Crawl (Dark Adventure)
|
|
- Victory Fanfare (Boss Defeated)
|
|
|
|
### Drum Patterns (120 patterns)
|
|
- **Rock** (15): Basic Rock, Classic Rock, Punk Rock, Arena Rock, and more
|
|
- **Metal** (15): Double Bass, Thrash, Doom Metal, Blast Beat, and more
|
|
- **Jazz** (15): Jazz Ride, Bebop, Bossa Nova, Fusion, and more
|
|
- **Hip Hop** (15): Boom Bap, Trap, Lo-Fi, Drill, and more
|
|
- **Funk** (15): Classic Funk, Ghost Notes, P-Funk, Afrobeat, and more
|
|
- **Latin** (15): Samba, Salsa, Reggaeton, Cumbia, and more
|
|
- **Electronic** (15): Four on the Floor, Breakbeat, DnB, Dubstep, and more
|
|
- **Country** (15): Two-Step, Bluegrass, Rockabilly, Gospel, and more
|
|
|
|
## USB Drum Kit Compatibility
|
|
|
|
The Gamepad API works with any USB controller. Use the **Remap Pads** button to configure your kit.
|
|
|
|
| Kit | Connection |
|
|
|-----|-----------|
|
|
| Wii Rock Band drums | USB dongle (default mapping) |
|
|
| Xbox 360 Rock Band drums | USB wired |
|
|
| PS3/PS4 Rock Band drums | USB |
|
|
| Guitar Hero drums | USB |
|
|
| Roland/Alesis/Donner | USB-MIDI adapter |
|
|
| Any USB gamepad | Remap to configure |
|
|
|
|
## Data Storage
|
|
|
|
All data is saved to **localStorage** in your browser — nothing is lost when you close the page.
|
|
|
|
| Key | What's Stored | How to Clear |
|
|
|-----|--------------|-------------|
|
|
| `drgame5` | Leaderboard scores | Clear button on Leaderboard |
|
|
| `drgameSettings` | Speed + volume | Reset button in Settings |
|
|
| `drgameGpMap` | Gamepad button mapping | Reset All Data |
|
|
| `drgameHidden` | Hidden genre tabs | Right-click → Show All |
|
|
| `drgameHiddenSongs` | Hidden songs per genre | Show N hidden button |
|
|
|
|
**Reset All Data** clears everything but requires solving a math problem first.
|
|
|
|
## Synthesizer
|
|
|
|
All sounds are generated in real-time using the Web Audio API — no audio files needed:
|
|
|
|
| Sound | Method |
|
|
|-------|--------|
|
|
| Kick | Sine oscillator, 180Hz to 40Hz sweep |
|
|
| Snare | Highpass noise burst + 180Hz tone |
|
|
| Hi-hat | Highpass noise burst, very short |
|
|
| Toms | Sine oscillator pitch sweep |
|
|
| Crash | Long noise burst, wide frequency |
|
|
| Ride | Metallic ping, bandpass filtered |
|
|
| Strings | Sawtooth + lowpass filter |
|
|
| Brass | Square + lowpass filter |
|
|
| Woodwind | Triangle oscillator |
|
|
| Bass | Sine oscillator, low frequency |
|
|
| Timpani | Sine frequency sweep |
|
|
| Choir | Multiple detuned sine oscillators |
|
|
| Chiptune | Square wave with pulse bass |
|
|
|
|
## Tech
|
|
|
|
- Pure vanilla JavaScript — no libraries, no build step, no server
|
|
- Single `index.html` file (~4850 lines)
|
|
- Web Audio API for all sound synthesis
|
|
- Canvas 2D for the note highway
|
|
- Gamepad API for drum kit input
|
|
- localStorage for all persistent data
|
|
- Works on Windows, Linux, and Mac
|
|
|
|
## Hosting
|
|
|
|
No server is required to play, but if you want it reachable at a URL, a
|
|
`Dockerfile` + `docker-compose.yml` are included to serve `index.html` from
|
|
nginx in a container, plus a `DEPLOYMENT.md` with a Caddy 2 reverse-proxy
|
|
config for putting it behind an FQDN with automatic HTTPS.
|
|
|
|
## License
|
|
|
|
[MIT](LICENSE)
|
|
|
|
## Disclaimer
|
|
|
|
Rock Band is a trademark of Harmonix Music Systems. Guitar Hero is a trademark of Activision Publishing. Wii is a trademark of Nintendo. Xbox is a trademark of Microsoft. PlayStation is a trademark of Sony Interactive Entertainment. This project is not affiliated with, endorsed by, or connected to any of these companies. All trademarks are the property of their respective owners and are used here solely for hardware compatibility reference.
|