tv-speakers-output-with-computer-mic
Problem
Want to use Chromecast to output audio (e.g., from video calls, music, system audio) to TV speakers while keeping the microphone input on the computer.
Use Cases
- Video calls: Hear participants through TV speakers while speaking into computer mic
- Music/media: Play audio through better TV speakers
- Presentations: Output presentation audio to TV while using computer for control
Important Note About Google Meet
Google Meet’s built-in casting does NOT send audio to TV by default. When you cast a Google Meet to Chromecast, only the video displays on TV - audio and microphone remain on the computer. This is by design and there’s a known bug affecting audio routing with Meet casting.
Solutions
Solution 1: Use mkchromecast (Recommended)
mkchromecast is a program that casts audio/video from Linux to Google Cast devices. It creates a PulseAudio/PipeWire sink that you can route audio to.
Installation
Option A: From GitHub (Latest)
# Install dependenciessudo apt install python3-pip python3-flask python3-psutil \ python3-pychromecast vorbis-tools sox lame flac opus-tools \ ffmpeg nodejs npm
# Clone and installgit clone https://github.com/muammar/mkchromecast.gitcd mkchromecastpip3 install .Option B: From package manager (if available)
sudo apt install mkchromecastUsage
Start mkchromecast to create audio sink:
# Basic usage (auto-detect Chromecast)mkchromecast
# With specific codec for better qualitymkchromecast --codec mp3 --encoder-backend ffmpeg
# Launch with GUImkchromecast -t
# For PulseAudio specificallymkchromecast --pulseaudioRoute application audio:
- Start
mkchromecast - Open PulseAudio Volume Control:
pavucontrol - Go to “Playback” tab
- Find your application (Chrome, Firefox, Spotify, etc.)
- Change output to “mkchromecast” sink
- Audio now goes to TV speakers
Keep microphone on computer:
- In
pavucontrol, go to “Input Devices” tab - Your computer mic should already be the default
- In “Recording” tab, verify applications use computer mic
Solution 2: Use pulseaudio-dlna
pulseaudio-dlna creates PulseAudio sinks for all UPnP/DLNA/Chromecast devices on the network.
Installation
# Install dependenciessudo apt install python3-pip python3-setuptools python3-docopt \ python3-requests python3-setproctitle python3-gi \ python3-protobuf python3-netifaces python3-lxml \ vorbis-tools sox lame flac opus-tools
# Install pulseaudio-dlnasudo pip3 install pulseaudio-dlnaUsage
Start pulseaudio-dlna:
# Basic usagepulseaudio-dlna
# With specific codec (recommended for Chromecast)pulseaudio-dlna --codec mp3 --encoder-backend ffmpeg
# Auto-reconnect if connection dropspulseaudio-dlna --auto-reconnectSelect Chromecast as output:
- After starting
pulseaudio-dlna, Chromecast appears as audio sink - Use
pavucontrolto route specific applications - Or set as default: System Settings → Sound → Output
Note: pulseaudio-dlna has noticeable lag (~2-3 seconds), making it unsuitable for video calls but fine for music.
Solution 3: Chrome Browser Tab Casting (Limited)
Chrome can cast individual tabs, including audio, but this is tab-specific and won’t work for all applications.
Steps
- Open Chrome
- Click ⋮ (three dots) → Cast
- Select your Chromecast device
- Choose “Cast tab” and enable “Cast tab audio”
- Open your web app (YouTube, Spotify, etc.) in that tab
Limitations:
- Only works for that specific Chrome tab
- Doesn’t cast system audio or other applications
- Microphone still uses computer (good for video calls)
- Video quality may be reduced
Audio Routing with pavucontrol
pavucontrol (PulseAudio Volume Control) is essential for managing separate input/output devices.
Install pavucontrol
sudo apt install pavucontrolUsing pavucontrol
Configure Output (Speakers):
- Launch
pavucontrol - Go to “Playback” tab
- For each application, select output device:
- mkchromecast → TV speakers via Chromecast
- Built-in Audio → Computer speakers
- Set default: “Output Devices” tab → click green checkmark
Configure Input (Microphone):
- Go to “Input Devices” tab
- Ensure your computer mic is listed and not muted
- Go to “Recording” tab
- For each application (Chrome, Zoom, etc.), select your computer mic
Set Duplex Mode (Simultaneous Input/Output):
- Go to “Configuration” tab
- Find your internal audio device
- Set profile to: “Analog Stereo Duplex”
- This enables simultaneous mic input and speaker output
Step-by-Step: Video Calls with TV Speakers
For Google Meet (or Zoom, Discord, etc.)
-
Start audio casting:
Terminal window mkchromecast --codec mp3 --encoder-backend ffmpeg -
Configure audio routing:
- Launch
pavucontrol - Wait for mkchromecast to connect to Chromecast
- Launch
-
Join video call:
- Open Google Meet/Zoom in browser
- Join meeting
-
Route call audio to TV:
- In
pavucontrol→ “Playback” tab - Find your browser/app
- Change output to “mkchromecast”
- In
-
Verify microphone:
- In
pavucontrol→ “Recording” tab - Verify browser is using computer mic
- Or check in Google Meet settings → Audio
- In
-
Test:
- Speak into computer mic
- Hear others through TV speakers
Troubleshooting
Issue: No sound from TV
Check:
- Is mkchromecast running? Check terminal output
- Is Chromecast connected to same network?
- Is TV volume up and not muted?
- In
pavucontrol, is application routed to “mkchromecast”? - Is Chromecast already in use by another app?
Fix:
# Restart mkchromecastpkill mkchromecastmkchromecast --codec mp3 --encoder-backend ffmpeg
# Check PulseAudio sinkspactl list sinks shortIssue: Audio lag/delay
Cause: Network latency, encoding overhead
Solutions:
- Use wired Ethernet instead of WiFi (for computer)
- Use better codec:
--codec mp3or--codec aac - Use mkchromecast instead of pulseaudio-dlna (lower latency)
- For video calls, consider using computer speakers (lag is too noticeable)
Note: Some lag (0.5-2 seconds) is unavoidable with casting. This makes it unsuitable for real-time applications like gaming or some video calls.
Issue: Microphone not working
Check:
- In
pavucontrol→ “Input Devices” tab → Mic not muted - In application settings, correct mic selected
- Grant mic permissions in browser (Chrome: Site Settings)
Fix:
# List input devicespactl list sources short
# Test microphonearecord -f cd -d 5 test.wavaplay test.wavIssue: Can’t find Chromecast device
Check:
- Chromecast and computer on same WiFi network
- Firewall not blocking mDNS/discovery
- Chromecast is powered on and connected to TV
Fix:
# Install avahi for device discoverysudo apt install avahi-daemon avahi-utils
# Check if Chromecast is discoverableavahi-browse -aIssue: mkchromecast not creating sink
Solutions:
-
Make sure PulseAudio is running (or PipeWire with pulse compatibility)
Terminal window # Check audio serverpactl info# If using PipeWiresystemctl --user status pipewire pipewire-pulse -
Try launching with PulseAudio flag explicitly:
Terminal window mkchromecast --pulseaudio -
Check dependencies are installed (see Installation section)
PipeWire Support
Modern Ubuntu (22.04+) uses PipeWire instead of PulseAudio. Good news: PipeWire maintains PulseAudio compatibility.
Check if using PipeWire:
pactl info | grep "Server Name"# Output: PulseAudio (on PipeWire) → using PipeWire# Output: pulseaudio → using PulseAudioCompatibility:
mkchromecastworks with PipeWire (via pulseaudio compatibility layer)pulseaudio-dlnaworks with PipeWirepavucontrolworks with PipeWire- All commands use
pactl(works with both)
Comparison: mkchromecast vs pulseaudio-dlna
| Feature | mkchromecast | pulseaudio-dlna |
|---|---|---|
| Latency | Lower (~0.5-1s) | Higher (~2-3s) |
| Quality | Better (configurable codecs) | Good |
| Setup | Simple | Simple |
| GUI | Yes (-t flag) | No |
| Active Development | Moderate | Limited |
| Best For | Video calls, real-time | Music, podcasts |
Recommendation: Use mkchromecast for lower latency and better control.
Alternative: Use HDMI Cable
For zero latency, consider connecting computer to TV via HDMI:
- Pros: No lag, perfect sync, simple
- Cons: Requires HDMI cable, less flexible, computer must be near TV
# After connecting HDMI, select HDMI output in pavucontrolpavucontrol# Output Devices tab → Select HDMICommands Reference
# Install mkchromecastsudo apt install python3-pip ffmpeggit clone https://github.com/muammar/mkchromecast.git && cd mkchromecastpip3 install .
# Run mkchromecastmkchromecast --codec mp3 --encoder-backend ffmpeg
# Install and run pulseaudio-dlnasudo pip3 install pulseaudio-dlnapulseaudio-dlna --codec mp3 --encoder-backend ffmpeg
# Audio controlpavucontrol # Open GUI mixerpactl list sinks short # List output devicespactl list sources short # List input devicespactl set-default-sink SINK_NAME # Set default outputpactl set-default-source SOURCE_NAME # Set default input
# Test audiospeaker-test -c 2 # Test speakersarecord -f cd -d 5 test.wav # Record from micaplay test.wav # Play recording
# Network troubleshootingavahi-browse -a # Discover devices on networkpactl info # Check audio server infoStatus
- Date Created: 2025-11-16
- System: Ubuntu
- Tested Solutions: Documentation phase
- Recommended Solution: mkchromecast with pavucontrol