Skip to content

Audio Control

import { Aside } from ‘@astrojs/starlight/components’;

mcbluetooth integrates with PipeWire and PulseAudio to provide seamless Bluetooth audio control.

bt_audio_list

Returns all audio devices including Bluetooth:

{
"sinks": [
{
"name": "bluez_sink.C8_7B_23_55_68_E8.a2dp_sink",
"description": "Bombay",
"bluetooth_address": "C8:7B:23:55:68:E8",
"volume": 65536,
"volume_percent": 75,
"muted": false,
"state": "running"
}
],
"sources": [...],
"cards": [...]
}

After pairing a device, connect its audio profiles:

bt_audio_connect adapter="hci0" address="C8:7B:23:55:68:E8"

This connects A2DP (high-quality audio) and/or HFP (hands-free) profiles.

Bluetooth audio devices support different profiles:

ProfileQualityMicrophoneUse Case
A2DPHigh (stereo)NoMusic, videos
HFPLow (mono)YesPhone calls
HSPLow (mono)YesLegacy headsets
# High-quality stereo for music
bt_audio_set_profile address="C8:7B:23:55:68:E8" profile="a2dp"
# Hands-free for calls (enables microphone)
bt_audio_set_profile address="C8:7B:23:55:68:E8" profile="hfp"
# Disable audio (but stay connected for other profiles)
bt_audio_set_profile address="C8:7B:23:55:68:E8" profile="off"

Make a Bluetooth device the default audio output:

bt_audio_set_default address="C8:7B:23:55:68:E8"
# Set to 75%
bt_audio_volume address="C8:7B:23:55:68:E8" volume=75
# Boost to 120% (use carefully)
bt_audio_volume address="C8:7B:23:55:68:E8" volume=120
# Mute
bt_audio_mute address="C8:7B:23:55:68:E8" muted=true
# Unmute
bt_audio_mute address="C8:7B:23:55:68:E8" muted=false
bt_audio_disconnect adapter="hci0" address="C8:7B:23:55:68:E8"

This disconnects audio profiles but keeps the device connected for other services.

# Connect and set up for music
bt_connect adapter="hci0" address="C8:7B:23:55:68:E8"
bt_audio_connect adapter="hci0" address="C8:7B:23:55:68:E8"
bt_audio_set_profile address="C8:7B:23:55:68:E8" profile="a2dp"
bt_audio_set_default address="C8:7B:23:55:68:E8"
bt_audio_volume address="C8:7B:23:55:68:E8" volume=70
# Switch to HFP for microphone support
bt_audio_set_profile address="C8:7B:23:55:68:E8" profile="hfp"
# Switch back to A2DP for high-quality audio
bt_audio_set_profile address="C8:7B:23:55:68:E8" profile="a2dp"
  1. Check the device is connected: bt_device_info adapter="hci0" address="..."
  2. Verify audio profile is connected: bt_audio_list
  3. Ensure it’s set as default: bt_audio_set_default address="..."
  4. Check volume isn’t zero: bt_audio_volume address="..." volume=70
  • Interference: Move away from WiFi routers, microwaves
  • Distance: Stay within 10 meters of the adapter
  • Battery: Low battery can cause audio issues
  • Profile: Try switching profiles and back
# Ensure A2DP (not HFP) is active
bt_audio_set_profile address="..." profile="a2dp"

HFP is mono and lower quality — it’s for calls, not music.

# Switch to HFP or HSP
bt_audio_set_profile address="..." profile="hfp"

A2DP doesn’t support microphone input.

The device may need reconnection:

bt_audio_disconnect adapter="hci0" address="..."
bt_audio_connect adapter="hci0" address="..."

Audio quality depends on the codec negotiated between devices:

CodecQualityLatencyNotes
SBCGoodMediumUniversal, default
AACBetterMediumApple devices
aptXBetterLowQualcomm devices
aptX HDBestLowHigh-res audio
LDACBestMediumSony devices