Turn your phone into a Linux microphone

Updated July 12, 2026 · 6 min read

The microphone in your phone is probably the best one you own, and on Linux, using it as a mic is simpler than anywhere else. There's no driver: Micstream is a small service that registers a virtual microphone directly with PipeWire, the audio system on every current distribution. PulseAudio, JACK, and ALSA applications all see it through PipeWire's compatibility layers.

You need three things:

  • A distribution with PipeWire — the default on Ubuntu 22.10+, Fedora 36+, Debian 12+, and Arch
  • An Android phone — iOS is planned for summer 2026
  • Both devices on the same network

Setup

  1. 1

    Install the Linux client

    On Debian, Ubuntu, or Mint:

    sudo apt install ./micstream-amd64.deb

    On Fedora:

    sudo dnf install ./micstream-x86_64.rpm

    On Arch and anything else, the tarball contains an install.sh that installs to your home directory — no root needed. Arch splits PipeWire's audio plugins into a separate package, so make sure it's present: sudo pacman -S --needed pipewire-audio. All downloads are at the bottom of this page.

  2. 2

    Start the service

    One command, once — it also starts automatically on every login afterwards:

    systemctl --user enable --now micstream

    (The tarball's install.sh already did this for you.)

  3. 3

    Install the Android app

    It's on Google Play. No account, no sign-up. Audio travels directly from the phone to your machine on the local network and never touches a server.

  4. 4

    Connect the phone

    Open the app — it finds your machine automatically, as long as both devices are on the same network. Android asks for microphone permission on the first connect.

  5. 5

    Pick Micstream as the input

    Select Micstream in the microphone settings of the app you're using, or set it system-wide — GNOME: Settings → Sound → Input; KDE: System Settings → Sound. It's a normal input device, so everything from Zoom to OBS treats it like hardware.

Discord and OBS have their own device pickers that override the system default, so select Micstream there directly — there are short guides for Discord and OBS.

Noise cancellation

Every package ships DeepFilterNet, the same noise-cancellation engine the Windows client uses. It's off by default; one command turns it on:

micstream set noise-suppression=on

It applies immediately — no restart, even mid-call — and stays on across reboots. The suppression is adaptive: it works harder the noisier the signal gets, up to 15 dB. If a fan or keyboard clatter still comes through, raise the ceiling while you're talking and listen for the sweet spot:

micstream set attenuation-limit=20

Everything runs on your computer, not on the phone, so it costs no phone battery.

Configuration

Behind micstream set sits one file: ~/.config/micstream/micstream.conf — one KEY=value per line, # starts a comment. set writes it for you; editing it by hand works just as well and takes effect on systemctl --user restart micstream.

KeyDefaultWhat it does
noise-suppressionoffDeepFilterNet noise cancellation, on or off.
attenuation-limit15How many dB of noise the suppression may remove at most (10–25).
noise-modelstandardlow-latency switches to a faster model, which isn't bundled: put DeepFilterNet3_ll_onnx.tar.gz into ~/.local/share/micstream.
update-checkonChecks once a day for a new release and shows a notification. Nothing installs itself.
telemetryonReliability statistics under a random install id — packet counters, never audio. off disables it.

noise-suppression and attenuation-limit apply live through micstream set; the other three take effect after the restart.

Everyday use

There's no window and no tray icon — by design. The client is a background service, and the one command worth remembering is:

micstream status
micstream 1.0.0
phone:       connected (192.168.0.42)
virtual mic: live — an app is capturing
noise:       active (standard model, limit 15 dB)
buffer:      61 ms buffered, 0 underruns, 0 trims
session:     84210 packets, 3 late, 2 concealed, 0 decode errors

It shows whether a phone is connected, whether an app is currently recording from the virtual mic, and what noise cancellation is doing. When the phone connects or disconnects, you also get a regular desktop notification. That — plus set from the sections above, --version, and --help — is the entire command line.

The service

The client is a plain systemd user service, so the usual commands apply:

# restart (needed after hand-editing the config file)
systemctl --user restart micstream

# stop, or stop and keep it off after reboots
systemctl --user stop micstream
systemctl --user disable --now micstream

# follow the logs
journalctl --user -u micstream -f

Updates

The client never replaces itself. When a new version is released, you get a desktop notification; download the new package from the links below and install it exactly like the first time — sudo apt install ./micstream-amd64.deb (or the rpm equivalent) upgrades in place, then systemctl --user restart micstream switches to the new binary. The tarball's install.sh restarts the service for you.

Troubleshooting

Micstream isn't in the input device list

Check that the service is running: systemctl --user status micstream. If it reports that PipeWire is unreachable, your distribution is likely still on plain PulseAudio — Micstream needs PipeWire (default since Ubuntu 22.10, Fedora 36, Debian 12). If the log shows pw_stream_connect failed, your system is missing PipeWire's audio plugins — on Arch install the pipewire-audio package. If the device exists but an app keeps using another mic, select Micstream in that app and restart it — many apps only scan for devices at startup.

The app can't find your computer

Check the boring thing first: the phone has to be on the same network as the computer, not on mobile data. Guest networks often enable AP isolation, which stops devices from seeing each other — switch both to your main network. If you run a firewall, allow UDP ports 37718–37720: with ufw that's sudo ufw allow 37718:37720/udp, with firewalld add the ports to your active zone.

Audio is choppy or delayed

That's the network, not the mic. Move closer to the router, or put the desktop on wired Ethernet — the phone side rarely is the bottleneck. The client keeps latency bounded on its own: short outages are concealed, and any backlog a congested network leaves behind is trimmed away automatically.

Common questions

Is it free?

The free tier is ad-supported: watching a rewarded ad grants streaming time. A Pro subscription removes the ads and limits.

Which distributions are supported?

Anything with PipeWire and systemd: Ubuntu, Debian, Fedora, Mint, Arch, and derivatives. The package is x86-64; the phone app talks the same protocol to Windows, macOS, and Linux clients, so nothing else changes.

What's the actual audio quality?

48 kHz stereo end to end, delivered into PipeWire as 32-bit float. Packet loss on the network is concealed by the codec's built-in error correction instead of turning into clicks.

Does it have noise suppression?

Yes — DeepFilterNet, off by default, one command to enable (no restart needed). See Noise cancellation above.

Can I use the phone while it's streaming?

Yes. The app runs in the background.

Downloads

And the app: