PipeWire не удалось создать узлы для всех устройств ALSA

Вопрос или проблема

Ubuntu и его производные, такие как Mint, недавно перешли с PulseAudio на PipeWire. Я пытаюсь ознакомиться с конфигурациями, и проблема в том, что у меня на MintBox 2 есть четыре различных звуковых выхода, и я вижу их все, а также еще два в ALSA:

**** Список Воспроизводящих Аппаратных Устройств ****
card 0: PCH [HDA Intel PCH], device 0: ALC1150 Analog [ALC1150 Analog]
  Подустройства: 1/1
  Подустройство #0: подустройство #0
card 0: PCH [HDA Intel PCH], device 1: ALC1150 Digital [ALC1150 Digital]
  Подустройства: 1/1
  Подустройство #0: подустройство #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [RX-A760]
  Подустройства: 0/1
  Подустройство #0: подустройство #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [SONY TV]
  Подустройства: 1/1
  Подустройство #0: подустройство #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
  Подустройства: 1/1
  Подустройство #0: подустройство #0
card 1: PCM2702 [Burr-Brown Japan PCM2702], device 0: USB Audio [USB Audio]
  Подустройства: 1/1
  Подустройство #0: подустройство #0

Здесь достаточно подсказок, чтобы я мог четко описать свои звуковые устройства, и я приму номенклатуру карты/устройства, которую использует aplay из ALSA для их идентификации (ALSA любит писать CARD=PCH,DEV=3, а я буду писать PCH/3):

Итак, у меня есть:

  • PCH/0 — это разъем для наушников с 3,5-мм стереоAudio разъемом и подключенным устройством
  • PCH/3 — это аудиовизуальный ресивер Yamaha RX-A760
  • PCH/7 — это телевизор Sony Bravia
  • PCM2702/1 — это USB Audio устройство (на базе Burr-Brown)

ALSA также идентифицирует устройства, у которых нет интерфейса на MintBox 2, но я предполагаю, что они поддерживаются платой:

  • PCH/1, предположительно для порта S/PDIF, который отсутствует на корпусе, но поддерживается платой HDA Intel PCH
  • PCH/8, предположительно третий HDMI порт, который также отсутствует на корпусе, но поддерживается платой HDA Intel PCH

Эти два я могу с радостью игнорировать.

Но когда я смотрю на PipeWire:

$ pw-cli ls Node
    id 29, type PipeWire:Interface:Node/3
        object.serial = "29"
        factory.id = "10"
        priority.driver = "20000"
        node.name = "Dummy-Driver"
    id 30, type PipeWire:Interface:Node/3
        object.serial = "30"
        factory.id = "10"
        priority.driver = "19000"
        node.name = "Freewheel-Driver"
    id 39, type PipeWire:Interface:Node/3
        object.serial = "39"
        factory.id = "10"
        client.id = "35"
        priority.session = "100"
        priority.driver = "1"
        node.name = "Midi-Bridge"
        media.class = "Midi/Bridge"
    id 48, type PipeWire:Interface:Node/3
        object.serial = "48"
        object.path = "alsa:pcm:1:front:1:playback"
        factory.id = "18"
        client.id = "35"
        device.id = "44"
        priority.session = "1009"
        priority.driver = "1009"
        node.description = "PCM2702 16-bit stereo audio DAC Analog Stereo"
        node.name = "alsa_output.usb-Burr-Brown_Japan_Burr-Brown_Japan_PCM2702-00.analog-stereo"
        node.nick = "Burr-Brown Japan PCM2702"
        media.class = "Audio/Sink"
    id 53, type PipeWire:Interface:Node/3
        object.serial = "153"
        object.path = "alsa:pcm:0:front:0:capture"
        factory.id = "18"
        client.id = "35"
        device.id = "43"
        priority.session = "2009"
        priority.driver = "2009"
        node.description = "Built-in Audio Analog Stereo"
        node.name = "alsa_input.pci-0000_00_0e.0.analog-stereo.3"
        node.nick = "ALC1150 Analog"
        media.class = "Audio/Source"
    id 54, type PipeWire:Interface:Node/3
        object.serial = "152"
        object.path = "alsa:pcm:0:hdmi:0:playback"
        factory.id = "18"
        client.id = "35"
        device.id = "43"
        priority.session = "696"
        priority.driver = "696"
        node.description = "Built-in Audio Digital Stereo (HDMI)"
        node.name = "alsa_output.pci-0000_00_0e.0.hdmi-stereo"
        node.nick = "RX-A760"
        media.class = "Audio/Sink"
    id 61, type PipeWire:Interface:Node/3
        object.serial = "272"
        factory.id = "6"
        client.id = "59"
        client.api = "pipewire-pulse"
        application.name = "ALSA plug-in [kodi.bin]"
        node.name = "ALSA plug-in [kodi.bin]"
        media.class = "Stream/Output/Audio"
        media.category = "Manager"

