Com base em este artigo , receio que o Bluetooth não dê me o prazer de ouvir um som de qualidade e falar sobre o fone de ouvido ao mesmo tempo. : /
Não aceitando essa resposta, ainda espero que alguém encontre uma maneira de fazê-lo.
Eu tenho um fone de ouvido CEL-TEC F5A. A especificação diz:
Bluetooth 4.0, profiles: Headset, Hands free, A2DP, AVRCP/HSP/HFP
Funciona muito bem com o perfil Reprodução de alta fidelidade (A2DP sink) .
Quando quero mudar a entrada de áudio para o microfone do fone de ouvido, o perfil de saída muda automaticamente para Unidade Headset Headset (HFS / HFP) e a qualidade é terrível - como som de 8 bits ou algo assim. Quando eu alterno de volta para A2DP, a entrada volta ao microfone de mesa.
Eu li algumas das outras perguntas e parece que o A2DP não deve apoiar a entrada, certo? Mas a parte do HFP no HFS / HFP é Reprodução de Alta Fidelidade, eu acho? Parece que poderia funcionar como um fone de ouvido e ainda não soar como o telefone de 1950.
Como eu poderia simplificar a alternância entre os perfis para que seja HFS / HFP quando falo e A2DP quando eu ouço? Por exemplo: como um push-to-talk.
Ubuntu 17.10, sem customização de som IIRC, tudo mais recente. link
Minha saída:
$ pactl list cards
Card #0
Name: alsa_card.pci-0000_00_03.0
...
Card #4
Name: bluez_card.00_19_5D_25_6F_6C
Driver: module-bluez5-device.c
Owner Module: 30
Properties:
device.description = "F5A"
device.string = "00:19:5D:25:6F:6C"
device.api = "bluez"
device.class = "sound"
device.bus = "bluetooth"
device.form_factor = "headset"
bluez.path = "/org/bluez/hci0/dev_00_19_5D_25_6F_6C"
bluez.class = "0x240404"
bluez.alias = "F5A"
device.icon_name = "audio-headset-bluetooth"
device.intended_roles = "phone"
Profiles:
a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 10, available: yes)
headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 20, available: yes)
off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
Active Profile: a2dp_sink
Ports:
headset-output: Headset (priority: 0, latency offset: 0 usec, available)
Part of profile(s): a2dp_sink, headset_head_unit
headset-input: Headset (priority: 0, latency offset: 0 usec)
Part of profile(s): headset_head_unit
O problema aqui não é que o microfone não funcione, mas sim que a qualidade do áudio piora quando é ativada.
Com base em este artigo , receio que o Bluetooth não dê me o prazer de ouvir um som de qualidade e falar sobre o fone de ouvido ao mesmo tempo. : /
Não aceitando essa resposta, ainda espero que alguém encontre uma maneira de fazê-lo.
Eu estava prestes a devolver o fone de ouvido e esperar pelo fone de ouvido Bluetooth 5.0, mas percebi que essa é a melhor funcionalidade que posso obter com o meu laptop BT 4.0. Então eu os guardei.
Ainda assim, ouvir um cara francês com áudio de 16 bits e 8000 Hz não era o jeito certo de fazer uma reunião. Por alguns dias, eu estava alternando entre os dois modos usando a caixa de diálogo de configurações de som do Ubuntu, mas isso é realmente muito chato como você pode imaginar.
Então eu escrevi este script alavancando pacmd
que alterna entre os dois modos:
Ele não é polido, tem código morto e eu uso o ID do meu próprio telefone, mas pode ser uma inspiração para o seu próprio script. Versão mais recente aqui .
#!/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 isso ajude alguém :) Ainda assim, eu também não aceito esta resposta, esperando por alguma mágica que permita um bom som com o microfone ligado.