Remix.run Logo
▲ Show HN: OnKey – I'm a bad singer, so I built an app to show where I'm off-key(github.com)
39 points by dsmurrell 18 hours ago | 18 comments

Hi all

I was pretty terrible at singing, now I’d say I’m bad but not terrible. This is because I’ve been using a singing app (won’t name it here) that scores me on my pitch and timing throughout the song so that I can improve.

Lately however, the app I’ve been using has flooded their song list with songs that aren’t originals. I didn’t like this at all as for me, it’s easier to try to improve when you’re singing along to the original.

So, I asked an agent (Claude Code) if it could write some code to listen to Spotify and also listen to me and see if it could detect both pitches and score me. It impressed me by writing some Python and showing me my pitch in the terminal!

It couldn’t go all the way though and detect the singer’s pitch in real time.

So I found the next best setup and built OnKey, a Mac app that needs to listen to the song once (it doesn’t save it) and then when it’s learnt the song (takes a couple of minutes), you can sing along to the pitch track that it’s learnt. OnKey is free to use and open source under the MIT license.

It can listen to Spotify, Apple Music, and YouTube playing in your browser with the right permissions.

During the build I found that someone had done something similar in Nightingale, but this requires a library of songs exported to disk and who has this in 2026 (maybe some of you ;) - but we need to help the normies too).

You can check out a demo video on the site of me singing (warning given) here: https://singonkey.app

The app sends out to find the song info (short Shazam fingerprint, and looks up song details), lyrics (from LRCLIB), and checks for updates.

The app never sends the music (it doesn’t save this to disk) and your voice. Everything you’d expect to stay private does.

It’s still weak in a few places:

- when the song’s backing is noisy it’s hard to pick the pitch track out

- sometimes it gets a note an octave off

- it’s limited to Apple Silicon Macs, M1 or later, and only macOS 14.2 up because extra drivers aren’t required past this point

- the scoring is built for beginners like me so it’s fairly easy on you

Would love for people to try it out and let me know what works and what doesn’t for them!

▲enzoaguado a few seconds ago | parent | next [-]

Singing is about so much more than just hitting the right notes. Breath management is one of the most important skills you can develop to improve your singing. Proper vocal technique helps you avoid injuring your voice when tackling difficult songs. Learning to recognize and use techniques like belting, twang, head voice, chest voice, vocal fry, etc., can really bring your singing to life. Prosody and rhythm training help you develop good timing (one of the most important aspects of music), and there's so much more to it.

This kind of app is great for getting started and getting a taste of what singing involves, but it would be awesome to cover these other aspects as well, or at least mention their existence for aspiring singers.

▲viraptor 11 minutes ago | parent | prev | next [-]

Ok, I'll be that one today. This seems entirely vibe coded... why is it using webview/tauri? It could be so small and smooth in swift with just a small change to the prompt. People used electron/tauri/whatever to make things easier to write and maintain, but if we're just vibing things anyway, can we go back to respecting resources, please?

I like the idea though. I was using a paid app doing something similar in the past. Keen to get back into it.

▲manlymuppet an hour ago | parent | prev | next [-]

The main demo video uses the Red Hot Chilli Peppers as an example. A singing app, for learning to sing, and Anthony Kiedis used as the model.

Red Hot Chilli Peppers. Anthony Kiedis.

It's like if you had let Shaquille O'Neal teach you how to shoot threes.

▲dsmurrell an hour ago | parent | next [-]

Yes, I got this from a friend... "Lol, I could t tell the difference between you and Tony Kiedis!"

I'm terrible at detecting sarcasm usually, but this one was easy for me.

▲manlymuppet an hour ago | parent | prev [-]

I now realize this comment may read much more mean-spirted than I intended--not my intention!

This is a great and cool app. I am just joking. Sorry to be an ass.

▲dsmurrell an hour ago | parent [-]

Not at all! It's accurate :)

I'd definitely still let Shaquille O'Neal show me how to shoot threes. Dunking on the other hand could be an issue.

▲wnissen 9 hours ago | parent | prev | next [-]

