ear trainer and tools for playing and programming music and audio πΆπ¦ earbetter.ryanatkn.com
- features a configurable ear trainer
- also has a playable piano
- supports MIDI devices like piano keyboards
- levels can be shared via their links or exporting/importing data
play at earbetter.ryanatkn.com
3 minute video intro on YouTube
raw programming vods YouTube playlist
Feedback is super welcome, please open any discussions or issues. For more see contributing.md.
npm i -D @ryanatkn/earbetter
import Piano from '@ryanatkn/earbetter/Piano.svelte';
3 minute video intro on YouTube
In 2016 I made a simple ear trainer named Ear Sharpener because I thought ear training was interesting, but it wasn't a good training tool. The goal of Earbetter is to be a useful and customizable ear trainer. I also want it to be fun so it motivates more training, but it's not there yet.
I'm not a musician and I'm one person so I can't possibly make all of the best ear training challenges. Knowing this, I designed the software so you can create and share custom challenges - the content is all configurable.
Earbetter's trainer has "levels" broken up into "trials". Each trial is a sequence of notes that you hear and then play back. Your score for the level is the sum of mistakes made in each trial, and you'll get a β when you reach 0 across four runs of the level.
When a sequence is two notes long, it trains individual intervals, and longer sequences train a combination of relative pitch and working memory.
It's limited but supports a decent range of ear training challenges and there's room to add more capabilities. (if you have ideas please share!) In the level creator, you can click the "import" button to get copy-pastable data as text that you can share with others.
"Realms" group multiple levels together, and each realm may have a particular flavor like a scale. Realms can be created and shared just like importing/exporting levels.
"Projects" are like save files. They group multiple realms together. They can similarly be imported/exported.
In the future I'll probably add a way to share in-app, but that requires some kind of server infrastructure. For now I'm accepting content submissions in this repo, so we get the benefit having a lot of static content without needing a server. I'm open to input but I'm hesitant to operate any kind of service or add non-static dependencies -- for now, you're invited to open PRs with your exported data following the default example, or email me if you don't use GitHub.
For more please see contributing.md and the GitHub discussions and issues.
This project uses SvelteKit with the static adapter
and Vite,
so the normal commands like vite dev
work as expected.
I use gro
for additional things like deploying - see below for more.
Windows is not yet supported (we recommend WSL)
gro dev # npm i -g @feltjs/gro
See SvelteKit, Vite, Svelte, Fuz, and Gro for more.
gro build
See Gro's build docs for more.
gro test
See uvu
and Gro's test docs.
Deploy
(build, commit, and push) to the deploy
branch, e.g. for GitHub Pages:
gro deploy
To configure GitHub pages (which this repo uses) or another static host, customize or delete src/static/CNAME.
My sister Lisa helped me evolve the logo concept - instagram.com/lisaeatkinson - she's a designer and currently looking for work
TypeScript β Svelte β SvelteKit β Vite β esbuild β Fuz β Gro β uvu β ESLint β Prettier & more
License π¦
public domain β The Unlicense