Environment
- JDSP4Linux version: 2.7.0-50-gb585084 (PipeWire flavor)
- OS: Linux Mint 22.3 (Cinnamon 6.6.9)
- Audio server: PipeWire 1.0.5 + WirePlumber 0.4.17 (via pipewire-pulse)
- Bluetooth headset: Sennheiser MOMENTUM 4
- Bluetooth profile at time of bug:
headset-head-unit-msbc (HFP, mono, 16kHz) — this profile is auto-selected by WirePlumber whenever the headset's microphone is used (e.g. during a VoIP call)
Description
When the configured output device is a Bluetooth sink that only exposes a single mono port (playback_MONO, as produced by the BlueZ HFP/HSP headset-head-unit profiles), JDSP4Linux produces no audible output, even though:
pw-link -l shows a valid connection from the plugin node to the sink:
jdsp_@PwJamesDspPlugin_JamesDsp:output_FL
|-> bluez_output.XX_XX_XX_XX_XX_XX.1:playback_MONO
- The upstream app (tested with Teams for Linux / Chromium) is confirmed to be sending a live signal to
jamesdsp_sink (verified visually via pavucontrol's peak meter, which moves during playback).
jamesdsp_sink and the Bluetooth sink both report state RUNNING (not suspended).
- Running
--relink does not fix it.
- Disabling all DSP processing via
--set master_enable=false (passthrough) does not fix it either — so this is not an effects/processing bug, but appears to be in the plugin's own routing/resampling to a mono-only sink.
Steps to reproduce
- Connect a Bluetooth headset that supports both A2DP and HFP/HSP (e.g. Sennheiser MOMENTUM 4).
- Set JDSP4Linux's output device to the Bluetooth sink, with
AudioOutputUseDefault=true.
- Start a call in an app that uses the headset's microphone (e.g. Teams for Linux), forcing WirePlumber to switch the Bluetooth profile to
headset-head-unit-msbc (mono, 16kHz).
- Observe: playback stream is active (visible level in pavucontrol /
pactl list sink-inputs), pipeline is linked (pw-link -l shows the connection), but no audio is audible on the headset.
- Confirm the pipeline itself is fine: quit JDSP4Linux entirely. The same app now connects directly to the Bluetooth sink and audio works correctly.
- Confirm it's not a DSP/effects issue: with JDSP4Linux running, run
jamesdsp --set master_enable=false (passthrough) — still no audio.
Expected behavior
Audio should play correctly regardless of whether the target sink exposes stereo (FL/FR) or a single mono port, the same way it does when the Bluetooth device is in A2DP mode (stereo, works fine).
Actual behavior
Silent output whenever the target device is a mono-only Bluetooth sink (HFP/HSP call profile), both with processing enabled and in passthrough mode.
Workaround
Quit JDSP4Linux before starting a call, relaunch afterwards for normal (A2DP) listening.
Environment
headset-head-unit-msbc(HFP, mono, 16kHz) — this profile is auto-selected by WirePlumber whenever the headset's microphone is used (e.g. during a VoIP call)Description
When the configured output device is a Bluetooth sink that only exposes a single mono port (
playback_MONO, as produced by the BlueZ HFP/HSPheadset-head-unitprofiles), JDSP4Linux produces no audible output, even though:pw-link -lshows a valid connection from the plugin node to the sink:jamesdsp_sink(verified visually via pavucontrol's peak meter, which moves during playback).jamesdsp_sinkand the Bluetooth sink both report stateRUNNING(not suspended).--relinkdoes not fix it.--set master_enable=false(passthrough) does not fix it either — so this is not an effects/processing bug, but appears to be in the plugin's own routing/resampling to a mono-only sink.Steps to reproduce
AudioOutputUseDefault=true.headset-head-unit-msbc(mono, 16kHz).pactl list sink-inputs), pipeline is linked (pw-link -lshows the connection), but no audio is audible on the headset.jamesdsp --set master_enable=false(passthrough) — still no audio.Expected behavior
Audio should play correctly regardless of whether the target sink exposes stereo (
FL/FR) or a single mono port, the same way it does when the Bluetooth device is in A2DP mode (stereo, works fine).Actual behavior
Silent output whenever the target device is a mono-only Bluetooth sink (HFP/HSP call profile), both with processing enabled and in passthrough mode.
Workaround
Quit JDSP4Linux before starting a call, relaunch afterwards for normal (A2DP) listening.