Я вижу, что PipeWire создал множество узлов, которые меня не интересуют (Dummy-Driver, Freewheel-Driver, Midi/Bridge) и что у него есть два узла для моего Yamaha RX-A760 (54 для самого устройства с ALSA путем и 61, который Kodi сейчас проигрывает на RX-A760). Мы можем игнорировать последний и заметить, что PipeWire находит только 2 из 4 моих звуковых выходов и путает один из них как источник. Я могу сопоставить идентификаторы ALSA с идентификаторами узлов PipeWire (которые я буду обозначать PW/id):

  • PCH/0 -> PW/53 – хотя у него есть только узел источника. Это устройство, конечно, является чипом RealTek ALC1150, который действительно представлен на корпусе как микрофон, так и разъем для наушников. Ирония в том, что у меня ничего не подключено к разъему микрофона, но есть устройство в разъеме для наушников, и я ожидаю узел Audio/Sink.
  • PCH/3 -> PW/54
  • PCH/7 -> отсутствует, у PipeWire нет узла для этого!
  • PCM2702/1 -> PW/48

Итак, у меня два основных вопроса:

  1. Почему PipeWire не создает узел для PCH/7. Чтобы было понятно, к нему подключен телевизор Sony Bravia, и он включен, когда я провожу эти тесты, и фактически является одним из экранов, которые я могу использовать на своем устройстве, и я могу воспроизводить звук через него в своей системе Mint (он отображается в Настройках звука Cinnamon). Но что происходит с PipeWire в этом случае?
  2. Почему PipeWire создает Audio/Source для моего разъема микрофона, а не Audio/Sink для разъема для наушников? Опять же, я могу воспроизводить звук через это в своей системе Mint (он отображается в Настройках звука Cinnamon). Но что происходит с PipeWire в этом случае?

Я стремлюсь лучше понять PulseWire и то, что здесь происходит. Не в последнюю очередь потому, что WirePlumber также фиксирует эту проблему и видит всего два выхода:

$ wpctl status
PipeWire 'pipewire-0' [1.0.5, polyphemus@cyclops, cookie:2258751752]
 └─ Клиенты:
        32. xdg-desktop-portal                  [1.0.5, polyphemus@cyclops, pid:121629]
        33. cinnamon-settings.py                [1.0.5, polyphemus@cyclops, pid:267176]
        34. WirePlumber                         [1.0.5, polyphemus@cyclops, pid:269937]
        35. WirePlumber [export]                [1.0.5, polyphemus@cyclops, pid:269937]
        42. PulseAudio systray                  [1.0.5, polyphemus@cyclops, pid:1821]
        47. wpctl                               [1.0.5, polyphemus@cyclops, pid:380732]
        59. ALSA plug-in [kodi.bin]             [1.0.5, polyphemus@cyclops, pid:7]
        63. Blueman                             [1.0.5, polyphemus@cyclops, pid:1848]
        64. Cinnamon Volume Control Media Keys  [1.0.5, polyphemus@cyclops, pid:1508]
        65. cinnamon                            [1.0.5, polyphemus@cyclops, pid:267176]
        66. Cinnamon Volume Control             [1.0.5, polyphemus@cyclops, pid:1689]

Аудио
 ├─ Устройства:
 │      43. Встроенный Звук                      [alsa]
 │      44. PCM2702 16-битный стерео аудио ЦАП     [alsa]
 │  
 ├─ Выходы:
 │      48. PCM2702 16-битный стерео аудио ЦАП Аналоговое Стерео [вол: 0.40]
 │  *   54. Встроенный Звук Цифровое Стерео (HDMI) [вол: 0.66]
 │  
 ├─ Конечные точки выходов:
 │  
 ├─ Источники:
 │  *   53. Встроенный Звук Аналоговое Стерео        [вол: 1.00]
 │  
 ├─ Конечные точки источников:
 │  
 └─ Потоки:
        61. ALSA plug-in [kodi.bin]
             60. output_FL       > RX-A760:playback_FL  [активно]
             74. output_FR       > RX-A760:playback_FR  [активно]

