Puncte:0

Canalele audio ale căștilor sunt inversate, cum pot schimba poziția canalului pe Pipewire?

drapel jp

Așa că am această problemă pe mufa de pe panoul frontal, care face ca sunetul să vină inversat, a fost așa pentru totdeauna, dar am reușit întotdeauna să schimb canalele fie pe Windows, fie pe ubuntu (prin pulseaudio) doar găsind un fișier de configurare și mapând pozițiile mele într-un mod care a lucrat.

Am instalat recent Pipewire pentru ușurința în streaming audio cu discord și altele asemenea, dar nu găsesc un indiciu clar cum să cartografiez canalele cu el.

Dacă cineva mi-ar putea arăta unde este fișierul de configurare corect și ce linie controlează postările canalului audio, aș fi bucuros și foarte recunoscător.

edit: Sunt pe ubuntu 21.10, pipewire este pe versiunea 3.34

My pipewire conf la etc/pipewire/pipewire.conf

# Fișier de configurare Daemon pentru versiunea PipeWire „0.3.32” #
#
# Copiați și editați acest fișier în /etc/pipewire pentru modificări la nivel de sistem
# sau în ~/.config/pipewire pentru modificări locale.

context.properties = {
    ## Configurați proprietățile în sistem.
    #library.name.system = suport/libspa-support
    #context.data-loop.library.name.system = suport/libspa-support
    #support.dbus = adevărat
    #link.max-buffers = 64
    link.max-buffers = 16 # versiune < 3 clienții nu pot gestiona mai mult
    #mem.warn-mlock = fals
    #mem.allow-mlock = adevărat
    #mem.mlock-all = fals
    #clock.power-of-two-quantum = adevărat
    #log.level = 2
    audio.position = „FR,FL”

    core.daemon = true # ascultând conexiunile socket
    core.name = pipewire-0 # numele miezului și numele soclului

    ## Proprietăți pentru configurația DSP.
    #default.clock.rate = 48000
    #default.clock.quantum = 1024
    #default.clock.min-quantum = 32
    #default.clock.max-quantum = 8192
    #default.video.width = 640
    #default.video.height = 480
    #default.video.rate.num = 25
    #default.video.rate.denom = 1
    #
    # Aceste suprascrieri sunt aplicate numai atunci când rulează într-un vm.
    vm.overrides = {
        default.clock.min-quantum = 1024
    }
}

context.spa-libs = {
    #<nume-fabrică regex> = <nume-bibliotecă>
    #
    # Folosit pentru a găsi numele fabricilor de spa. Mapează numele unei fabrici de spa
    # expresie regulată la un nume de bibliotecă care ar trebui să conțină
    # acea fabrică.
    #
    audio.convert.* = audioconvert/libspa-audioconvert
    api.alsa.* = alsa/libspa-alsa
    api.v4l2.* = v4l2/libspa-v4l2
    api.libcamera.* = libcamera/libspa-libcamera
    api.bluez5.* = bluez5/libspa-bluez5
    api.vulkan.* = vulkan/libspa-vulkan
    api.jack.* = jack/libspa-jack
    suport.* = suport/libspa-support
    #videotestsrc = videotestsrc/libspa-videotestsrc
    #audiotestsrc = audiotestsrc/libspa-audiotestsrc
}

