Skip to main content

Terrible experience with bluetooth headsets and what to do about it

If you own a Bluetooth A2DP headset and any kind of personal computer, good chance is you tried connecting them together. Isn't it nice to watch movies and listen to music free from cluttering wires? Well, good chance is you hated that experience and if that was the reason for buying the headset, you might've even considered throwing it away (or using it only with your phone).

Why do they suck so much? Everything points to the fact that it's not a hardware problem. The same headset most likely will work flawlessly paired with an android device or even the same computer under a different operating system (windows users report huge difference between, like, 8.0 and 8.1, and not in favor of the latter, surprisingly, I think only mac users report good stuff about their macbooks and beats although I didn't try it myself so they might all be faking it :) ). And most likely it's not even the drivers or other low-level stuff, android and desktop linux has mostly the same driver stack in the kernel. My prime suspects are bluez (userland part of the bluetooth stack on most modern linux installations) and pulseaudio (audio manager thingy). ALSA (low-level sound thing) could also be at fault but I don't think it is. Those two are not, let's be frank here, examples of excellent software development although not open source at its worst either, to be honest, they mostly get the job done even if you might have a few troubles connecting devices and, say, ensuring your wireless input devices work before you log in to the system (for example, I own a bluetooth-capable mouse and I use included dongle instead, forever sacrificing a USB port for the sake of trouble-less experience), or you might do some tweaks and tricks to get rid of sound defects (haven't heard that one for a while, I suspect pulseaudio had so trouble performing when CPUs were largely single-core and constantly overloaded). And the combination of those two is a pure nightmare, whenever I try to pair a headset I expect to be fumbling and clicking various controls for at least a few seconds and even connecting an already paired device is almost never flawless (having to connect and disconnect things several times before they finally work is not new). Then, when all is done and seems to work, you a video and you suddenly want to kill someone. It lags so much it's almost never synced and even if you try to play with A/V synchronization and add some video delay it's next to impossible to done right because delay is variable. Something is not right with this world.

Compare this with android. You take the headset, you turn pairing mode on, open bluetooth settings, find the device you want and tap "pair". That's all, it works. If your phone and headset and both NFC-capable it be even easier: hold on close to the other, hear the bell sound, tap "allow" and you're all set. And it never suddenly disconnects, never lags or anything. From now on you most usually can just turn the headset on and don it whenever you feel like it and it will connect and start working almost immediately! Magic!

Now to the sad part. How to make the first more like the second? The short answer is I don't know but something should be done. There are some hardware hacks, like usb/bluetooth sound dongles which can do basically the same thing that dongle does for a mouse or keyboard: take up another port forever in exchange for more or less lack of bugs. Then android is mostly open-source and we just might be able to learn what they do differently and port that somehow to desktop linux. Or just work on fixing and optimizing bluez/pulseaudio (just clearly identifying the exact reason for these shortcomings would be a great start). Burning it all with fire is another possible solutions but I don't thing either of projects mentioned is deserving it, they just have a few bugs or possible deep design issues but otherwise they mostly get the job done and writing anything from scratch is likely to be more bothersome and introduce more new bugs.

If anybody has any context like code or developer discussion threads or bug reports I would really like to hear about it in comments. And I will update this post when/if I find any solution worth pursuing.

Popular posts from this blog

「この番組は、ご覧のスポンサーの提供でお送りします」Inference Labs

It's official, I have corporate sponsors now (which will hopefully be closer to strategic partnership soon, at least I'd like that). Thanks for the steaks and wine and equipment and all other resources for my distributed hacker team (I'm hoping for a cool demo for ETHOnline hackathon), and local Web3 meatup group I facilitate in Tbilisi (steaks and gas money for everyone participating in the ecosystem), and my Web3 community support army in training. A large bag of kudos for our general sponsor: Inference Labs! If anybody needs help onboarding into the decentralised world, reach me privately and we'll help you navigating the options, we have the expenses covered and good people for this (better points of contact are being established, things are being worked on, stay tuned). I should probably tell a few words about what we actually do at Inference Labs but things change so often I hope we're still bringing decentralized AI to the Web3 world when you read this (maybe...

Russia becomes an internet outcast for some reason

It's starting to happen more and more often to me. I'm trying to use some service and all of a sudden I see an error page, sometimes a custom one but more often generated by cloudflare or a similar service, with error message effectively saying that IP addresses from Russia are banned on the service. And what is even more interesting, most of this services don't have any particular policy reasons not to allow Russian users, it's not not like they are publishing prescribed materials or doing anything interesting whatsoever. A payment processor, a popular online course provider, some random forums and information sites, one site with educational videos that I like (that one is especially funny because I'm banned from the subscription page and so can't pay them but their cdn does't care and I can actually download any video I want). But why does it happen? Is there some recommendation in some popular security guideline "block Russia, Cambodia, and Afghan...

PyGTK and desktop stuff

A few lives ago I started my professional career by trying to sell custom office software. Having opinions about that kind of stuff I've chosen Python and PyGTK and some NoSQL database library and it's been quite a struggle. In this present moment I live as a digital nomad traveling neutral zones around World War Z and I use many different online services in my professional life and all desktop clients for them are super shitty, starting with google-built web browsers. And whenever I consider building a kind of desktop utility those programs are there's a lot of resistance and comparative lack of tools (in comparison with what web backend context provides). And a lot of primary consumers for some of those services (think collaboration services) are educated, experienced, and opinionated folks like myself. Perhaps there's profit in coding desktop linux software again? And combined with my backend proficiency I could be weird full stack dev services developer... I should ...