Видео
 ├─ Устройства:
 │  
 ├─ Выходы:
 │  
 ├─ Конечные точки выходов:
 │  
 ├─ Источники:
 │  
 ├─ Конечные точки источников:
 │  
 └─ Потоки:

Настройки
 └─ Настроенные имена узлов по умолчанию:
         0. Audio/Sink    alsa_output.pci-0000_00_0e.0.hdmi-stereo

Мы видим два выхода 48 и 54 и источник 53, для которого я хотел бы иметь выход (разъем для наушников) и отсутствующий выход PCH/7!

Ответ или решение

Ситуация, с которой вы сталкиваетесь, при использовании PipeWire вместо PulseAudio на дистрибутивах Ubuntu и Mint, может быть связана с несколькими аспектами конфигурации и возможностями PipeWire.

Ответы на ваши вопросы:

  1. Почему PipeWire не создаёт узел для PCH/7 (Sony Bravia Television)?

    Есть несколько причин, по которым PipeWire может не обнаруживать или не создавать узел для вашего телевизора Sony Bravia:

    • Неподдерживаемый HDMI-выход: Не все HDMI-устройства полностью поддерживают передачу аудио через ALSA. Убедитесь, что выбранный HDMI-выход активен и правильно настроен. Попробуйте подключить телевизор к другому HDMI-порту или сменить настройки в меню телевизора.

    • Конфигурационные файлы: Проверьте, не требуют ли ваши конфигурационные файлы ALSA или PipeWire специфических настроек или параметров. Иногда необходимо вручную указать, какие устройства могут быть активированы.

    • Проблемы совместимости: Если у вас есть обновления драйверов для вашего оборудования, убедитесь, что они установлены. Также стоит проверить наличие багов в проекте PipeWire, которые могут быть связаны с вашим программным обеспечением или оборудованием.

    • Получение информации о системе: Запустите команду pw-dump и проверьте структуру и доступные устройства, чтобы лучше понять, что PipeWire видит в вашей системе.

  2. Почему PipeWire создаёт Audio/Source для микрофонного разъёма вместо Audio/Sink для разъёма наушников?

    Это поведение связано с тем, как PipeWire обрабатывает аудиосистему и идентифицирует устройства. Вот несколько моментов, которые стоит учесть:

    • Неправильное определение устройства: PipeWire может неправильно интерпретировать устройство. Это может быть исправлено в конфигурации ALSA. Убедитесь, что ALSA правильно настроена для определения как выходных, так и входных устройств.

    • Конфигурация PipeWire: Возможно, понадобится изменить конфигурационные файлы PipeWire, чтобы корректно отобразить наушники как устройство вывода. Существует файл конфигурации /etc/pipewire/pipewire.conf, который может требовать корректировок.

    • Задействованные модули: PipeWire использует несколько модулей для управления аудиопотоками. Убедитесь, что в настройках модули, отвечающие за управление устройствами вывода, активированы и работают правильно.

Рекомендации по устранению проблем:

  1. Проверка конфигурации ALSA:
    Попробуйте выполнить команду alsamixer в терминале и проверьте уровень громкости и состояние ваших аудиоустройств, особенно для разъёма наушников.

  2. Использование pw-cli и wpctl:
    Используйте команды pw-cli и wpctl для получения дополнительной информации о текущих узлах PipeWire и их статусе. Это может помочь в случае, если узел был создан неправильно.

  3. Логи и отладка:
    Проверьте логи PipeWire с помощью journalctl -xe | grep pipewire, чтобы увидеть, не выдаются ли какие-либо ошибки или предупреждения, касающиеся распознавания вашего оборудования.

  4. Обновления:
    Убедитесь, что ваша система и все её компоненты (драйвера, PipeWire, ALSA) обновлены до последней версии. Иногда проблемы могут быть исправлены в новых релизах.

Следуя этим рекомендациям, вы сможете лучше понять, почему PipeWire не видит все доступные устройства, и предпринять шаги для решения этих проблем.

Оцените материал
Добавить комментарий

Капча загружается...