bas-vr20 downloadsLearn songs by ear: loop, slow down and pitch-shift audio and video, keeping your progress in your notes.

A transcribing player for Obsidian. Loop the hard bit, slow it down without changing the pitch, shift the pitch without changing the tempo, and watch the player's hands while you do it. On your Mac, your iPad and your phone. Everything you work out is saved in the song's own note.
Made by a guitarist who wanted one thing: to learn songs from the record, anywhere, for free.


| Rename or re-time a mark | Pitch in semitones and cents | Call & response, channel mixer |
|---|---|---|
![]() |
![]() |
![]() |
Screenshots taken on a Mac in full screen. The video is blurred here only because it is someone else's footage.
The good transcribing apps each leave a hole. Transcribe! is excellent but desktop-only. Transcribe+ needs an Apple Silicon Mac and a subscription. The free browser tools can't show video. Nothing free runs everywhere.
And they all keep your progress locked in their own format. But the loop points are the cheap half. What costs a whole session to rebuild is the understanding: the tuning, the position, the bar you still can't name. That belongs in text, on every device you own.
Obsidian already runs on all of them, and already syncs. So the player lives there.
These are the point of the project, not missing features:
Plays mp3, m4a, wav, flac, aac, ogg, opus, aiff, mp4, m4v, mov and webm.
When you open a song, By Ear looks for its note: one with media: set to the file's name, or one
whose title (or song: in frontmatter) matches the song. Name files Artist - Title and it will
usually find the right one. If there is none, it creates a note in the folder for new song
notes (default By Ear/). Press ⌘/Ctrl S or Save to write it.
Everything it writes sits below this line at the bottom of the note:
%% by-ear:ledger — written by the By Ear plugin. Everything above this line is yours. %%
Your chart, your lyrics, your essay above it are never touched.
obsidian://by-ear?song=Artist%20-%20Title.mp4&t=83 opens the player on that song at 1:23. Put
one in a note to jump straight to the solo.
space |
play / pause |
← → |
nudge 1 s (shift: 5 s) |
M / S |
drop a mark here / loop this section, mark to mark |
A B |
set the loop start / end at the playhead |
L / X |
loop on-off / clear the loop |
C |
call & response on / off |
V |
mute / unmute |
F / esc |
full screen, and back |
⌘/Ctrl S |
write the ledger to the note |
[ ] |
nudge A by 10 ms (shift: nudge B) |
↑ ↓ |
tempo ± 5% |
- = |
pitch ± 1 semitone (shift: ± 10 cents) |
0 |
reset tempo and pitch |
| wheel | zoom the waveform around the pointer (shift: pan) |
/by-ear skillBy Ear plays files you already have. If you use Claude Code, this repo also ships a skill that fetches them for you:
/by-ear Jimi Hendrix - Little Wing
/by-ear the live version of Red House
/by-ear https://www.youtube.com/watch?v=...
It searches YouTube, picks the right upload, and saves it to your media folder. It keeps the
video when there are hands to watch, and only the mp3 when the picture is a still album cover.
It lives in skill/by-ear/ and needs yt-dlp, ffmpeg and deno.
The easy way: paste this setup prompt into Claude Code. It installs the plugin, the tools and the skill, sets your song folder, fetches a first song, and gives you a short tour of the player.
It runs on a computer only: there is no dependable way to run yt-dlp on iOS. Downloading from YouTube is against YouTube's terms of service. The skill is for personal practice material on your own machine, and that call is yours.
| macOS (Intel and Apple Silicon) | ✅ used daily |
| iPadOS | ✅ used daily |
| iOS | ✅ works. A phone screen is tight for this; landscape helps |
| Windows / Linux | should work, untested. Reports welcome |
| Android | ⚠️ unknown. Obsidian audio plugins are reported not to work there |
gh attestation verify main.js --repo BasvanRzdl/obsidian-by-ear.media: line to that note's frontmatter, or creates a short note if there is none.
When you save, it writes below the marker shown above. It never edits anything else.obsidian://by-ear links can open the player on a song that is already in your media folder,
so opening one can do the linking above. They cannot reach any other file, start playback, or
run anything.npm install
npm run build
npm test
./install.sh "/path/to/your/vault"
⚠️ minify: false in esbuild.config.mjs is load-bearing, and so is numberOfInputs: 1 in the
engine. Why, and the rest of what building on Signalsmith Stretch inside Obsidian taught me, is
in docs/ENGINEERING.md.
Signalsmith Stretch (MIT) for time-stretching and pitch-shifting.
MIT. See LICENSE.