Рейтинг:0

Аудиоканалы наушников перевернуты, как я могу изменить положение канала на Pipewire?

флаг jp

Итак, у меня есть эта проблема на моем разъеме на передней панели, из-за которого звук переворачивается, так было всегда, но мне всегда удавалось поменять местами каналы либо в Windows, либо в Ubuntu (через pulseaudio), просто найдя файл конфигурации и сопоставив свои позиции таким образом, что работал.

Недавно я установил Pipewire для облегчения потоковой передачи звука с разногласиями и т.п., но я не могу найти четкого представления о том, как с его помощью отображать каналы.

Если бы кто-нибудь мог показать мне, где находится правильный файл конфигурации и какая строка управляет позициями аудиоканала, я был бы рад и очень благодарен.

редактировать: я на Ubuntu 21.10, pipewire на версии 3.34

Моя конфигурация pipewire по адресу etc/pipewire/pipewire.conf

# Файл конфигурации демона для версии PipeWire "0.3.32" #
#
# Скопируйте и отредактируйте этот файл в /etc/pipewire для общесистемных изменений
# или в ~/.config/pipewire для локальных изменений.

контекст. свойства = {
    ## Настройте свойства в системе.
    #library.name.system = поддержка/libspa-поддержка
    #context.data-loop.library.name.system = поддержка/libspa-поддержка
    #support.dbus = истина
    #link.max-buffers = 64
    link.max-buffers = 16 # версии < 3 клиенты не могут больше обрабатывать
    #mem.warn-mlock = ложь
    #mem.allow-mlock = истина
    #mem.mlock-all = ложь
    #clock.power-of-two-quantum = true
    #лог.уровень = 2
    audio.position = "FR,FL"

    core.daemon = true # прослушивание сокетных соединений
    core.name = pipewire-0 # имя ядра и имя сокета

    ## Свойства конфигурации DSP.
    #default.clock.rate = 48000
    #default.clock.quantum = 1024
    #default.clock.min-квант = 32
    #default.clock.max-квант = 8192
    #default.video.width = 640
    #default.video.height = 480
    #default.video.rate.num = 25
    #default.video.rate.denom = 1
    #
    # Эти переопределения применяются только при работе в виртуальной машине.
    vm.overrides = {
        default.clock.min-квант = 1024
    }
}

context.spa-libs = {
    #<регулярное выражение имя-фабрики> = <имя-библиотеки>
    #
    # Используется для поиска названий спа-фабрик. Он отображает название спа-фабрики
    # регулярное выражение к имени библиотеки, которое должно содержать
    # этот завод.
    #
    audio.convert.* = аудиоконвертировать/libspa-аудиоконвертировать
    api.alsa.* = alsa/libspa-alsa
    api.v4l2.* = v4l2/libspa-v4l2
    api.libcamera.* = libcamera/libspa-libcamera
    api.bluez5.* = bluez5/libspa-bluez5
    api.vulkan.* = вулкан/libspa-вулкан
    api.jack.* = jack/libspa-jack
    поддержка.* = поддержка/libspa-поддержка
    #videotestsrc = видеотесты/libspa-videotestsrc
    #audiotestsrc = audiotestsrc/libspa-audiotestsrc
}

контекст.модули = [
    #{ имя = <имя-модуля>
    # [ аргументы = { <ключ> = <значение> ... } ]
    # [ флаги = [ [ ifexists ] [ nofail ] ]
    #}
    #
    # Загружает модуль с заданными параметрами.
    # Если указано ifexists, модуль игнорируется, если он не найден.
    # Если указано nofail, ошибки инициализации модуля игнорируются.
    #

    # Использует RTKit для повышения приоритета потока данных.
    {имя = libpipewire-module-rtkit
        аргументы = {
            #хороший.уровень = -11
            #rt.prio = 88
            #rt.time.soft = 2000000
            #rt.time.hard = 2000000
        }
        флаги = [ если существует без ошибок ]
    }

    # Установить приоритеты потоков без использования RTKit.
    #{ имя = libpipewire-module-rt
    # аргументы = {
    # хороший.уровень = -11
    # рт.прио = 88
    # rt.time.soft = 2000000
    # rt.time.hard = 2000000
    # }
    # flags = [ ifexists nofail ]
    #}

    # Собственный протокол связи.
    {имя = libpipewire-module-protocol-native}

    # Модуль профиля. Разрешить приложению доступ к профайлеру
    # и данные о производительности. Он предоставляет интерфейс, который используется
    # с помощью pw-top и pw-profiler.
    {имя = libpipewire-module-profiler}

    # Позволяет приложениям создавать объекты метаданных. Это создает
    # фабрика для объектов метаданных.
    {имя = libpipewire-module-metadata}

    # Создает фабрику по производству устройств, работающих в
    # контекст сервера PipeWire.
    { name = libpipewire-module-spa-device-factory }

    # Создает фабрику для создания узлов, работающих в
    # контекст сервера PipeWire.
    {имя = libpipewire-module-spa-node-factory}

    # Позволяет создавать узлы, работающие в контексте
    # клиент. Используется всеми клиентами, которые хотят предоставить
    # данные в PipeWire.
    { имя = libpipewire-модуль-клиент-узел }

    # Позволяет создавать устройства, работающие в контексте
    # клиент. Используется диспетчером сеансов.
    { имя = libpipewire-модуль-клиент-устройство }

    # Модуль портала отслеживает PID процесса портала
    # и помечает соединения с тем же PID, что и у портала
    # соединения.
    {имя = libpipewire-module-portal
        флаги = [ если существует без ошибок ]
    }

    # Модуль доступа может выполнять проверки доступа и блокировать
    # новых клиентов.
    {имя = libpipewire-модуль-доступ
        аргументы = {
            # access.allowed для отображения массива путей разрешенных
            # Программы.
            #доступ.разрешено = [
            # /usr/bin/pipewire-media-session
            #]

            # Массив отвергнутых путей.
            #доступ.отклонено = [ ]

            # Массив путей с ограниченным доступом.
            #access.restricted = [ ]

            # Всему, что не входит в приведенные выше списки, присваивается
            # access.force разрешение.
            #access.force = плоский пакет
        }
    }

    # Делает фабрику для упаковки узлов в адаптер с
    # конвертер и ресемплер.
    { имя = libpipewire-модуль-адаптер }

    # Делает фабрику для создания ссылок между портами.
    {имя = libpipewire-module-link-factory}

    # Предоставляет фабрики для создания объектов диспетчера сеансов.
    {имя = libpipewire-module-session-manager}
]

контекст.объекты = [
    #{фабрика = <имя-фабрики>
    # [ аргументы = { <ключ> = <значение> ... } ]
    # [ флаги = [ [ nofail ] ]
    #}
    #
    # Создает объект из фабрики PipeWire с заданными параметрами.
    # Если указано nofail, ошибки игнорируются (и объект не создается).
    #
    #{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc Spa:Pod:Object:Param:Props:patternType = 1 } }
    #{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] }
    #{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } }
    #{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } }
    #{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test } }
    #{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } }

    # Драйвер-пустышка по умолчанию. Это обрабатывает узлы, отмеченные «node.always-driver».
    # свойство, когда никакой другой драйвер в данный момент не активен. Клиенты JACK нуждаются в этом.
    { фабрика = спа-узел-фабрика
        аргументы = {
            factory.name = support.node.driver
            node.name = фиктивный драйвер
            node.group = pipewire.dummy
            приоритет.драйвер = 20000
        }
    }
    { фабрика = спа-узел-фабрика
        аргументы = {
            factory.name = support.node.driver
            node.name = Драйвер свободного хода
            приоритет.драйвер = 19000
            node.group = pipewire.freewheel
            узел.свободное колесо = истина
        }
    }
    Это создает новый исходный узел. Он будет иметь входные порты
    которые вы можете связать, чтобы предоставить звук для этого источника.
    {фабрика = адаптер
        аргументы = {
            factory.name = support.null-аудио-приемник
            node.name = "мой-микрофон"
            node.description = "Микрофон"
            media.class = "Аудио/Источник/Виртуальный"
            audio.position = "FR,FL"
        }
    }

     Это создает одно исходное устройство PCM для данного
     путь устройства alsa hw:0. Вы можете изменить источник на приемник
     сделать раковину таким же образом.
    {фабрика = адаптер
        аргументы = {
            factory.name = api.alsa.pcm.source
            node.name = "алса-источник"
            node.description = "Источник PCM"
            media.class = "Аудио/Источник"
            api.alsa.path = "hw:0"
            api.alsa.period-size = 1024
            api.alsa.headroom = 0
            api.alsa.disable-mmap = ложь
            api.alsa.disable-batch = ложь
            аудио.формат = "S16LE"
            аудио.рейт = 48000
            аудио.каналы = 2
            audio.position = "FR,FL"
        }
    }
]

