Show HN: A macOS app to prevent sound quality degradation on AirPods (apps.apple.com)
It's a known issue and here's what Apple recommends to fix it: https://support.apple.com/en-hk/102217
Most of the time(unless you are on a Mac Mini/Studio/Pro), you have much higher quality microphones built in, so in most use cases, you want to hear from your AirPods but be heard from your internal microphone, which means if every time you connect your AirPods and go into the settings and set the default input device as the internal mic, you won't have sound quality degradation on mic activation, and if you use your mic to talk to people or record something, you will have better sound quality too.
Based on this observation, first I tried to create a script or some automation that can do it for me but found out that it can be clunky or needlessly complex.
Here's someone who used this approach to fix this issue: https://www.dermitch.de/post/macos-force-microphone-when-usi...
Anyway, I decided to take the "build your app for that" route and created this app and called it CrystalClear Audio which doesn't involve any technical setup to use. Making it was also not as easy I hoped, I was expecting this to be a half an hour project but ended up filing bug reports with Apple because some API wasn't behaving as expected or mysterious things were happening when using it(like phantom device changes).
After spending that much time with all this, I decided to publish it on Mac AppStore and after too many rejections(all my mistakes) I got it published: https://apps.apple.com/us/app/crystalclear-sound/id669572374...
The app is not free but comes with a free trial. I decided to go with a very cheap subscription model because I suspect further development might be needed as bugs emerge or API behavior changes. I know its a hated business model but IMHO it's better than ads or tracking of any sort to justify the work done. It's not free because supporting a free app is just as hard as supporting a paid one and it's not one time payment because I don't know what would the right price be for supporting an app for years to come and still have people willing to pay for it.
I hope other people find this useful and if you do, you can support by upvoting on Producthunt so even more people can find it sueful: https://www.producthunt.com/posts/crystalclear-sound
PS: the app is also useful for quickly switching between giving the sound out of the laptop speakers and the headphones, I ended up using that quite often.
354 comments
[ 2.6 ms ] story [ 289 ms ] threadIt's an extremely niche product, if I end up getting 1000 paying users, I will be making about 1000 USD/month from this after Apple's commission and sales tax.
I don't expect to have that many users, honestly. So if it happens that I get a few hundred paying users I can pay a freelancer to improve on the app occasionally or rationalize spending time on this fixing bugs and adding features.
Also, it's completely optional app that is for convenience only. As I explained, the same effect can be achieved by manually changing the input source from the settings or write and setup a script to automate things.
Note, for your marketing, I can't recommend your app at that price, but at low enough price I would recommend your app to all my coworkers at each bluetooth hiccups, because just as you state, mac microphones are much better, and I hate suffering bad microphones.
It's possible that another price point or model yields better results. Thank you for your feedback, I will look into it.
Also I haven't upgraded macOS to >= 13 yet on my personal laptop, so I can't use any of these apps.
This is configured from 'Audio MIDI Setup.app'
Apps configured to use that as their input device then don't reconfigure themselves whenever a Bluetooth input device shows up.
I dont add output devices as I'm happy for that to flip between speakers/headphones - whatever is available.
It’s easy to create the aggregate input device, go to the Audio MIDI Setup app, in the audio window click the plus in the bottom right and choose “new aggregate device”, then tick MacBook Microphone on the right. Then to System Preferences > Sound > Input and assign this new “virtual” device as your input device. (You can rename it if you want)
Now your Mac will automatically switch audio output source as usual, but the input remains locked to the microphone so you don’t get this annoying problem.
I dislike this very, very, very much. You do realize that with this attitude, we'll soon be bickering with our toilets to please let the seat down without making a small 4$/month in-loo purchase first?
Yeah that’s a model that most people seem to like, and I would agree it helps soften the blow by providing some ongoing value for a set period of time.
More apps doing roughly the same but none doing anything well or exceptional well? Yet resources become more spread and hence sparser?
- fixing macOS balance bug (outputDevice:setBalance(0.5) on output device change)
- muting built-in speakers on headphones disconnect event
- pausing Spotify when external headphones are disconnected
Once you try it you may find out that for some reason sometimes it will revert back to AirPods mic. I filed a bug report for that, check it out: https://developer.apple.com/forums/thread/763583
Therefore you will have to iron out the edge cases. Are the AirPods considered connected when you switch to your iPhone when using your Mac? Yes the continuity stuff.
Also, you will have to actually maintain that script. That is, you will need to find a place for it where it lives and it’s not lost when upgrading the system etc.
My app is for all the people who don’t want to deal with this and rather pay $2 a month to have it maintained and have someone they can report the issues they have and get them fixed.
Anyway, I made the app for myself and decided to put it on the market to see what happens, so it’s alright to have a competition:) if it happens that this is the better solution I may just drop mine and use it.
Congratulations on developing and shipping a fully-fledged product, I hope I'll help people in need of a "it just works" solution for this particular problem. Paying for it is of course justified, as you poured your time and knowledge to provide a fully working fix.
Since this is Hackernews, I shared how I approached this problem on my devices - I use Hammerspoon to script little parts of the system I don't like in macOS and audio device handling is one of them.
I use a more complex version that handles additional pain points, but the default input source changing has worked just fine for me for the last few years (with AirPods, Bose QC35 and regular wired headphones).
I was expecting a backslash for not giving away for free, kind of enjoying it. Like the good old days when I was making free apps for the likes but this time I’m on the “dark side”
My only issue is that I'm mostly using the AirPods mic for meetings. I don't want to use my laptop mic because my impression is that it picks up too much background noise. AirPods do too, but I think less so?
Additionally, there are always new Mac products as well as new AirPods products being released, and getting them working on new hardware has costs (including but not limited to acquiring that hardware).
I find it extremely frustrating when apps stop getting updated and become abandonware because they relied on new customers to pay recurring bills (rent, groceries...) instead of relying on recurring payments from existing payments who derive value from their product.
Everyone wants the price to be lower, which is fine, but saying that you don't want to pay on an ongoing basis but still want to receive ongoing updates is not fair.
But maybe iOS just uses the built-in microphone more often to avoid having to switch away from (high quality) unidirectional audio on Bluetooth?
On the standards side, there's Bluetooth LE audio, which also offers very low latency, but that might actually require hardware changes (I believe there's reliance on some hardware layer changes).
However I can't really answer OP question. I am not sure how iPhone get a better sound quality if what OP is saying is true (I don't have an iPhone). What I know is that in Linux you can activate mSBC and this improves the quality a lot when using HFP profile, but it is still significantly worse than anything A2DP has to offer. I also think Android uses mSBC if available, but I am not completely sure.
[1]: https://en.wikipedia.org/wiki/List_of_Bluetooth_profiles
Are you sure? How often does your phone have the microphone active while simultaneously continuing to play audio? When the mic is active on a phone it almost always pauses music or video or whatever you're listening to. At that point it can switch modes and then switch back when you're done and go back to music.
On a PC (meaning the overall category of personal computers including Macs, not just a Wintel machine) there isn't that sort of integration. If you start a VoIP call with music going the music just keeps going, so the mode switch is obvious.
I don’t see how I can be “booked” for years unless I make at least a few 100K’s from this. I don’t actually expect to have more than a few 100 paying users, this is a niche app.
I probably should have been charging at least 9.99$/month to make any financial sense based on my low expectations but since this is a subscription app at least I can discontinue the app without screwing up people if I have to abandon it.
If this was some kind of app that millions would use, I guess I could have given it for free for exposure or make it very very cheap like 1$/year but I don’t think that this would happen. Now my bet is that if I can get 1000 paying users I will keep the app around and develop it further by spending time on it.
I have some more ideas. I’m currently marketing it as an app for solving this specific issue but it’s also a nice input/output switching app. Maybe it can be the app that solves all the sound issues by always setting the correct input/output? You know how there’s always someone having trouble with their sound when on call. Let’s see.
It has been a few years since LE Audio has standardized and a lot of digging has led me to the conclusion that it should support decent audio with multiple channels (as it‘s not artificially limited like the Hands Free Profile). I‘d have expected Apple to jump on this to finally solve this stupid issue once and for all, but … nope.
I just want to listen to music while on a phone call. It’s not that crazy.
Sorry, but I'll pass.
I'd spend a few dollars on a convenience app like this as a one-off purchase (it would save me from option-clicking the volume icon every once in a while), but what ongoing development or infrastructure am I paying for with a subscription here?
edit: I'm not condoning nor condemning OP's monetization strategy, I'm just summarizing what he has explained on the original post and subsequent comments.
Direct quotes:
> I suspect further development might be needed as bugs emerge or API behavior changes
> It’s not free because freeware also requires to provide support.
> if it happens that I get a few hundred paying users I can pay a freelancer to improve on the app occasionally or rationalize spending time on this fixing bugs and adding features
I really have a much higher understanding for things that run server infrastructure or require frequent work to keep up with things like changing third-party APIs or scraped websites.
But this is literally an Apple-hosted app using a stable API.
Why would anyone want to pay 2x for this compared to what a really good podcast app costs? Or 7x what a good gif manager costs?
Why would anyone want to pay 2x for this compared to what a really good podcast app costs? Or 7x what a good gif manager costs?
This app doesn't even do anything that native macOS tools can do for you with 2 minutes of work (aggregate audio devices, or a bit of scripting), and literally saves you from one extra keypress and 2 clicks.
But to be more positive: I'd love to support an app like this, which I probably wouldn't even use that much these days; I just won't pay the current pricing.
I know ~everybody hates Adobe, but I pay about $120 / year for Lightroom + Photoshop, which are way, way, way, way, way (I ran outta "ways") more complex to build and valuable to me as a user than this.
I've had no end of unstable wireless stacks, ungrounded computers causing a physical buzzing as you touch the case, the GPU crashing when viewing Google Sheets, LCD panels failing from the arduous task of letting the laptop sit on the desk for a weekend, automatic updates wiping manual setting changes, switching to any available WiFi network if the one I want has a blip in service and never switching back, needing to reboot into recovery mode for something as simple as enabling dtrace, ....
They just feel shoddy, and combined with a non-discoverable UI and default behaviors I don't like, about the only thing I've really cared for is the battery life. Even if they were free I don't know that I'd use one at home instead of some flavor of Linux.
When Bluetooth mode is switched from Headphones to Headset (with mic), only much lower quality audio codes are used.
Does anyone know if Bluetooth 6 adds support for higher quality codes for Headset?
It's a big issue, in my opinion.
Using the same headset on both Windows and Linux leads to a very different experience. Windows works fine. Linux has the issue macOS has mentioned here.
I had high hopes for BLE Audio but that seems to be stalled
Isn't this a Mac-specific issue? I have some recollection in my head that Mac OS uses a terrible codec for bidirectional bluetooth audio, but iOS uses a good one.
It still is, mSBC is really not that good, plus all things considered reasons go beyond just the codec, see my nearby comment: https://news.ycombinator.com/item?id=41705258
Switching to "2x half-duplex" on both ends is really the best thing. I hate it that you can't separately select audio input and output in iOS.
I don't understand why all desktop OS can't have something better while when I pair my Bose headset on my smartphone it seems to be using a better quality codec profile.
Its a licensing issue. The borderlands between the headset and headphone profiles are rife with licensing land-mines - developers have flipped the table and rage-quit the issue, and this technical debt has been shipped.
(Disclaimer: I make headset/headphone firmware for a major competitor and deal with this issue every single week...)
My sympathies, and I appreciate your willingness to wade through neck deep licensing excrement to produce something that still works.
But I guess it isn’t solved by that. Why isn’t it?
Isn't that obvious, or is there some aspect to this I'm not aware of (I care about sound quality, so I don't use AirPods)?
It's a very annoying problem because the Airpods actually sound fantastic, but as soon as the mic kicks in, it sounds like crap. Same thing happens with my Sony XM3s or any other Bluetooth headset. The protocol drops to a shitty bitrate to support full duplex.
I do that for all my calls and games already, but I just have to manually set it in the OS (and sometimes on a per-app basis). It only takes a second and usually remembers.
If the app were a one-time purchase I'd probably buy it just to avoid the hassle, but definitely not paying a subscription for something that's so easy to do on my own. As a compromise, I'd also be OK with a OS-version tied upgrade pricing, like you pay $x for the macOS 15 version, but when the next breaking OS update comes that requires an update, you can pay $y after the upgrade discount to get the newest version that works with the new OS.
All these problems are solved by headphones with proprietary wireless dongles and they work great, so why can't Bluetooth incorporate those improvements so we can get them on other devices than desktop PCs?
Beyerdynamic MMX 200 does it wrong: pair up to, uh, I don't know (undocumented!), n>2 devices (I have 4), connects to the last one on power up, but if you want to switch devices, you have to disconnect on the device it has just connected and hope it doesn't connect to yet another you have paired and happens to be in range but is not the one you want to pair with, or you have to disconnect from there too. Confused yet? Yup, it's that bad.
Worse, upon that second disconnect the headset itself initiates a reconnect by going through the MRU list again, so if you disconnect from the second (incorrect) one it might try the first (incorrect) one again since it's now the next in the MRU list, so you actually have to DISABLE BLUETOOTH on each device except the one you want to connect to.
Too bad if one of these devices is in the next room, even more annoying if it's your iPad borrowed by your SO who is now annoyed at losing sound from their movie.
At that point, it's easier to forget the headset in the device you have in hand and re-pair, which is absolutely ridiculous.
Beyerdynamic Free BYRD does it correctly: pair up to 5 devices, connects to the last one on power up, any device in the pair history can force-connect to the headset, yanking out the virtual cord from the undesired device. No interaction required on any other device.
Even better, when pulled out of the charging case they actually wait a bit (a few seconds? or detecting when they're put in ear?) so you can actually invoke some quick setting pane and connect without the connection ever going to an unsuspected device.
Dishonourable mention for Bose QC-35 II, who operates like the MMX 200, only it has two BT radios as an attempt to work around that it's doing it wrong. So, it connects to the last two devices. Unfortunately if I'm walking around the house listening to music and the second-to-last device goes out of range the headset goes "<device name> disconnected" then a few moments later "<device name> connected", which is horrible when <device name> is made out of a serial number (work laptop) and it goes on to spell it out "C. O. M. P. H. 4. 7. X. 3. 9. 9. 7. P. K. Q. L. disconnected".
The only way to prevent that is to go through the Bose app and remove devices from the history, essentially pairing it with one-device-at-a-time only. Oh, it's also great for jump scares when your SO is aping the iPad again and it turns out the headset is connected to it. All of which could be avoided if it behaved like the Free BYRD.
From what I read online, Bluetooth standart is bloated with outdated profiles and not free for manufacturers to implement. Because of that, manufacturers strap own proprietary extensions on it that only their devices support (e.g. AirPods audio qulity with mic is only good on Apple devices)[1].
Others mention that bluetooth was initially designed for less capble devices, thus suffering from low bitrate and signal strength.
Adjacent discussion here: https://news.ycombinator.com/item?id=40180133
[1]: https://medium.marco.zone/apple-implemented-the-biggest-impr...
What we need is a new profile that uses A2DP in once direction and in the other for the microphone. I suspect the reason it has never happened is that there's a good chance of causing issues with existing devices that do at least work with HFP.
Is this specifically a Bluetooth headphone thing, or an "any headphones with a mic on any OS" thing?
MacBooks newer than 2023 SHOULD have better call quality. They have Bluetooth 5.3¹. Can anybody confirm this? I have been meaning to try pairing my earbuds with a floor model at a store and testing audio quality but's only to satisfy a curiosity for me.
---
1. https://support.apple.com/en-us/111838
Yes and no. Part of it is also how the OS is used.
Sure if you want to use the mic on your headset you are forced to use a lower quality codec, but on my Fedora I select which profile I want to use on my bluetooth headset[1]. If I set it to AAC or APTX it will not activate the microphone.
And I can easily select which device is the primary device for inputs, outputs or individual apps.
[1] Typically using pulseaudio volume control which is compatible with pipewire (or rather the opposite).
It's not a company unto itself -- you can't do subscription, do $3.99. There has to be some sheen of continued value generation on the producer side beyond maintenance and bug fixes to justify a subscription. Here, you're going for an impulse buy.
I highly recommend cutting down the word count for the description.
You want it to be a 10 second no-brainer, open link, read description, realize its well-founded and my $4000 MacBook Pro has a fundamental problem with my $200 headphones that I can solve immediately for ~nothing.
FWIW you lost my attention around here, though there is excess fluff throughout: "Since recently Shazam is built in into macOS and you can access it from the menubar to find songs, even with your AirPods on. It's fantastic, you should use it all the time."
In general, gotta be ruthless and cut everything out that isn't necessary. I don't care A) when Shazam was introduced B) I can use it even with Airpods on C) what you think of it D) what you think of how often I should use it. All you need is "You can hear the bug: with your AirPods on, play a YouTube video, then click Shazam in the macOS menu bar, then stop Shazam and unpause the YouTube video. How does it sound?"
You're not cutting it out because I don't care, you're cutting it out because you have about 10 seconds of attention if you're lucky, and if it runs out, you're done.
Note: I struggle with this 100% of the time :) key to understanding it more was realizing "I don't care" wasn't voiced in an aggressive way, like it would be in conversation. It meant "this was a sentence where I lost attention", and is a license to believe your message is 100% clear, in fact > 100 + x% clear and all you have to do is cut x% and you're optimal. Good position to be in.