I received the second email today and it looks great.
Beta testers needed / Play with my app! It's fun!
So cool. Automation is magical. Thanks for the confirmation!
@Mark_Rocka This thing is awesome.
I used it to work on my vamping after this weekend’s lesson and I love it.
Great to hear! Thank you!
I’ve had enough users (including myself more than once) wonder why there was no sound on their iphones… only to discover the switch on the side of the phone was set to Silent.
I know some apps actually still play sound when that switch is set to silent, so I dug in today. Long story short, I got it working. The app now respects the phone’s current volume setting regardless of the switch position.
I have a feeling this is going to save me a lot of trouble tickets.
Broken link @Mark_Rocka
Bottom of this link https://cqsys-ares.com/mark_sandbox/
Header: Your Next Jam Starts Here
Start Playing Free https://cqsys-ares.com/app Page not found
Also at the top of the page Try my trainer free
We’re not using that link any more. All of my production code now rolls out to jamtrainer.com
You can get straight to the app by going to https://jamtrainer.com/app
Nice! Thanks for the update! I would have never guessed that getting emails to look good was so hard. Turns out, all the various email apps render them differently, so finding something that looks decent on all of them is a lot of work.
Glad it came through looking nice.
Just for the record, I also got the ear training email today and it looked good! No issues spotted.
This is such good news. You have no idea. Thanks!
Just got a chance to register and poke around in the app, this is incredible. Nice work!
I know I’ve been a bit quiet for a few days. I haven’t stopped working on the project. Quite the opposite, in fact. It’s just that I’ve been cleaning the code and making it more efficient. A few days of streamlining things now will make new additions going forward way easier. For example, if we decide we need a new color theme, it’s now literally a matter of giving a specific set of variables new color IDs and everything just falls in to palce.
It wasn’t ALL grunt work, though. I did spend a big chunk of today adding a walking bass line. Check it out and let me know what you think. Just turn on Walking bass in the side bar under Audio/Mix.

