Saltar al contenido

¿Cómo mantener el perfil de audio en A2DP mientras se usa un micrófono con auriculares Bluetooth? (Pulsar para hablar)

Solución:

Ondra, hay una discusión de solicitud de fusión de audio de pulso muy largo que contiene la mayor parte de la información.

tl; dr; para que las cosas funcionen pulse audio, bluez y kernel deben actualizarse (no trivialmente). También un demonio separado hsphfpd es necesario.

Las actualizaciones del kernel no están progresando y la entrada del usuario a los mantenedores sería útil para impulsar las cosas. Piense en proporcionar tal. Mira aquí.

Sin los parches del kernel, el uso del micrófono de los auriculares produce una calidad de audio terrible (modo de funcionamiento HSP / HFP).

Pero existe la posibilidad de que solo los parches Pulse (y el soporte de sus auriculares) puedan habilitar el audio bidireccional A2DP, que debería estar bien para la mayoría de los propósitos.

Y ese parche está progresando bien en este momento. Más comentarios al respecto no deberían doler.

Actualización: las cosas en la solicitud de extracción mencionada anteriormente se intensificaron muy rápidamente y parece que PulseAudio nunca implementará la compatibilidad adecuada con bluetooth. Esperemos Pipewire que ya tiene algunos parches.

Estaba a punto de devolver el auricular y esperar por los auriculares Bluetooth 5.0, pero luego me di cuenta de que esa es la mejor funcionalidad que puedo obtener con mi computadora portátil BT 4.0. Así que los guardé.

Aún así, escuchar a un francés con audio de 16 bits y 8000 Hz no era realmente la forma correcta de tener una reunión. Durante unos días, estuve cambiando entre los dos modos usando el cuadro de diálogo de configuración de sonido de Ubuntu, pero eso es realmente, realmente molesto, como puedes imaginar.

Así que escribí este script aprovechando pacmd que alterna entre los 2 modos:

  • Audio de mierda, micrófono encendido
  • Audio con calidad similar a la de CD, micrófono apagado

No está pulido, tiene un código muerto y utilizo las ID de mi propio teléfono, pero puede ser una inspiración para su propio script. Última versión aquí.

#!/bin/bash

####  Restart Bluetooth
if [ "$1" == "resetBT" ] ; then
  sudo rfkill block bluetooth && sleep 0.1 && sudo rfkill unblock bluetooth;
  exit;
fi;

#### Toggle listen/speak
if [ "$1" == "" -o "$1" == "toggle" ] ; then
  LINE=`pacmd list-sinks  | grep '(name:|alias)' | grep -B1 F5A  | head -1`
  if [ "$LINE" == "" ] ; then echo "F5A headset not found"; exit; fi

  SINK_NAME="bluez_sink.00_19_5D_25_6F_6C.a2dp_sink"
  if $(echo "$LINE" | grep $SINK_NAME &> /dev/null) ; then
    echo "Detected quality sound output, that means we can't speak; switch that."
    $0 speak;
  else
    echo "Quality sound not found, switch to the good sound."
    $0 listen;
  fi
fi

#### Change the output to F5A
if [ "$1" == "listen" ] ; then
  LINE=`pacmd list-sinks  | grep '(name:|alias)' | grep -B1 F5A  | head -1`
  if [ "$LINE" == "" ] ; then echo "F5A phones not found"; exit; fi
  #        name: <bluez_sink.00_19_5D_25_6F_6C.headset_head_unit>

  ## Get what's between <...>
  SINK_NAME=`echo "$LINE" | tr '>' '<' | cut -d'<' -f2`;

  ## The above gives an ID according to the active profile.
  ## To set manually:
  #SINK_NAME="bluez_sink.00_19_5D_25_6F_6C.headset_head_unit"
  #SINK_NAME="bluez_sink.00_19_5D_25_6F_6C.a2dp_sink"

  ## Switch the output to that.
  echo "Switching audio output to $SINK_NAME";
  pacmd set-default-sink "$SINK_NAME"

  #### Change profile to quality output + no mic. From `pacmd list-cards`:
  CARD="bluez_card.00_19_5D_25_6F_6C"
  PROFILE="a2dp_sink"   
  echo "Switching audio profile to $PROFILE";
  pacmd set-card-profile $CARD $PROFILE
  exit;
fi;

#### Input
if [ "$1" == "speak" ] ; then
  ## Change profile to crappy output + mic. From `pacmd list-cards`:
  CARD="bluez_card.00_19_5D_25_6F_6C"
  pacmd set-card-profile $CARD headset_head_unit

  LINE=`pacmd list-sources | grep '(name:|alias)' | grep -B1 F5A  | head -1`
  if [ "$LINE" == "" ] ; then echo "F5A mic not found"; exit; fi
  SOURCE_NAME=`echo "$LINE" | tr '>' '<' | cut -d'<' -f2`;
  #SOURCE_NAME="bluez_source.00_19_5D_25_6F_6C.headset_head_unit"
  #SOURCE_NAME="bluez_sink.00_19_5D_25_6F_6C.a2dp_sink.monitor"
  echo "Switching audio input to $SOURCE_NAME";
  pacmd set-default-source "$SOURCE_NAME" || echo 'Try `pacmd list-sources`.';
fi;


####  Resources:

##  Why this is needed
# https://jimshaver.net/2015/03/31/going-a2dp-only-on-linux/

##  My original question
# https://askubuntu.com/questions/1004712/audio-profile-changes-automatically-to-hsp-bad-quality-when-i-change-input-to/1009156#1009156

##  Script to monitor plugged earphones and switch when unplugged (Ubuntu does that, but nice script):
# https://github.com/freundTech/linux-helper-scripts/blob/master/padevswitch/padevswitch

Espero que esto ayude a alguien 🙂

Según este artículo, me temo que Bluetooth no me dará el placer de escuchar un sonido de calidad y hablar por los auriculares al mismo tiempo. : /

Sin embargo, al no aceptar esta respuesta, todavía espero que alguien encuentre alguna forma de hacerlo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *