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

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

ConfirmAndCreateThisAccount
источник
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
    

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

Chris_128
источник
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
randomthingsido
источник
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 работают.

iamnagaky
источник
0

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

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

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

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

KNB
источник