Finding Linux Drivers For The Fifine K050 Microphone
After my microphone - a heavily-used repurposed Plantronics USB headset with a DIY stand - was beginning to show signs of not working, I decided I should buy a more “proper” USB microphone for online video calls.
After some searching around for cheap USB microphones, I came across the Fifine K050 USB Microphone for about $20 on their official site.
Terminal time
After plugging the mic into my computer (Linux 5.4.0-65-generic #73-Ubuntu x86_64 GNU/Linux
) it did not seem to be recognized as a microphone, so I started investigating.
I was initially under the impression that the mic wasn’t even being detected by ALSA since aplay -l
didn’t seem to be listing it, however, after revisiting this a few days later, I realized that aplay -l
was probably just a listing of output devices.
I also tried various other software methods of inspecting this microphone, such as pavucontrol
and some other random commands that I had in my .bash_history
from a different project. However, none of this worked.
The K050 was appearing in lsusb
as Bus 001 Device 024: ID 0c76:161e JMTek, LLC. USB PnP Audio Device
(full lsusb -v
output is available here). dmesg
was also showing similar output when the device was plugged in:
[91376.015129] usb 1-1.2: new full-speed USB device number 34 using xhci_hcd
[91376.116045] usb 1-1.2: New USB device found, idVendor=0c76, idProduct=161e, bcdDevice= 1.00
[91376.116051] usb 1-1.2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[91376.116054] usb 1-1.2: Product: USB PnP Audio Device
[91376.123207] usb 1-1.2: Warning! Unlikely big volume range (=496), cval->res is probably wrong.
[91376.123213] usb 1-1.2: [50] FU [Mic Capture Volume] ch = 1, val = 0/7936/16
[91376.125127] input: USB PnP Audio Device as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1.2/1-1.2:1.2/0003:0C76:161E.000B/input/input35
[91376.183759] hid-generic 0003:0C76:161E.000B: input,hidraw1: USB HID v1.00 Device [USB PnP Audio Device] on usb-0000:00:14.0-1.2/input2
Hardware time
With seemingly nothing discovered from the software side, I decided to take a look to see if I could figure out what audio chips this thing was using, in the hopes that it was something standard that had driver support in Linux.
Peeling around the edge of the bottom cover a little and gently prying out the little semitransparent disk at the bottom of the unit exposed the PCB, but, where I was expecting to find some markings on the main chip that was visible, there was just a blank IC with no markings.
Nothing turned up underneath the little black foam pad either, apart from more small surface-mount components. The bottom surface of the PCB was completely flat with no electronic components in sight, just a sticker with what I suspect was a serial number.
With next to no information and not enough knowledge of how drivers work to have any chance of writing my own, I had pretty much given up hope and was beginning to look up what my options were for finding this microphone a better home.
Second attempt
A few days later, I ended up poking around a little more online when I came across an old mailing list archive from 2009 about an old patch for some JMTek audio issue. It was mostly unrelated to my issue, however, the subject line contained “[snd-usb-audio]” which was interesting.
Then I found an AskUbuntu question talking about snd-hda-intel
being blacklisted. For whatever reason, the command in the accepted answer showed that it was also blacklisted on my machine and this made me curious about the contents of the /etc/modprobe.d/oss4-base_noALSA.conf
file, especially since I didn’t even have oss4
installed. The file contained a whole bunch of blacklist
lines, each followed by a different name for what seemed like different sound drivers, all starting with snd-
.
While scrolling the list, I noticed the curious generic snd-usb-audio
driver from earlier and decided to enable it on my machine with sudo modprobe snd-usb-audio
, not really expecting much. This ended up being the ultimate fix to get my new Fifine K050 to play nice with Linux.
For Posterity
Since I couldn’t initially find ANY documentation whatsoever online discussing Linux compatibility with the Fifine K050, I decided I should make some in the form of this blog post in the hope it helps someone else spend slightly less time than I did to get this to work.
To automatically load snd-usb-audio
after a reboot, I also commented out the line from the config file as mentioned in the AskUbuntu post.
I’ll also leave the specs page from the manual here as well for anyone else looking to purchase the K050. While I don’t fully understand how to interpret this spec sheet, I can say from my time with this microphone so far that it is fairly sensitive and somewhat omnidirectional. While it isnt as good at picking up sound from behind when it’s pointed at/near you, it’s still sensitive enough to pick up pretty much any noise that’s made on your desk, in the room, or even sounds from outside.
As a microphone for video calls, I would have preferred something a little more directional to help cut down on the background noise, however, I’m sure this can also be solved by tweaking the settings. Overall, given the $20 price, it’s a decent little microphone.
Also, it works with minimal effort on Raspberry Pi (see instructions for recording and playback).