I listened to the walking Bass on a couple of songs. It was walking the entire way on every measure; that is, it was playing on every & in every square. I am not an expert on this; though it seems the walking notes are usually for leading into chord changes.
Walking guitar notes do that. A walking bass line usually walks the whole song. Not exactly a bluegrass thing, but it fits in enough songs to make it an option. Maybe I should make a 3rd bass option to walk into chord changes like guitar walking does.
What you said, not exactly a bluegrass thing makes sense. I believe it will be good add the 3rd bass option to walk into the chord changes.
I just googled the topic, here is an excerpt: (The Tasteful Moderation section for the bluegrass application).
"When to Use It:
- Instrumental Solos: It is highly effective during fast-tempo fiddle, mandolin, or banjo solos to add a swing or jazzy feel.
- Leading into a New Section: Bass players often use a walking line to transition from the Chorus back to the Verse, or the Verse into the Chorus.
- Tasteful Moderation: Unlike jazz, where walking lines are constant, bluegrass bass usually limits walking to strategic measures to avoid cluttering the vocal lines."
Was playing around with Walking Bass and Walking Guitar last night and noticed that on 12 Bar Blues when I turned on Walking Guitar there was no guitar walking.
Interesting! Turns out, it has to do with the fact that there are 7th chords messing up the walk. I’ll get on that now. Thanks!
Found it! I have a helper that strips out the variations in chords so the walk cycle can fire without having to monitor every chord and every variation. 7th chords weren’t in the list.
I’ll get that fix loaded up later today. Thanks for the report!
Whew! What a day! Today was spent chasing bugs and more code efficiency. Everything crossed out was tested today, and any related bugs resolved and retested. Once I got done with the list, I had another one created. Those are the ones at the bottom that aren’t crossed out. That’s what I’ll be starting on tomorrow.
This is the boring part of this project, but possibly the most necessary. If anyone wants to jump in on a section or two, let me know.
- Playback interruptions & races (your richest vein)
Double-tap / triple-tap Play fast → exactly one count-in, one song, no doubled audioPress Pause during the count-in → cancels cleanly (no song starting from measure 1 a beat later)Press Stop during the count-in → clean, returns to ReadyPlay → Pause → Play → Pause rapidly several times → no zombie scheduler, highlight stays on the right cellTap a cell to play-from while already playing → old playback dies, new one starts cleanRestart button mid-song, and mid-pause → fresh count-in from top both timesHit Stop exactly on a section boundary / chord change → no timeSig-undefined crash, no double-boom at the seamLet a song loop many times unattended → no drift, no slowdown, no stacking
- Audio lifecycle (the iPad-at-a-jam reality)
Start a song, background the app for 30s, return → auto-pauses, resumes clean (no machine-gun burst of stacked beats)Background during the count-in specifically → returns sanelyLet the app sit idle 5+ min, then Play → first count-in click and downbeat both audible (the cold-start fix)Phone call / Siri / alarm mid-song (iOS) → auto-pause, then auto-resume afterPlug/unplug headphones or a Bluetooth speaker mid-songFlip the hardware mute switch mid-song → audio keeps coming through (media channel)Manually lock the screen mid-song → playback auto-pauses; unlock → auto-resumes. (Wake lock prevents the automatic idle-lock during a song; it does not keep audio playing through a deliberate lock.)
- Network flakiness & offline (where the phantom-library class hides)
Cold load (clear site data) on slow/throttled connection, then go offline as the library appears → every card still opens (not phantom)Open a song offline, edit, save → persists; reconnect → syncsGo offline mid-session-syncToggle airplane mode on/off repeatedly while browsing the libraryFirst-ever visit offline with empty cache → Play shows the right “connect to internet” message, and a later online Play actually recovers (doesn’t stay silently dead)After a deploy, follow the SW update steps — then also test the stale case (skip the update) to confirm you can tell the difference
- Editing edge cases & the dirty/save prompt
Edit a chord, hit Save, immediately hit Back → no false “unsaved changes” promptToggle a setting (walking notes, capo) then toggle it back → behaves sanely on BackOpen a global song, edit it, Back → “Save Copy” path worksMulti-cell select within a section → Copy / Cut / Delete; check no orphaned split cells left behindDelete a fill cell and a split cell → reverts to underlying chord / cleans up correctlyBuild a song with every meter (2/4, 3/4, 4/4, 6/8, 9/8) in different sections, then play through the transitionsPer-section BPM differences + change global BPM mid-playback → all sections shift by the delta liveCapo + transpose + change Accidentals (sharps/flats/auto) all on one song → chord names and sounding names stay correct everywhere (grid cells, split cells, /bass labels)
- Boundary / “weird data” inputs
Very long song name, lyrics, notes; emoji / special chars in fieldsA song with one cell; a song with a huge number of sections/measuresMax BPM, min BPM; capo at extreme valuesEmpty section; section with only effect/rest/stop cells-
Import a Strum Machine export with voltas, half-measures, 6/8 mid-bar changes → imports with the⚑ flag and warnings, never a failed/silent import Import a JT backup → restores songs + lists, skips existing IDs
- Sharing / embed / session (multi-device)
Generate a share link, open it logged-out → “Save to My Library” worksEmbed link in an iframe somewhere → plays, editing UI hiddenHost a Jam Session, join from a second device → song + mix pushes to follower; follower who owns the song uses their own copyFollower tweaks their mix mid-session → host heartbeats don’t stomp itShare/session while an instrument is temporarily muted → recipient gets that mix (known tradeoff — confirm it’s the intended behavior, not a surprise)
- MP3 export parity
Export a 4/4 song → no long silent tail; length is rightExport with swing turned up → exported swing matches liveExport a song with fills, walking notes, count-in, multiple meters → matches what you hear live, beat for beat
- Input methods & accessibility
Foot pedal: works after backgrounding/foregrounding (focus regained); starts playback; arrows/PageUp/Space all fireSpacebar and pedal honor the sbKeyAction pref (pause vs stop), and “pause” shows the floating popupTap-to-edit the BPM number and Max BPM number → the input keeps focus (pedal catcher doesn’t steal it)All four themes on every screen — especially selected/playing cells, toggles, colored chips (the night theme’s blue-on-blue class of bug)-
Jam Mode on a wide chord (F#m, B♭)→ font auto-sizes to fit, doesn’t overflow
- Separate audio paths (don’t forget these exist)
Games (Name That Chord, Degree Trainer) after the app’s been idle → first chord isn’t clipped (they use a different audio entry than the song scheduler)Tuner + droneRun a game, then go straight to playing a song → audio context is healthy for both
- Account & auth lifecycle
Sign up → verification email arrives; tap link → verified banner clearsPassword reset end-to-end; reset for an unregistered email (should silently 200, no enumeration)Log in on a second device → songs sync downSign out mid-edit with unsaved changes → prompted?Token expiry / revocation while online (vs the offline-null suppression you already hardened)
- Lists & list playback
Create / rename / delete a list; add one song to multiple listsPlay a whole list → does it advance song-to-song correctly, honor each song’s tempo/meter?Delete a song that’s a member of a list → removed from the list cleanly, no dangling entryPrev/Next song navigation within a list vs the full library
- Global library, publishing & admin review
-
Publish a song already in the global library → Replace / New Entry /✕ modal;name-collision(not just ID) routes to Replace Publish carries savedMix; publisher-account gatingAdmin review queue: approve/reject; an approved song appears for a different userOpen a global song, edit, Back → “Save Copy” creates a personal copy (don’t mutate global)
- Arrangement editor
Build a custom arrangement (Intro, A×2, B, A); reorder, duplicate, removeArrangement + per-section meter/BPM changes → transitions play rightDelete a section that’s referenced in the arrangement → arrangement updates, no crash
- Walking bass across meters & combos
Walking bass in 2/4 and 3/4 (only 4/4 is built — confirm the others fall through gracefully , no crash/wrong octave)Walking bass + capo, + guitar licks, + splits/effects, + the octave-leap-resolve rule at phrase boundariesWalking bass MP3-export parity vs live
- Count-in / loop-range / auto-speed-up matrix
Count-in on/off, double, “every repeat” — in each meter, and with play-from-cell (which skips count-in)Loop a single cell; loop range + walking bass; loop range that starts mid-section in a different meterAuto speed-up: raises BPM each loop to Max, then holds; Max BPM tap-to-edit; Auto+ with a loop range
- Effect/split/cell-conversion combinatorics
-
Every cell type (rest, skip, ring◇, stop-cut !, note♩, root/slash, split-half, split-third) created, converted between, and deleted Split a cell then apply an effect to one half; copy/paste cells that carry effects and fillsA fill spanning a section boundary; transpose/key-change with fills present (underlying chord rewrite)
- Legacy data & storage limits
Open a very old saved song (legacy feel, missing swingIntensity / walking / walkingBass / per-section timeSig+bpm) → loads with sane defaults, no false-dirty-
SM imports with each warning category (volta, half-measure, 6/8 mid-bar, 3-chord, push) →⚑ flag, never silent fail localStorage quota exceeded (_persistSongs falls back to personal-only)
- Tab view parsing & sync
Tab with the label-line vs tab-line | asymmetry (beat 4 of even measures); tab offset; tab loopHighlight stays aligned across a meter change; edit tab text then play; Tab ⇄ Jam Mode mutual exclusivity
- Chrome you rarely re-test
*Chord fingering charts: every instrument × type, Scales mode, key changes (watch the 1st-string dot-clip fix)
Print → confirm pure B&W in every theme, font sizes, diagram inclusion, long-song page breaksCross-tab: same account in two tabs editing the same song; SW CACHE_VERSION bump forcing a sample re-fetch, then offline