Bluetooth Audio (BCM4360), Fedora 39, stutters, reduced quality

Bluetooth audio stutters, lags, and quality is reduced. iMac15,1 with broadcom-wl driver. Fedora 39 workstation.

The bluetooth speaker is called PURE SBW-320

`❯ inxi -Fzxx`
System:
  Kernel: 6.5.11-300.fc39.x86_64 arch: x86_64 bits: 64 compiler: gcc
    v: 2.40-13.fc39 Desktop: GNOME v: 45.1 tk: GTK v: 3.24.38 wm: gnome-shell
    dm: GDM Distro: Fedora release 39 (Thirty Nine)
Machine:
  Type: Desktop System: Apple product: iMac15,1 v: 1.0
    serial: <superuser required> Chassis: type: 13 v: Mac-42FD25EABCABB274
    serial: <superuser required>
  Mobo: Apple model: Mac-42FD25EABCABB274 v: iMac15,1
    serial: <superuser required> UEFI: Apple v: 432.60.3.0.0 date: 10/27/2021
Battery:
  Device-1: hidpp_battery_4 model: Logitech MX Ergo Multi-Device Trackball
    serial: <filter> charge: 100% (should be ignored) status: discharging
CPU:
  Info: quad core model: Intel Core i5-4590 bits: 64 type: MCP arch: Haswell
    rev: 3 cache: L1: 256 KiB L2: 1024 KiB L3: 6 MiB
  Speed (MHz): avg: 3176 high: 3700 min/max: 800/3700 cores: 1: 3546 2: 3700
    3: 3691 4: 1770 bogomips: 26337
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
Graphics:
  Device-1: AMD Pitcairn PRO [Radeon HD 7850 / R7 265 R9 270 1024SP]
    vendor: Apple driver: radeon v: kernel arch: GCN-1 pcie: speed: 8 GT/s
    lanes: 16 ports: active: eDP-1 empty: DP-1,DP-2,DP-3 bus-ID: 01:00.0
    chip-ID: 1002:6819 temp: 61.0 C
  Device-2: Apple FaceTime HD Camera (Built-in) driver: uvcvideo type: USB
    rev: 2.0 speed: 480 Mb/s lanes: 1 bus-ID: 1-7:3 chip-ID: 05ac:8511
  Display: wayland server: X.org v: 1.20.14 with: Xwayland v: 23.2.2
    compositor: gnome-shell driver: X: loaded: radeon
    unloaded: fbdev,modesetting,vesa dri: radeonsi gpu: radeon display-ID: 0
  Monitor-1: eDP-1 model: Apple iMac res: 3840x2160 dpi: 163
    diag: 685mm (27")
  API: OpenGL v: 4.5 vendor: amd mesa v: 23.2.1 glx-v: 1.4 es-v: 3.2
    direct-render: yes renderer: PITCAIRN ( LLVM 16.0.6 DRM 2.50
    6.5.11-300.fc39.x86_64) device-ID: 1002:6819 display-ID: :0.0
  API: EGL Message: EGL data requires eglinfo. Check --recommends.
Audio:
  Device-1: Intel 8 Series/C220 Series High Definition Audio
    driver: snd_hda_intel v: kernel bus-ID: 00:1b.0 chip-ID: 8086:8c20
  Device-2: AMD Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000
    Series] driver: snd_hda_intel v: kernel pcie: speed: 8 GT/s lanes: 16
    bus-ID: 01:00.1 chip-ID: 1002:aab0
  API: ALSA v: k6.5.11-300.fc39.x86_64 status: kernel-api
  Server-1: PipeWire v: 0.3.84 status: active with: 1: pipewire-pulse
    status: active 2: wireplumber status: active 3: pipewire-alsa type: plugin
    4: pw-jack type: plugin
Network:
  Device-1: Broadcom BCM4360 802.11ac Wireless Network Adapter vendor: Apple
    driver: wl v: kernel pcie: speed: 2.5 GT/s lanes: 1 bus-ID: 03:00.0
    chip-ID: 14e4:43a0
  IF: wlp3s0 state: down mac: <filter>
  Device-2: Broadcom NetXtreme BCM57766 Gigabit Ethernet PCIe driver: tg3
    v: kernel pcie: speed: 2.5 GT/s lanes: 1 port: N/A bus-ID: 04:00.0
    chip-ID: 14e4:1686
  IF: enp4s0f0 state: up speed: 1000 Mbps duplex: full mac: <filter>
Bluetooth:
  Device-1: Apple Bluetooth Host Controller driver: btusb v: 0.8 type: USB
    rev: 2.0 speed: 12 Mb/s lanes: 1 bus-ID: 1-8.3:8 chip-ID: 05ac:828d
  Report: btmgmt ID: hci0 rfk-id: 1 state: up address: <filter> bt-v: 4.0
    lmp-v: 6
Drives:
  Local Storage: total: 1.93 TiB used: 645.67 GiB (32.7%)
  ID-1: /dev/sda vendor: OWC model: Mercury Electra 6G SSD size: 1.82 TiB
    speed: 6.0 Gb/s serial: <filter>
  ID-2: /dev/sdb vendor: Apple model: SSD SM0128G size: 113 GiB
    speed: 6.0 Gb/s serial: <filter>
Partition:
  ID-1: / size: 1.82 TiB used: 645.15 GiB (34.7%) fs: btrfs dev: /dev/sda3
  ID-2: /boot size: 973.4 MiB used: 494.8 MiB (50.8%) fs: ext4
    dev: /dev/sda2
  ID-3: /boot/efi size: 196.9 MiB used: 42 MiB (21.4%) fs: vfat
    dev: /dev/sda1
  ID-4: /home size: 1.82 TiB used: 645.15 GiB (34.7%) fs: btrfs
    dev: /dev/sda3
Swap:
  ID-1: swap-1 type: zram size: 8 GiB used: 1024 KiB (0.0%) priority: 100
    dev: /dev/zram0
Sensors:
  System Temperatures: cpu: 68.0 C mobo: N/A gpu: radeon temp: 62.0 C
  Fan Speeds (rpm): N/A
Info:
  Processes: 370 Uptime: 15h 38m Memory: total: 32 GiB available: 31.27 GiB
  used: 10.43 GiB (33.3%) Init: systemd v: 254 target: graphical (5)
  default: graphical Compilers: gcc: 13.2.1 clang: 17.0.3 Packages: pm: rpm
  pkgs: N/A note: see --rpm pm: flatpak pkgs: 141 Shell: fish v: 3.6.1
  running-in: flatpak-session inxi: 3.3.31

I’ve tried:

  • tweaking alsa settings:
    ❯ cat /etc/modprobe.d/alsa-base.conf 
    options snd-hda-intel model=generic
    
    ❯ cat /etc/modprobe.d/mycustom.conf
    options snd_hda_intel power_save=0
    options snd_hda_intel power_save_controller=N
    
  • setting a higher priority for wireplumber:
    renice -n 19 3820
    
  • setting a higher delay for audio:
    ❯ pactl set-port-latency-offset bluez_card.41_42_B6_07_20_BB headphone-output 100000
    
  • switching to SBC profile from SBC-XQ in GNOME sound settings

I had the same problem. In my case, it could be fixed by switching the configuration to use the AAC codec in the GNOME sound settings, but I guess that is not available for all audio devices.