The app looks great, but since no source code is provided knowing that it's made with Flutter and Rust isn't really of much use for anyone (esp. for learning purposes).
There are two Drop D tunings listed and one is actually Drop C. There is no Drop D♭, you call it Drop C♯ which while it's technically the same set of tones, it's now how guitar players think of it. You have the same issue with E♭ Standard. Each of your notes in these tunings are listed as sharps instead of flats, which is not how guitar players think of the notes in these tunings.
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
Interesting you mention guitarists thinking in terms of flats. Is that rooted in music theory, preference/convention, or something else?
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.
I’m self taught, and I tend to think of flats because I tend to downtune. I think others choose the flat or sharp based on their desired key. That doesn’t help me describing a tuning if I’m playing out of the tuning’s assumed key! I have adopted one set of tunings which requires bringing the second string higher than the first, which I usually dedicate to a guitar with the strings swapped so I don’t break them all the time. (Adapted from very closely watching performances by Kelli Rudick if you’re curious.) I always describe the 2nd string tuning with sharps unless I have a good reason not to.
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.
I would guess that it's to do with the fact that musicians generally use the key with fewer sharps/flats. E.g., Bb major (2 flats) instead of A# major (5 sharps). This also follows what's on the circle of fifths, where major keys clockwise from C use sharps, and vice versa.
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.
Nit pick: A# major would be 10 sharps, at least written following the usual convention of each note letter being used exactly once: A# B# C## D# E# F## G##.
What is 2 but 1 plus 1? The key of B flat is easier to read.
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?
I really don't know why that's the convention. I always assumed it was due to the minor scale/modes having so many flats. The only mode with a sharp is Lydian - and that's a single sharp! Even the major mode Mixolydian has a flat! Natural minor has 3 flats.
Each string has it's fundamental frequency and harmonics. Some of them coincide or are very close in frequency, but some are unique to one string so can be picked out and their frequency measured with a FFT of sufficient resolution and used to indicate the tuning of the string it must be a harmonic of.
(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)
In general polyphonic pitch detection is a much harder problem to solve than monophonic. I guess focussing on guitar tuning only rather than trying to transcribe a whole song makes the problem a bit simpler but still is probably a lot more challenging than handling one note a time. Cool feature though, I had never thought of a polyphonic tuner!
Because you can see the tuning of all the strings at once. You strum and they all show up. Then you can see which ones are more out of tune than others and tune them together. Prevents problems where changing the tuning (tension) of one string throws another string out of tune. I call it "global tuning." It gives you precise tuning extremely fast.
Yes, for hard-tails. Neck construction doesn't matter either. I notice it on both bolt-on and neck-through instruments. My method is to tune the highest strings first and work down to the lowest since that seems to minimize this effect.
As an alternate tuning person I’d love a simple ‘this is the note you are playing’
I hate having to pick the tuning as I just wanna know a c#, g#, c#, f, g#, c#
It's available free (and no ads) for desktop browsers and as a $1 Android app (on mobile needs to be an app for performance reasons and I believe it's a fair price).
While $1 is certainly far less than the value this app provides, it’s going to be a hard sell when there are several free apps which do the same thing.
Yes, but to be fair it's awfully hard to find a free app that does the same without bloat due to any kind of ads. I'm going to buy this app just because of frustration due to that.
F-droid often has nice apps, but too often, they are just not good enough for what I want or need[1]. In that case, I'll gladly pay on the play-store because the paid version is nearly always (but certainly not guaranteed to) have less or no trackers ads, and malware included. The free apps far too often do.
[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 will pay anywhere from $1 to $5 to eliminate ads, so this is a good value, considering the free apps almost all have ads, if I recall. Or are provided by one of the larger guitar companies and promote their subscription/learning platforms?
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.
Well, there are also already at least dozen free ones that allow to buy ad-less versions
> 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.
The intersection of "free", "no ads", and "works right" is often pretty bad. This at least has the web interface where you can see roughly what you would be getting.
I agree. Although this might be more about covering development costs than making OP money.
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.
Musicians can tune by ear, but the vast majority of people who play guitar on a daily basis are novices or beginners and they all use tuners or tuner apps.
Even if tuning by ear, when you play with a band or especially are recording, it would be very silly to trust your ear alone because recording hours of takes in an expensive recording studio with many other people's time in a slightly out of tune key would be very disrespectful and wasteful.
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).
For sure. We always tuned by plugging into tuners when I played in a band. You might get it to closer than completely out of tune by ear, but when you're in close quarters and there's people talking or playing their music, you just plug in and get to the green light.
Even if you can tune by ear, it can be faster to use a tuner, especially in a noisy environment. Also, if you listen to harmonics when tuning a guitar by ear, you'll get something like just intonation instead of the equal temperament tuning that you would get with typical tuner apps.
Or skip the idea that your phone makes a good tuner, spend $35, and get the TC Electronic Unitune. It's by far the best tuner I've used so far, and it's small enough you can just throw it into your guitar case. (Or leave it permanently attached)
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.
The movement is really choppy on my iPhone 13 Pro. Did you use requestAnimationFrame for the tuning movement? & CSS animations for switching instruments? Kinda just wondering how the performance could be so bad. Reminds me of PhoneGap circa 2013
I can confirm. It is extremely choppy and resource hungry for what it does. Since they use Flutter, the UI is rendered using 119 canvas elements. The same thing could be implemented using the web platform (no flutter and no rust) with better results.
I was thinking the same thing- I've seen many mobile performant, web based tuners before, it's a very common personal project. If the intention was to make a web based tuner from the start, Flutter and Rust was a big step down from just using HTML and JS.
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.
That is true (that Flutter builds natively on all platforms it supports, and controls every pixel on the screen, unlike React Native and similar).
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.
As an undergrad I made a guitar tuner using a PIC32 microcontroller to do time-series correlation to figure out the frequency (FFT was too slow for real-time) and a state machine embodied in a stratix FPGA to control a stepper motor to turn the pegs. A different era of “mobile app” I guess.
I would love to see the source code, or at least a simplified version. Audio input in rust and rust talking with flutter on mobile device. Such a cool project.
Well, all the Rust crates I've mentioned in other comment have comprehensive examples attached, so it's just a matter of connecting their functionality together :)
Looks very nice, would you tell us a little bit about what you used to build this? I am just getting started with Rust and it would be cool to hear what approach you went and what you would recommend when starting today.
Heh, I always get those two crates names confused, even now, rereading comments I again thought it was "clap" and not "cpal" (because "clap" like in "clapping").
Dart being a GC'd runtime makes it quite hard to use for low latency audio applications, probably not as critical for audio input as output, but still potential issue, for more details see: https://github.com/dart-lang/sdk/issues/46943
Performance reasons, also wanted it to work on the web (Flutter web support is fairly recent, and dart/flutter libraries don't automatically work on the web, they have to support the platform).
Thanks. Is dart performance that bad? I thought it compiled to machine code if needed.
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.
It's hard to say with performance (you need to measure), but I'll point out that for the web, Dart is compiled to JavaScript.
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.
Speaking only for myself, I'm considering Flutter + Rust because I want to write everything in Rust, but there aren't great GUI options for Rust atm. I've heard good things about the rust<->dart bridge so it seems like a reasonable compromise, esp. given the Dart code to write Flutter UIs seems fairly declarative. Hoping to keep most of the logic in Rust and just the view in Flutter/Dart.
Members of the rust community were often accused of being overly-enthusiastic in recommending that things be rewritten in rust, so much to the point it more or less became a meme unto itself.
Now, visceral anti-rust gut reactions are more commonplace than inappropriate suggestions to use rust are. Even that is petering out, though.
Dammit. Was writing a similar yet a bit more extensive elaboration on my phone, but accidentally refreshed the page a-a-and... it's gone :') Truly a RRRRREEEEEEEEEEEEEEE moment.
Basically, 'this ^', but wanted to add that the post was a lighthearted jab and a comical insinuation. Which, by the way, according to the little rollercoaster of upvotes and downvotes, seem to have raised a micro controversy of it's own. Which adds another layer of comedy to the entire situation.
A-A-ANYWAY. Since I was a bit upsetting, adding a (hopefully) evening out, on-topic suggestion.
For tuning my guitars, I often use gStrings app [0]. For some reason it's much better at 'catching' freqencies than the alternatives. Can't recall all the names, but I've tried most of the popular ones (such as Guitar Tuna, the Fender's one, etc). Might wanna check it out and see if there are some tricks to borrow :)
I'm looking for JavaScript library that would allow me to build a hobbyist autoharp tuner. I can program the UI, but need a note generator library. It just needs one API function or equivalent: soundNote(noteNum, duration); Note-number is the MIDI note number, and duration is the duration of the note in micro-seconds. (It can be in "beats" when the beat unit is defined via another function.)
Purchased for Android, love Flutter and been trying to learn guitar off/on, so this could be helpful.
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?)
You may already be aware, but having a small clip-on digital hardware tuner you can use anywhere without involving a phone is a life upgrade if you're playing guitar on a regular basis.
Of course, this is a cool project for more insight into the technologies involved regardless.
Yah, I keep meaning to get one of those, just haven't remembered to do it. And I'm super bad at guitar, so probably not playing anywhere outside of my basement for a while :P
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.
Does not work on my Galaxy Note 9 unfortunately(I granted the recording permission, but it can't pick up any sound). However, it works fine on desktop Firefox.
I think a try before you buy option would be useful.
This is pretty handy, though my usual tuning method is to play a pure tone and match to that. Makes getting right there so much easier when you hear the warbling between guitar and tone stop.
This is very cool! Is there a way to contribute or something to have support for ukulele ? I'm just starting to learn the uke and this could be very useful.
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).
With the mouse wheel/trackpad. Flutter Web doesn't actually generate proper DOM, instead it renders things (mostly) from scratch, hence no scroll bars.
the idea of a 'virtual' strobe tuner is a curious one - a strobe tuner being such a material thing. I'm not contesting that Peterson's is the best, but the 'strobe' aspect of it has to be marketing guff, doesn't it?
There was one strobe-like tuner for Android years ago that seemed to be something other than a visual representation of a standard digital tuner.
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.
I now recall that this was Pitchlab / Pitchlab Pro. The app still seems to work on Android 11, but isn't available through Google.
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.
For anyone interested, I found a nice open source tuner for Android https://github.com/thetwom/Tuner