Как сохранить аудиофайл в A2DP при использовании микрофона с Bluetooth-гарнитурой? (Push-to-talk) [dублировать]

У этого вопроса уже есть ответ: Микрофон для наушников не работает 2 ответа

У меня есть гарнитура CEL-TEC F5A. Спектр говорит:

Bluetooth 4.0, профили: Гарнитура, Hands Free, A2DP, AVRCP / HSP / HFP

Он отлично работает с профилем High Fidelity Playback (A2DP sink).

Когда я хочу переключить аудиовход на микрофон гарнитуры, выходной профиль автоматически изменится на Воспроизведение высокой четкости (приемник A2DP) , и качество ужасно - как звук 8 бит или что-то в этом роде. Когда я вернусь обратно к A2DP, вход вернется к настольному микрофону.

Я прочитал несколько других вопросов и кажется, что A2DP, как ожидается, не будет поддерживать вход, верно? Но часть HFP в HFS / HFP - это воспроизведение с высокой точностью воспроизведения? Похоже, что он может работать как гарнитура и все еще не похож на телефон 1950-х годов.

Как я могу упростить переключение между профилями, чтобы он был HFS / HFP, когда я разговариваю, и A2DP, когда я слушаю? Например. как «push-to-talk».

Ubuntu 17.10, нет настройки звука IIRC, все последнее. https://www.kabelmanie.cz/cel-tec-f5a-active-noise-bluetooth-stereo-sluchatka-s-mikrofonem/

Мой выход:

$ 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

Проблема здесь заключается не в том, что микрофон не работает, а в том, что качество звука ухудшается, когда оно активировано.

1
задан 25 February 2018 в 01:37

2 ответа

Я собирался вернуть гарнитуру и подождать Bluetooth 5.0, но потом понял, что это лучшая функциональность, которую я могу получить с моим ноутбуком BT 4.0. Так что я их сохранил.

Тем не менее, слушая французского парня по 16-битовому 8000 Гц аудио, на самом деле не было подходящего способа провести встречу. В течение нескольких дней я переключался между двумя режимами, используя диалог настройки звука Ubuntu, но это действительно очень раздражает, как вы можете себе представить.

Итак, я написал этот сценарий, используя pacmd, который переключает между двумя режимами :

Crappy audio, микрофон на аудиосигнале с близкого расстояния, микрофон выключен

Он не отполирован, имеет какой-то мертвый код, и я использую свои собственные идентификаторы телефонов, но может быть вдохновение для вашего собственного сценария. Последняя версия pacmd .

#!/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

Надеюсь, это поможет кому-то :) Тем не менее, я тоже не принимаю этот ответ, надеясь на какую-то магию, которая даст хороший звук с микрофоном на.

0
ответ дан 17 July 2018 в 21:10

Я собирался вернуть гарнитуру и подождать Bluetooth 5.0, но потом понял, что это лучшая функциональность, которую я могу получить с моим ноутбуком BT 4.0. Так что я их сохранил.

Тем не менее, слушая французского парня по 16-битовому 8000 Гц аудио, на самом деле не было подходящего способа провести встречу. В течение нескольких дней я переключался между двумя режимами, используя диалог настройки звука Ubuntu, но это действительно очень раздражает, как вы можете себе представить.

Итак, я написал этот сценарий, используя pacmd, который переключает между двумя режимами :

Crappy audio, микрофон на аудиосигнале с близкого расстояния, микрофон выключен

Он не отполирован, имеет какой-то мертвый код, и я использую свои собственные идентификаторы телефонов, но может быть вдохновение для вашего собственного сценария. Последняя версия pacmd .

#!/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

Надеюсь, это поможет кому-то :) Тем не менее, я тоже не принимаю этот ответ, надеясь на какую-то магию, которая даст хороший звук с микрофоном на.

0
ответ дан 23 July 2018 в 21:50

Другие вопросы по тегам:

Похожие вопросы: