A2DP на PulseAudio - ужасный прерывистый / пропускаемый звук


13

Я подключил гарнитуру 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.

Ответы:


20

Отредактируйте файл конфигурации ALSA

sudo gedit /etc/modprobe.d/alsa-base.conf

Добавьте строку

options snd-hda-intel model=generic

в конец файла и перезагрузите компьютер.


1
Это чудесно сработало для моих BOSE тихий комфорт 35 II колонок (Ubuntu 18.04)
— Виктор Пармар

Это простое исправление также сработало для меня после долгих поисков. Ubuntu 18.10, блютуз наушники (promate trueBlue).
— Франческо Наполитано

Создал аккаунт, чтобы упомянуть, что это решило и мои проблемы (QC35II). Объяснение было бы полезно; но в любом случае, вы спасатель жизни
— Сэм

Я вижу примерно 95% меньше изменений в этом исправлении с QC35II при тестировании Debian 9, ядро ​​4.18.20-2.
— Андрей Портной

3
в конце после редактирования этого файла вам не нужно перезапускать, просто запуститеsudo service bluetooth restart
— Dinuka Salwathura

12

Поскольку ни один из других ответов не работал в моей системе (Ubuntu 18.04 LTS на MacBook Air 2012 года), я нашел свое решение на немецкой вики-странице ubuntuusers . Английская сводка немецких инструкций:

Неустойчивый вывод может быть вызван реализацией A2DP и ​​тем, как он буферизует звук перед его кодированием. Для меня изменение размера этого буфера решило проблему прерывистого звука. Вам необходимо выполнить три шага:

  1. Найдите необходимую информацию об устройстве 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соответственно.

  2. Установите размер буфера (задержку) вашей карты на подходящее значение с помощью этой команды:

    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 
    
  3. Перезапустите службу Bluetooth, чтобы применить изменения

    sudo service bluetooth restart
    

Поскольку документации об этом обычно нет, вам, возможно, придется экспериментировать с более высокими или более низкими значениями буфера.


1
Вы заслуживаете больше голосов! Я хотел бы отметить, что 45000 хорошо работает для Macbook Air (начало 2014 года) и Bose QC35
— Оле Алдрик

Это правильно, спасибо
— Jhtong

3

Исправление сработало для меня, хотя я обнаружил, что мне нужно удалить строку до него. См. ниже:

# 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

2

Ответ 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

1

Была такая же проблема с Ubuntu 18.04, работающей как MacBook Mini с двойной загрузкой. Попытался изменить конфигурацию ALSA, как указано в @ConfirmAndCreateThisAccount.

Но это не сработало.

Итак, я установил Blueman с помощью команды ниже

sudo apt-get install blueman

Затем я отключил устройство Bluetooth от системных настроек Bluetooth и снова подключился с помощью Blueman. Сейчас все нормально. Даже элементы управления Play / Pause работают.


0

Вы можете открыть строку поиска (CTRL-D в единстве, Windows-Key в Gnome), набрав «Pulse» или «Volume». Откройте инструмент GUI «Pulseaudio Volume Control», его значок выглядит как ручка или индикатор.

Там вы можете выбрать свой Bluetooth-динамик. Нажмите «Дополнительно», установите значение задержки, как предложено в других ответах. 45 мс или 50 мс, кажется, работают для них, но я не нашел хорошего значения, которое работает для меня.

Скриншот прилагается. Мой Bluetooth-динамик называется SRS-BTX300. Вам не нужно перезагружать Bluetooth после изменения значения задержки.

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.