What a fun idea! I love that the song doesn't have to be programmed in by the developer. Will give it a try.

Have you played the Rock Band and similar "rhythm games" that were all the rage in the Wii era? I don't know that it helped my singing per se but gave some incentive to practice.

In case anyone is interested, you can test your relative pitch perception (as opposed to producing the pitch) in this excellent Yale site: https://www.themusiclab.org/quizzes/td I got 15th [sic] percentile!

▲dsmurrell 2 hours ago | parent [-]

Not played Rock Band myself only some Guitar Hero.

https://www.themusiclab.org looks cool, I'll give it a try today when I get a chance.

▲nopurpose 2 hours ago | parent | prev | next [-]

Didn't know that external apps can interact with Youtube in a tab in Safari.

Looks nice, I sing so badly that I never dare to try if not alone. Maybe this app will help me to improve just little that I can sing along happy birthday quietrly in a corner without anyone turning heads.

▲dsmurrell an hour ago | parent [-]

> I never dare to try if not alone

Yes, this was me. My confidence has improved through practise to a point where it only half killed me to post that demo video. My family still ask me to relocate when I'm doing this around them... so I think you can hit the pitches and still not sound amazing.

Unfortunately, the way it works, and to avoid any copyright issues, it can't really operate on phones because you can't listen to other apps on them. Maybe the only way is to share your learnt pitch tracks (trained on the laptop) with a mobile companion app.

▲pheraph an hour ago | parent | prev | next [-]

I think my daughter will love this. How about some simple gamification mechanism? A score or a star rating on how well you performed, maybe combined with a difficulty level?

▲dsmurrell 41 minutes ago | parent [-]

Each song has a difficulty rating from 1 to 5. You can use this to filter your library.

And you can track your scores over the takes you did of a sing in your history. So I think OnKey has you covered on these.

Let me know if it matches what you expect when you try it out.

▲pheraph 16 minutes ago | parent | next [-]

Awesome, I'm checking it out right now. Just a few quick notes:

- By “difficulty,” I meant that you can set a skill level that's a bit more forgiving if you miss the mark, as opposed to a “pro” level, which may be stricter. I’m thinking especially of kids, who might have more fun with it that way. It would also be nice to have a personal profile to choose from, with your own library (?) or at least your own presets (difficulty, progress, etc.).

- It took me a little while to figure out how the app works. You start a song in Apple Music, and the app records it. I had somehow expected a large search bar in the app that I could use aside from the music suggestions to get started.

- Even though I hadn’t set up Spotify (it wasn’t even displayed), it was still enabled in the settings.

- This is probably a bit outside your scope, but in the german song “An Tagen wie diesen, Die Toten Hosen” some (final) syllables get cut off, and sometimes the bars go down even though the melody goes up (or are the notes transposed an octave when they no longer fit within the scale?).

That's for now, I’ll keep an eye on the project and create issues if my observations become more consistent. Thanks for the project!

▲pheraph 10 minutes ago | parent | prev [-]

PS: There seems to be a bug on my machine. When I press the Play button in the Library, the song screen opens, but the previous song performance is still open there and nothing happens. I have to press the "in Apple Music" in the library; then it switches to Apple Music, where I press Play again and switch back to OnKey. Can't OnKey start playback on its own?

▲mkesper an hour ago | parent | prev | next [-]

This is a great learning tool! I wish I could use it on Linux. :)

▲dsmurrell an hour ago | parent [-]

Noted, I haven't done a feasibility test yet, but I do have an issue up here to vote on: https://github.com/dsmurrell/onkey/issues

It's got 3 thumbs up but no indication of which OS they're from... maybe I need two issues.

▲HummingBirdGif 14 hours ago | parent | prev [-]

How are you detecting pitch?

▲dsmurrell 14 hours ago | parent [-]

For the user's pitch OnKey uses CREPE-tiny (https://github.com/marl/crepe) but ported to Rust with the model running on ONNX Runtime. For the singer's pitch also CREPE but the full version.

The vocal separation for the song uses UVR: https://github.com/Anjok07/ultimatevocalremovergui

You can find more details here: https://singonkey.app/docs/how-it-works