I made a guitar tuner app using Flutter and Rust
justune.eu
justune.eu
For anyone interested, I found a nice open source tuner for Android https://github.com/thetwom/Tuner
1. Create closed-source app in some boring language
2. Promote on hacker news as "written in Rust"
4. Recurse!
If they release source code, I'll toss them money. Until then, pass.
Also, you might want to consider polyphonic tuning. That's what would set you apart from everybody else. I bought a TC Electronic PolyTune earlier this year and it's been a game changer. It's much faster and easier to get tuned
A sibling common mentions "c#, g#, c#, f, g#, c#" which is exactly how I would think of it. I'd guess that without a key signature to reference it doesn't really matter, but I'm a theory novice so curious about this.
None of this is meant as advice, it’s just how I reason about using the instrument myself in ways it wasn’t necessarily intended.
In the case of drop Db, I would also guess that people just think of it as "slightly lower than drop D", hence just adding a flat symbol.
Disregarding how it'd be read, I suppose you could theoretically get into keys like G-triple-sharp or F-quadruple-flat -- but that's just overcomplicating things, isn't it?
So that's out. I wonder what other research has been done into detecting multiple notes at once?
(Polytune is more robust than just doing this and does work really well, but if the guitar is really out of tune the method falls apart and you have to use its one-string-at-a-time mode)
Please :)
So if someone like me had incentive for free metronome. I'm pretty sure there are also tuners out there.
Still, 1$ to support an app is really legitimate and sometimes gives more incentives for the developer to maintain it or add features.
I use https://exodus-privacy.eu.org/ to check for trackers, ads and "malware".
[1] Far too often, the apps there are "OK, but...", clearly the work of a someone building a quick "works for me" or someone learning how to build apps. For some tasks, "just OK" is good enough. More often it just isn't.
I find the idea that $1 is a "hard sell" laughable, but unfortunately for software devs that is the world we find ourselves in when trying to monetize an idea.
> I find the idea that $1 is a "hard sell" laughable, but unfortunately for software devs that is the world we find ourselves in when trying to monetize an idea.
and it's hard sell because you can just pick any of them, test to your liking and pay for one after using it.
An important distinction so many entrepreneurs fail to make. Don't enter a saturated market without anything new on the table if you intend to make money.
The problem with this particular market is that musicians can mostly tune by ear. Most will have a dedicated tuner next to their instrument and worst of all these apps don't perform as well for a variety of reasons not least of all that the response of the device might be off.
Most musicians can tune "relatively" okay, but do not have the ability to tune "absolutely" (perfect pitch).
Here is an example of perfect/absolute pitch that very few musicians have. This is the skill one would need to be able to not use a tuner at all > https://www.youtube.com/watch?v=dw3-k9 (Jimmy Kimmel Puts Charlie Puth’s Perfect Pitch to the Test).
Plus, it's much less fiddly to handle than balancing a phone and a guitar :)
Ultimately, it's a matter of taste, and what you use them for.
I know the trend on HN is to upvote any project with Rust in the title, and to hate on native JS, but projects like this that have to use a bunch of tooling to eventually compile down to JS would have almost always been better just using JS in the first place IMO.
But I suspect these people were trying the web version of this (pretty neat, IMO) app.
Flutter does build for the web but then it does (of course) use web technologies to deliver the UI. To get the native experience on iOS, you'd have to download the iOS version from the App Store or something like that.
More details on Rust backend:
For listening (getting audio signal from microphone) I used:
- Android: https://crates.io/crates/oboe
- native desktop/iOS (not currently released): https://crates.io/crates/clap
- Web: https://crates.io/crates/web-sys (so basically JS Web Audio API called from Rust compiled to WASM).
For pitch detection:
I hope you didn't use a command line parser to stream audio...
It's good to see that there is a active project to help with making Android apps using rust.
Rust - not so much (or more like not at all) at the moment.
Nothing against rust, just interested is all considering the dart/flutter relationship.
With the web support I was hoping the since dart can be transpiled to JS Flutter might do something similar. I'll have to look into this, I'm learning Dart due to its ability to run on most platforms.
Performance is pretty good, but as with JavaScript performance, there are performance cliffs depending on how well V8, SpiderMonkey, or JavaScriptCore is able to optimize the code. An audio worklet is pretty standalone and compute intensive, so it seems like a good place to use WebAssembly.
Question re: web (where I have not been impressed with Flutter as a platform) - I just get "Failed to start listening thread." I tried both Firefox and Chrome, latest versions.
Side note: Also noticed I can't highlight/copy the text (common usability/accessibility issue with Flutter Web. I believe it's not that hard to allow?)
Of course, this is a cool project for more insight into the technologies involved regardless.
Please reply if you would be interested in free promo codes for the Android app, I will post some.
[all codes have been redeemed]
Thank you!
If web - well, it sadly requires modern browser on relatively modern hardware - it has some performance problems currently in browsers, I'm not happy about that fact, I am considering improving it if the app catches enough interest.
If Android - please consider returning the app and getting your money back as long as you still can - I'm afraid I won't be able to solve it in quick fashion.
It has documentation attached mentioning pitch detection algorithms it implements.
I used an iPhone app with similar interface but couldn't find one that's as intuitive on web until this one.
I'm planning to create a simpler free version of the app for the sake of cross-promotion, I may open source that one (but I can't make any promises currently, both regarding creating the actual app and open sourcing it).
P.S.: you've got a customer if you plan to port this to iOS.
We’re you inspired by the GuitarTuna iPhone app?
This is great though OP. It's the best browser-based tuner I've ever used. I really hope you don't get sued.
Can I request banjo and chromatic modes?
My understanding of the way it worked is that it took the waveform over some set N/frequency time, converted it to a 1D horizontal line of black→white pixels, and then stacked subsequent lines to create a 2D image, with new lines being added at the top and moving down. In tune (or a multiple of the root frequency for the image), you'd see a series of vertical black and white bars; out of tune, these bars would slant to the left or right, and move over time.
This method was actually somewhat like a strobe tuner in mechanism, replacing the persistence-of-vision appearance of the bars moving with a spatial representation of the audio waveform moving in comparison to the reference frequency. Presumably, this could also have been done without the stacked 2D representation, but that doesn't seem to be what apps like iStroboSoft do, as the bars are far too clean and even. While the app didn't do it, harmonic partials could have been added by having multiple simultaneous 2D images, each with a different reference frequency.
Unfortunately, the app and its developer disappeared years ago, and while I might still have the apk somewhere. I haven't seen anything like it since.
The last version's release notes, combined with the subsequent discontinuation and disappearance, suggest that there may have been patent problems that led to its demise.