context.module = [
    #{ nume = <nume-modul>
    # [ args = { <cheie> = <valoare> ... } ]
    # [ flags = [[ ifexists ] [ nofail ] ]
    #}
    #
    # Încarcă un modul cu parametrii dați.
    # Dacă se dă ifexists, modulul este ignorat atunci când nu este găsit.
    # Dacă este dat nofail, erorile de inițializare a modulului sunt ignorate.
    #

    # Utilizează RTKit pentru a spori prioritatea firului de date.
    { nume = libpipewire-module-rtkit
        args = {
            #nice.level = -11
            #rt.prio = 88
            #rt.time.soft = 2000000
            #rt.time.hard = 2000000
        }
        steaguri = [dacă există nofail]
    }

    # Setați prioritățile firelor fără a utiliza RTKit.
    #{ nume = libpipewire-module-rt
    # args = {
    # nice.level = -11
    # rt.prio = 88
    # rt.time.soft = 2000000
    # rt.time.hard = 2000000
    #}
    # stegulețe = [ dacă există nofail ]
    #}

    # Protocolul de comunicare nativ.
    { nume = libpipewire-module-protocol-native }

    # Modulul profil. Permite aplicației să acceseze profiler
    # și date de performanță. Oferă o interfață care este utilizată
    # de pw-top și pw-profiler.
    { nume = libpipewire-module-profiler }

    # Permite aplicațiilor să creeze obiecte de metadate. Creeaza
    # o fabrică pentru obiecte metadate.
    { nume = libpipewire-module-metadata }

    # Creează o fabrică pentru fabricarea dispozitivelor care rulează în
    # contextul serverului PipeWire.
    { nume = libpipewire-module-spa-device-factory }

    # Creează o fabrică pentru realizarea de noduri care rulează în
    # contextul serverului PipeWire.
    { nume = libpipewire-module-spa-node-factory }

    # Permite crearea de noduri care rulează în contextul
    # client. Este folosit de toți clienții care doresc să ofere
    # de date către PipeWire.
    { nume = libpipewire-module-client-node }

    # Permite crearea de dispozitive care rulează în contextul
    # client. Este folosit de managerul de sesiune.
    { nume = libpipewire-module-client-device }

    # Modulul portal monitorizează PID-ul procesului portal
    # și etichetează conexiunile cu același PID ca portal
    # conexiuni.
    { nume = libpipewire-module-portal
        steaguri = [dacă există nofail]
    }

    # Modulul de acces poate efectua verificări de acces și blocare
    # clienți noi.
    { nume = libpipewire-module-access
        args = {
            # access.allowed pentru a lista o serie de căi de permis
            # de aplicații.
            #access.allowed = [
            # /usr/bin/pipewire-media-session
            #]

            # O serie de căi respinse.
            #access.rejected = [ ]

            # O serie de căi cu acces restricționat.
            #access.restricted = [ ]

            # Orice lucru care nu este în listele de mai sus este atribuit
            # acces.permisiunea forțată.
            #access.force = flatpak
        }
    }

    # Realizează o fabrică pentru împachetarea nodurilor într-un adaptor cu a
    # convertor și reeșantionare.
    { nume = libpipewire-module-adapter }

    # Realizează o fabrică pentru crearea de legături între porturi.
    { nume = libpipewire-module-link-factory }

    # Oferă fabrici pentru a face obiecte manager de sesiune.
    { nume = libpipewire-module-session-manager }
]

context.obiecte = [
    #{ fabrică = <nume-fabrică>
    # [ args = { <cheie> = <valoare> ... } ]
    # [ flags = [[ nofail ] ]
    #}
    #
    # Creează un obiect dintr-o fabrică PipeWire cu parametrii dați.
    # Dacă se dă nofail, erorile sunt ignorate (și nu este creat niciun obiect).
    #
    #{ 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 = adaptor args = { factory.name = audiotestsrc node.name = my-test } }
    #{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } }

    # Un driver fals implicit. Aceasta gestionează nodurile marcate cu „node.always-driver”
    # proprietate când niciun alt driver nu este activ în prezent. Clienții JACK au nevoie de asta.
    { factory = spa-node-factory
        args = {
            factory.name = support.node.driver
            node.name = Dummy-Driver
            nod.grup = pipewire.dummy
            prioritate.driver = 20000
        }
    }
    { factory = spa-node-factory
        args = {
            factory.name = support.node.driver
            node.name = Freewheel-Driver
            prioritate.driver = 19000
            nod.grup = conductă.roată liberă
            nod.freewheel = adevărat
        }
    }
    Aceasta creează un nou nod Sursă. Va avea porturi de intrare
    pe care le puteți conecta, pentru a furniza audio pentru această sursă.
    { fabrică = adaptor
        args = {
            factory.name = support.null-audio-sink
            node.name = „microfonul meu”
            node.description = „Microfon”
            media.class = „Audio/Sursă/Virtual”
            audio.position = „FR,FL”
        }
    }

     Aceasta creează un singur dispozitiv sursă PCM pentru acel dat
     calea dispozitivului alsa hw:0. Puteți schimba sursa în chiuvetă
     a face o chiuvetă în același mod.
    { fabrică = adaptor
        args = {
            factory.name = api.alsa.pcm.source
            node.name = "alsa-source"
            node.description = "Sursa PCM"
            media.class = „Audio/Sursă”
            api.alsa.path = "hw:0"
            api.alsa.period-size = 1024
            api.alsa.headroom = 0
            api.alsa.disable-mmap = false
            api.alsa.disable-batch = false
            audio.format = „S16LE”
            audio.rate = 48000
            audio.canale = 2
            audio.position = „FR,FL”
        }
    }
]

