A2DP на PulseAudio - ужасный прерывистый / пропускаемый звук
Я подключил гарнитуру Bluetooth к ноутбуку Ubuntu 12.04 с чипом Bluetooth внутри:
lsusb | grep Bluetooth
Bus 003 Device 003: ID 045e:0745 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth
Устройство было сопряжено, и с помощью blueman
Я подключил его к PulseAudio в качестве приемника. Звук встречается в режиме A2DP, но он ужасно прерывистый и пропускает его до состояния, которое не намного лучше, чем ничего.
Я прочитал вокруг и увидел, что было исправление, включающее настройку nice
приоритет сервера PulseAudio. Поскольку по умолчанию PulseAudio работает для каждого пользователя, я добавил следующее /etc/security/limits.conf
:
* hard rtpio 0
* soft rtpio 0
@audio hard rtpio 20
@audio soft rtpio 20
pulse hard rtpio 20
pulse soft rtpio 20
Затем я добавил себя в audio
группа, чтобы иметь возможность планировать приоритет для pulseaudio
процесс. Кажется, что pulseaudio
сейчас работает с приоритетом -11
:
ps -eo pri, ni, cmd | grep [p] ulse
30 -11 /usr/bin/pulseaudio --start --log-target=syslog
Это должно означать, что PulseAudio работает с приоритетом -11, что хорошо.
Однако даже после перезапуска я все равно получаю ужасный прерывистый звук.
Как мне поступить? Я пытаюсь сделать эту гарнитуру Bluetooth, которую я купил, пригодной для использования.
Примечание. Я попытался соединить это устройство с планшетом Android рядом с ноутбуком, и он работает нормально, поэтому это не перегруженность беспроводной сети, а как-то напрямую связано с Linux.
7 ответов
Поскольку ни один из других ответов не работал в моей системе (Ubuntu 18.04 LTS на MacBook Air 2012 года), я нашел свое решение в немецкой вики-странице ubuntuusers. Краткое изложение инструкций на немецком языке:
Прерывистый вывод может быть вызван реализацией A2DP и тем, как он буферизует звук перед его кодированием. Для меня изменение размера этого буфера решило проблему прерывистого звука. Вам необходимо выполнить три шага:
Найдите необходимую информацию об устройстве bluetooth (пока оно подключено!)
pactl list | grep -Pzo '.*bluez_card(.*\n)*'
Результат должен быть примерно таким
Name: bluez_card.28_11_A5_84_B6_F9
Driver: module-bluez5-device.c
...
Ports:
speaker-output: Speaker (priority: 0, latency offset: 0 usec, available)
Part of profile(s): a2dp_sink, headset_head_unit
speaker-input: Bluetooth Input (priority: 0, latency offset: 0 usec, not available)
Part of profile(s): headset_head_unit
Мы видим, что в настоящее время у буферов задержка 0. На следующем этапе вам понадобится
NAME
и
PORT
вашего вывода. В этом примере это
bluez_card.28_11_A5_84_B6_F9
и
speaker-output
соответственно.
Установите подходящий размер буфера (задержку) вашей карты с помощью этого шаблона команды:
pactl set-port-latency-offset <NAME> <PORT> <BUFFER_SIZE_MICROSECONDS>
Единица задержки следующей команды - микросекунды, поэтому я использую 50-миллисекундный буфер для моей команды:
pactl set-port-latency-offset bluez_card.28_11_A5_84_B6_F9 speaker-output 50000
Перезапустите службу Bluetooth, чтобы изменения вступили в силу.
sudo service bluetooth restart
Поскольку обычно об этом нет документации, возможно, вам придется поэкспериментировать с более высокими или более низкими значениями буфера. Многие люди писали о своих рабочих задержках в комментариях к этому ответу. Ознакомьтесь с ними, чтобы узнать о значении задержки.
Отредактируйте файл конфигурации ALSA
sudo gedit /etc/modprobe.d/alsa-base.conf
Добавьте строку
options snd-hda-intel model=generic
в конец файла и перезагрузите компьютер.
Вы можете открыть панель поиска (CTRL-D в единстве, Windows-Key в Gnome) типа "Импульс" или "Громкость". Откройте инструмент с графическим интерфейсом "Pulseaudio Volume Control", его значок выглядит как ручка или датчик.
Здесь вы можете выбрать динамик Bluetooth. Нажмите "Дополнительно", установите значение задержки, как это было предложено в других ответах. 45 мс или 50 мс, кажется, подходят для них, но я не нашел подходящего значения, которое бы мне подошло.
Скриншот прилагается. Мой динамик Bluetooth называется SRS-BTX300. После изменения значения задержки перезапускать bluetooth не нужно.
Ответ Chris_128 сработал для меня, но для новичков я добавлю немного деталей.
Для ИМЯ и ПОРТА для команды ниже:
pactl set-port-latency-offset NAME PORT 50000
Вы получите его после того, как наберете результат:
pactl list | grep -Pzo '.*bluez_card(.*\n)*'
Name: bluez_card.5C_FB_7C_0D_0F_EE
Driver: module-bluez5-device.c
Owner Module: 28
Properties:
...
Profiles:
headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 30, available: yes)
a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 40, 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): headset_head_unit, a2dp_sink
headset-input: Headset (priority: 0, latency offset: 0 usec)
Part of profile(s): headset_head_unit
ИМЯ будет "bluez_card.5C_FB_7C_0D_0F_EE", а ПОРТ будет "выход для гарнитуры"
Итак, в моем случае моя команда
"pactl set-port-latency-offset bluez_card.5C_FB_7C_0D_0F_EE headset-output 50000"
Перезагрузите службу Bluetooth
sudo service bluetooth restart
Та же проблема была с Ubuntu 18.04, работающей в режиме двойной загрузки в MacBook Mini. Попытался изменить конфигурацию ALSA, как указано в @ConfirmAndCreateThisAccount.
Но это не сработало.
Итак, я установил Blueman с помощью команды ниже
sudo apt-get install blueman
Затем я отключил устройство Bluetooth от системных настроек Bluetooth и снова подключился с помощью Blueman. Сейчас все в порядке. Даже элементы управления Play/Pause работают.
Исправление сработало для меня, хотя я обнаружил, что мне нужно удалить строку до него. Смотри ниже:
# Keep snd-usb-audio from beeing loaded as first soundcard
# options snd-usb-audio index=-2 <-REM this line if it doesn't work at first
options snd-hda-intel model=generic
Я решил свою проблему, изменив используемое мной соединение Wi-Fi с соединения 2,4 ГГц (так же, как Bluetooth) на соединение 5 ГГц. Мой маршрутизатор и ноутбук могут использовать оба.