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 и ​​тем, как он буферизует звук перед его кодированием. Для меня изменение размера этого буфера решило проблему прерывистого звука. Вам необходимо выполнить три шага:

  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соответственно.

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

    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 
  1. Перезапустите службу 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 ГГц. Мой маршрутизатор и ноутбук могут использовать оба.

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