context.exec = [
    #{ cale = <nume-program> [ args = "<argumente>" ] }
    #
    # Executați programul dat cu argumente.
    #
    # Puteți porni opțional managerul de sesiune aici,
    # dar este mai bine să-l porniți ca un serviciu systemd.
    # Rulați managerul de sesiune cu -h pentru opțiuni.
    #
    #{ cale = "/usr/bin/pipewire-media-session" args = "" }
    #
    # Opțional, puteți porni și serverul pulseaudio aici
    # dar este mai bine să-l porniți ca un serviciu systemd.
    # Poate fi interesant să porniți un alt demon aici care să asculte
    # pe o altă adresă cu opțiunea -a (de ex. -a tcp:4713).
    #
    #{ cale = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" }
]

canal-hartă = dreapta, stânga

Someone avatar
drapel my
Nu ați furnizat detalii despre OS și lansare. Ce versiune de Ubuntu folosești? După cum este scris în prezent, este greu de identificat un răspuns adecvat. Vă rugăm să [editați] întrebarea și adăugați suficiente detalii, astfel încât să putem identifica un răspuns adecvat. Mulțumiri.
Hayguneys avatar
drapel jp
Ok am adăugat versiunea ubuntu în care sunt și versiunea pipewire, am adăugat tot .conf pentru pipewire.
Someone avatar
drapel my
Mulțumesc de informație.
Puncte:1
drapel jp

Ok, așa că am instalat EasyEffects, care include un plugin frumos numit Stereo Tool, cu el am răsturnat FL cu canale FR fără nicio bătaie de cap, o adevărată mană divină! Gestionează pipewire ca un întreg, din câte am înțeles, deci este un instrument frumos și puternic.așa arată plug-in-ul de pe EasyEffects

Puncte:0
drapel bv

Mulțumesc pentru întrebare și răspuns, am găsit asta căutând o soluție similară. Cu toate acestea, EasyEffects nu s-a direcționat către dispozitivele potrivite, iar când am încercat să mă zbârnesc cu el în încercarea de a-l face să funcționeze pe placul meu, sistemul audio a continuat să se prăbușească.

Am sfârşit prin a revizui Documentația PipeWire și am modificat ușor un exemplu, iar soluția a funcționat ca un farmec.

Pași finalizați:

  1. Am copiat peste /usr/share/pipewire/pipewire.conf dosar la /etc/pipewire/pipewire.conf (Acesta va fi la nivel de sistem. Îl puteți copia în ~/.config/pipewire/pipewire.conf pentru o configurare de utilizator).

  2. Apoi am adăugat următorul modul:

    context.module = [
    ...
    ##### copiați liniile de mai jos și adăugați-le la /etc/pipewire/pipewire.conf
    #####
    { nume = libpipewire-module-loopback
            args = {
                audio.position = [ FL FR ]
                capture.props = {
                    media.class = Audio/Chiuvetă
                    node.name = chiuveta_mea
                    node.description = "chiuveta mea"
                    #node.latency = 1024/48000
                    #audio.rate = 44100
                    #canale.audio = 2
                    #audio.position = [ FL FR ]
                    #node.target = „chiuveta-mea-default”
                }
                playback.props = {
                    #media.class = Audio/Sursă
                    node.name = chiuveta_mea
                    node.description = "chiuveta mea"
                    #node.latency = 1024/48000
                    #audio.rate = 44100
                    #canale.audio = 2
                    audio.position = [ FR FL ]
                    node.target = "chiuveta-mea-implicite"
                }
            }
        }
    
    

    Aceasta este de la subiectul „Creează o chiuvetă/sursă combinată”, singura diferență față de exemplu este audio.poziție linia de redare.recuzită pe care l-am inversat.

  3. Conductă repornită:

    systemctl --user restart pipewire pipewire-pulse pipewire-media-session.service
    
  4. Alegerea chiuveta mea ca dispozitiv audio implicit în setările GNOME a inversat canalele și pare să fie omniprezent.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.