контекст.exec = [
    #{ путь = <имя-программы> [аргументы = "<аргументы>" ] }
    #
    # Выполнить заданную программу с аргументами.
    #
    # Вы можете дополнительно запустить менеджер сеансов здесь,
    # но лучше запускать его как сервис systemd.
    # Запустите диспетчер сеансов с параметрами -h.
    #
    #{ path = "/usr/bin/pipewire-media-session" args = "" }
    #
    # Вы также можете запустить пульсаудио-сервер здесь
    # но лучше запускать его как сервис systemd.
    # Может быть интересно запустить здесь другого демона, который слушает
    # по другому адресу с опцией -a (например, -a tcp:4713).
    #
    #{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" }
]

карта каналов = вправо, влево

Someone avatar
флаг my
Вы не предоставили информацию об ОС и выпуске. Какую версию Ubuntu вы используете? Как это сейчас написано, трудно определить адекватный ответ. Пожалуйста, [отредактируйте] вопрос и добавьте достаточно подробностей, чтобы мы могли определить адекватный ответ. Спасибо.
Hayguneys avatar
флаг jp
Хорошо, добавил версию Ubuntu, в которой я работаю, и версию pipewire, а также добавил весь мой .conf для pipewire.
Someone avatar
флаг my
Спасибо за информацию.
Рейтинг:1
флаг jp

Итак, я установил EasyEffects, который включает в себя хороший плагин под названием Stereo Tool, с его помощью я перевернул FL с FR каналами без каких-либо хлопот, настоящая находка! Насколько я понимаю, он управляет pipewire в целом, поэтому это хороший мощный инструмент.вот так выглядит плагин на EasyEffects

Рейтинг:0
флаг bv

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

Я закончил обзор Документация PipeWire и просто слегка подправил пример, и решение сработало как шарм.

Выполните шаги:

  1. Я скопировал /usr/доля/pipewire/pipewire.conf файл в /etc/pipewire/pipewire.conf (это будет общесистемное. Вы можете скопировать его в ~/.config/pipewire/pipewire.conf для настройки пользователя).

  2. Затем я добавил следующий модуль:

    контекст.модули = [
    ...
    ##### скопируйте строки ниже и добавьте в свой /etc/pipewire/pipewire.conf
    #####
    {имя = libpipewire-module-loopback
            аргументы = {
                audio.position = [ FL FR ]
                захват.props = {
                    media.class = Аудио/Раковина
                    node.name = моя_раковина
                    node.description = "моя раковина"
                    #узел.латентность = 1024/48000
                    #аудио.скорость = 44100
                    #аудио.каналы = 2
                    #audio.position = [ FL FR ]
                    #node.target = "моя раковина по умолчанию"
                }
                воспроизведение.пропс = {
                    #media.class = Аудио/Источник
                    node.name = моя_раковина
                    node.description = "моя раковина"
                    #узел.латентность = 1024/48000
                    #аудио.скорость = 44100
                    #аудио.каналы = 2
                    audio.position = [ FR FL ]
                    node.target = "моя раковина по умолчанию"
                }
            }
        }
    
    

    Это из темы «Создание комбинированного приемника/источника», единственное отличие от примера — аудио.позиция линия воспроизведение.реквизиты который я перевернул.

  3. Перезапущенный пайпвайр:

    systemctl --user перезапустить pipewire pipewire-pulse pipewire-media-session.service
    
  4. Выбор моя раковина поскольку аудиоустройство по умолчанию в настройках GNOME поменяло местами каналы, и это кажется повсеместным.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.