Repository navigation
Releases: Pbbobkanobi67/chord-shed
Release list
Chord Shed 2.5 — share your song ideas
Web: https://chord-shed.vercel.app
Share song ideas
- Share on a song idea sends a readable chord sheet with a link. For example:
On your phone it opens the normal share sheet (WhatsApp, Messages, email…). On a computer it copies to the clipboard.
Verse ×2: C Am F G Chorus: F G C C - Whoever opens the link is asked "Add the shared song idea?". It's added as new copies, so nothing of theirs is overwritten.
- Import (next to New) takes a pasted link, which is handy in the app.
- The song travels inside the link itself. Nothing is uploaded anywhere.
No more Roman numerals
- The starter chart is now called C – Am – F – G.
- Chords in a key labels each chord home, major, minor or dim, with a line saying what that means.
Build charts from the Chords page
A strip under the chord diagram shows which chart Add puts chords into, and what's already in it:
- switch charts, or start a new one, right there,
- tap a chord to hear it, or remove it with the bin,
- Play the chart without leaving the page.
Updating
- From 2.2 or later: update inside the app.
- From 2.1 or older: download the APK below.
versionCode 16, versionName 2.5, 562 KB. Same signing key.
Chord Shed 2.4 — song ideas
Web: https://chord-shed.vercel.app
Build songs out of your charts, and play them without leaving the Charts page.
Play stays on the Charts page
Play on a chart now plays it right there, lighting up each chord as it goes, instead of jumping to the Practice tab. It uses the tempo and strum pattern you set on Practice.
Song ideas
A new section under your charts:
- Make a song idea and add your charts to it as parts: verse, chorus, bridge, the same chart as often as you like.
- Each part can repeat ×1 to ×16, and you can move parts earlier or later or remove them.
- Play song plays the whole arrangement and loops, lighting up the current part and chord. The song shows its length in bars and minutes at your tempo.
- Tap a part to open its chart and change the chords. You'll hear the change on the next time round, even while it's playing.
- Rename, duplicate and delete song ideas like charts. Deleting a chart warns you if a song idea uses it, then takes it out.
Song ideas are saved on your device with your charts. Your existing charts are unchanged.
Updating
- From 2.2 or 2.3: update inside the app (the banner, or Options → Check for updates).
- From 2.1 or older: download the APK below.
versionCode 15, versionName 2.4, 558 KB. Same signing key.
Chord Shed 2.3 — clearer chart buttons
Web: https://chord-shed.vercel.app
Changes
- Chart buttons are icons now. Each chord in a chart has a left arrow, a bin and a right arrow, with tooltips, instead of the cryptic
‹ × ›characters. The buttons are bigger and easier to tap, and the arrows that can't go any further are greyed out. - The right version number on the web. Options on the website said 1.5. It says 2.3 now, and the build checks that the two numbers can't drift apart again.
- No more garbled dashes on servers that don't say which text encoding they use.
- The Practice-tab chord diagram resizes properly when the window changes size.
Updating
- From 2.2: this is the first update you can install inside the app. Open Chord Shed, tap Update on the banner (or Options → Check for updates), allow installs from Chord Shed the first time, then confirm on Android's screen.
- From 2.1 or older: download the APK below, as before.
versionCode 14, versionName 2.3, 554 KB. Same signing key.
Chord Shed 2.2 — updates itself
Web: https://chord-shed.vercel.app
Chord Shed can now update itself, without the trip through the browser.
How it works
- Once a day, when the app opens, it checks for a newer version and offers it in a banner (Update / Later). Nothing downloads until you tap Update. Offline, it says nothing.
- Update downloads the new version inside the app, with a progress bar, then hands it to Android, which shows its usual "update this app?" screen. Your charts are kept.
- The first time only, Android asks you to allow installs from Chord Shed. The banner's Allow button takes you to that switch, and the update carries on when you come back.
- Options → Check for updates still works too, and now offers Update now.
What it checks before installing
- The download's SHA-256 matches the checksum published in
version.json. - It is Chord Shed (
com.chordshed.app), at a newer version than the one installed. - It is signed with the same key as the installed app.
The app chooses what to download itself, from one fixed address over HTTPS. The page can only ask it to start.
Updating to 2.2
2.1 and older don't have the updater, so this update still goes through the browser, the same as before. From 2.2 on, updates happen inside the app.
New permission
REQUEST_INSTALL_PACKAGES, so the app can hand an update to Android's installer. Android still asks you to confirm every install.
versionCode 13, versionName 2.2, 554 KB. Same signing key.
Chord Shed 2.1 — strings that sound like strings
Web: https://chord-shed.vercel.app
The ukulele and guitar sound better, and the Practice tab now shows the chord shape as the chords change.
What was wrong with the sound
- Out of tune up the neck. The string model rounded each string's length to a whole number of samples, so higher notes drifted up to ~15 cents flat.
- Thin. Each string was started with a burst of noise that was then treble-boosted. That left the fundamental 10–15 dB quieter than the 4th harmonic.
- Flat and static. Every note had the same decay, there was no instrument body or room, and the sound was mono.
What it does now
- A fractional delay keeps every note within 1 cent of pitch.
- The string is plucked the way a real one is, pulled into a triangle at the pick point, so the fundamental carries the weight. A little noise stays in for the attack.
- Two slightly detuned vibrations per string give the shimmer a real string has. Low strings ring longer than high ones, and the guitar has a light pick click.
- Separate body tone for steel-string guitar and nylon ukulele, a small room reverb, and the strings spread across the stereo field.
- Strums vary slightly in timing and strength, up-strums are lighter, and muted "chunk" strums are duller.
Practice tab
The Playing card draws the shape being strummed. With Follow chart on, it changes with each chord.
versionCode 12, versionName 2.1, 546 KB. Same signing key.
Chord Shed 2.0 — the tuner actually works
Web: https://chord-shed.vercel.app
The microphone works as of 1.9. This makes the reading stop jumping around.
What was wrong
The detector took the tallest autocorrelation peak, which is whichever harmonic or sub-harmonic happens to correlate best. Measured against synthetic tones it read G3 as MIDI 36 in 73 of 80 frames, and ukulele C4 as MIDI 36 in 77 of 80 — locked onto a sub-harmonic, flipping between several wrong notes. It also ran on every animation frame, so every bit of instability was displayed 60 times a second.
What it does now
Normalised square difference (McLeod): picks the earliest peak within 88% of the strongest rather than the tallest, which is what removes the octave errors, and uses the peak height as a clarity score.
Around that:
- analysis every 70 ms instead of 60 times a second
- a clarity gate and a higher loudness gate, so room noise reports nothing at all
- a median of the last five estimates, so a single bad frame cannot move the reading
- the displayed note only changes once a new one has held for three readings
- the needle eases to its position instead of snapping, and goes idle after a second of silence
Measured
Ten tones from low E to A4, all within 0.07 cents. Silence, white noise and a very quiet tone are all rejected. Thirty noisy frames of G3 give one distinct note, where the old detector gave three. The test lives in tools/test-detector.js.
versionCode 11, versionName 2.0, 542 KB. Same signing key.
Chord Shed 1.9 — microphone self-test
Web: https://chord-shed.vercel.app
1.8 got the OS permission working (OS mic permission: granted), but capture still fails with "Could not start audio source" and blank device ids. That is AudioRecord failing to open, which sits below the permission layer.
Possible fix: adds MODIFY_AUDIO_SETTINGS. Chromium's audio input path configures echo cancellation and the audio mode through AudioManager, and without this permission opening capture can fail outright. It is a normal permission, so there is no new prompt.
Definitive diagnosis: when the attempts fail, the app now opens the microphone from native code, bypassing WebView entirely, and reports:
- whether the microphone is muted at the system level
- how many other apps are currently recording
- whether
AudioRecordinitialises, and whether audio frames actually arrive
That separates "Chromium will not open capture" from "this device refuses capture to everyone". If the native test succeeds while the web one fails, it is a WebView problem; if both fail, it is the device or another app, and the numbers will say which.
versionCode 10, versionName 1.9, 542 KB. Same signing key.
Chord Shed 1.8 — the actual microphone fix
Web: https://chord-shed.vercel.app
The diagnostics from 1.7 found it, and it was an ordering bug in the app rather than anything to do with audio constraints.
What the details showed: one audio input with a blank device id and hidden label, permission: prompt, and every attempt failing NotReadableError. Blank ids mean capture permission was never in effect — so the Android dialog you approved was not reaching the WebView.
Why: the WebView's own permission request was parked while the Android dialog was raised. That dialog pauses the activity, onPause paused the WebView underneath it, and the capture request was destroyed before the grant arrived.
The fix: the page now obtains the OS permission first, through a small native bridge, and only then calls getUserMedia — by which point the WebView's request can be granted immediately with nothing in flight. The WebView is also no longer paused while the dialog is showing.
Diagnostics now report the OS permission state directly, and the device-id fallbacks are skipped when ids are blank instead of producing a misleading OverconstrainedError.
versionCode 9, versionName 1.8, 542 KB. Same signing key, installs over any earlier version.
Chord Shed 1.7 — microphone diagnostics
Web: https://chord-shed.vercel.app
Another attempt at the tuner's NotReadableError, plus the means to diagnose it properly if it persists.
Two more fixes
- The playback
AudioContextis now suspended while the microphone is requested and resumed afterwards. Some Android devices refuse to open a capture stream while an output stream is live. - Two extra fallbacks name an input device explicitly rather than letting the OS choose.
And if it still fails, the tuner now shows a Microphone details panel listing what it actually observed: secure context, origin, permission state, the audio input devices, the playback context state, and every attempt with its error name and message. There is a Copy details button — send that text and it will point at the cause instead of me guessing again.
versionCode 8, versionName 1.7, 538 KB. Same signing key, installs over any earlier version.
Chord Shed 1.6 — tuner microphone fix
Web: https://chord-shed.vercel.app
Fixes the tuner reporting "the microphone is busy" after you had already granted permission.
Two causes, both in the app:
- It asked for unprocessed audio (echo cancellation, noise suppression and auto gain all off). On Android that selects a raw capture path many devices refuse — especially while audio output is active — and the refusal comes back as
NotReadableError, which reads as "busy". - It opened a second
AudioContextfor capture alongside the playback one. Two contexts competing for the same audio device is itself a common source of the same error.
Now the tuner shares the single playback context and tries progressively gentler options: unprocessed, then the device's default processed input, then one delayed retry. If it still cannot open the mic, the message lists exactly what was tried.
versionCode 7, versionName 1.6, 538 KB. Same signing key, installs over any earlier version.