Điểm:0

Các kênh âm thanh của tai nghe bị đảo ngược, làm cách nào để thay đổi vị trí kênh trên Pipewire?

lá cờ jp

Vì vậy, tôi gặp sự cố này trên giắc cắm bảng điều khiển phía trước khiến âm thanh bị đảo ngược, cứ như thế này mãi nhưng tôi luôn xoay sở để hoán đổi kênh trên windows hoặc ubuntu (thông qua pulseaudio) bằng cách chỉ tìm tệp cấu hình và ánh xạ vị trí của mình theo cách mà đã làm việc.

Gần đây tôi đã cài đặt Pipewire để phát trực tuyến âm thanh dễ dàng với sự bất hòa và những thứ tương tự nhưng dường như tôi không thể tìm ra manh mối rõ ràng về cách ánh xạ các kênh với nó.

Nếu bất kỳ ai có thể chỉ cho tôi vị trí của tệp cấu hình chính xác và dòng nào điều khiển vị trí kênh âm thanh, tôi sẽ rất vui và rất biết ơn.

chỉnh sửa: Tôi đang dùng Ubuntu 21.10, pipewire đang ở phiên bản 3.34

Conf pipewire của tôi tại etc/pipewire/pipewire.conf

# Tệp cấu hình daemon cho phiên bản PipeWire "0.3.32" #
#
# Sao chép và chỉnh sửa tệp này trong /etc/pipewire để biết các thay đổi trên toàn hệ thống
# hoặc trong ~/.config/pipewire để biết các thay đổi cục bộ.

bối cảnh.properties = {
    ## Cấu hình các thuộc tính trong hệ thống.
    #library.name.system = support/libspa-support
    #context.data-loop.library.name.system = support/libspa-support
    #support.dbus = true
    #link.max-buffers = 64
    link.max-buffers = 16 # phiên bản < 3 máy khách không thể xử lý nhiều hơn
    #mem.warn-mlock = false
    #mem.allow-mlock = true
    #mem.mlock-all = false
    #clock.power-of-two-quantum = true
    #log.cấp độ = 2
    audio.position = "FR,FL"

    core.daemon = true # lắng nghe các kết nối ổ cắm
    core.name = pipewire-0 # tên lõi và tên ổ cắm

    ## Thuộc tính cho cấu hình 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
    #
    # Các ghi đè này chỉ được áp dụng khi chạy trong vm.
    vm.override = {
        default.clock.min-quantum = 1024
    }
}

bối cảnh.spa-libs = {
    #<regex tên nhà máy> = <tên thư viện>
    #
    # Được sử dụng để tìm tên nhà máy spa. Nó ánh xạ một tên nhà máy spa
    # biểu thức chính quy cho tên thư viện nên chứa
    # nhà máy đó.
    #
    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
    support.* = support/libspa-support
    #videotestsrc = videotestsrc/libspa-videotestsrc
    #audiotestsrc = audiotestsrc/libspa-audiotestsrc
}

context.modules = [
    #{ tên = <tên mô-đun>
    # [ args = { <key> = <value> ... } ]
    # [ flags = [ [ ifexists ] [ nofail ] ]
    #}
    #
    # Tải một mô-đun với các tham số đã cho.
    # Nếu ifexists được cung cấp, mô-đun sẽ bị bỏ qua khi không tìm thấy.
    # Nếu nofail được đưa ra, các lỗi khởi tạo mô-đun sẽ bị bỏ qua.
    #

    # Sử dụng RTKit để tăng mức độ ưu tiên của chuỗi dữ liệu.
    { name = libpipewire-module-rtkit
        đối số = {
            #nice.level = -11
            #rt.prio = 88
            #rt.time.soft = 2000000
            #rt.time.hard = 2000000
        }
        cờ = [ ifexists nofail ]
    }

    # Đặt mức độ ưu tiên của luồng mà không cần sử dụng RTKit.
    #{ tên = libpipewire-module-rt
    # đối số = {
    # đẹp.cấp = -11
    # rt.prio = 88
    # rt.time.soft = 2000000
    # rt.time.hard = 2000000
    # }
    # flags = [ ifexists nofail ]
    #}

    # Giao thức truyền thông bản địa.
    { name = libpipewire-module-protocol-native }

    # Mô-đun hồ sơ. Cho phép ứng dụng truy cập hồ sơ
    # và dữ liệu hiệu suất. Nó cung cấp một giao diện được sử dụng
    # bởi pw-top và pw-profiler.
    { name = libpipewire-module-profiler }

    # Cho phép ứng dụng tạo đối tượng siêu dữ liệu. Nó tạo ra
    # một nhà máy cho các đối tượng Siêu dữ liệu.
    { name = libpipewire-module-metadata }

    # Tạo một nhà máy để tạo ra các thiết bị chạy trong
    # ngữ cảnh của máy chủ PipeWire.
    { name = libpipewire-module-spa-device-factory }

    # Tạo một nhà máy để tạo các nút chạy trong
    # ngữ cảnh của máy chủ PipeWire.
    { name = libpipewire-module-spa-node-factory }

    # Cho phép tạo các nút chạy trong ngữ cảnh của
    # khách hàng. Được sử dụng bởi tất cả các khách hàng muốn cung cấp
    # dữ liệu vào PipeWire.
    { name = libpipewire-module-client-node }

    # Cho phép tạo các thiết bị chạy trong ngữ cảnh của
    # khách hàng. Được sử dụng bởi trình quản lý phiên.
    { name = libpipewire-module-client-device }

    # Mô-đun cổng thông tin giám sát PID của quy trình cổng thông tin
    Các kết nối # và thẻ có cùng PID với cổng thông tin
    # kết nối.
    { name = libpipewire-module-portal
        cờ = [ ifexists nofail ]
    }

    # Mô-đun truy cập có thể thực hiện kiểm tra truy cập và chặn
    # khách hàng mới.
    { tên = libpipewire-mô-đun-truy cập
        đối số = {
            # access.allowed liệt kê một loạt các đường dẫn được phép
            # ứng dụng.
            #access.allowed = [
            # /usr/bin/pipewire-media-session
            #]

            # Một mảng các đường dẫn bị từ chối.
            #access.rejected = [ ]

            # Một loạt các đường dẫn với quyền truy cập bị hạn chế.
            #access.restricted = [ ]

            # Bất cứ điều gì không có trong danh sách trên được chỉ định
            # quyền truy cập.buộc quyền.
            #access.force = flatpak
        }
    }

    # Tạo một nhà máy để gói các nút trong bộ điều hợp với
    # bộ chuyển đổi và lấy mẫu lại.
    { name = libpipewire-module-adapter }

    # Tạo một nhà máy để tạo liên kết giữa các cổng.
    { name = libpipewire-module-link-factory }

    # Cung cấp các nhà máy để tạo các đối tượng quản lý phiên.
    { name = libpipewire-module-session-manager }
]

context.objects = [
    #{ nhà máy = <tên nhà máy>
    # [ args = { <key> = <value> ... } ]
    # [ cờ = [ [ nofail ] ]
    #}
    #
    # Tạo một đối tượng từ nhà máy PipeWire với các tham số đã cho.
    # Nếu nofail được đưa ra, các lỗi sẽ bị bỏ qua (và không có đối tượng nào được tạo).
    #
    #{ 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 } }

    # Trình điều khiển giả mặc định. Điều này xử lý các nút được đánh dấu bằng "node.always-driver"
    # thuộc tính khi không có trình điều khiển nào khác hiện đang hoạt động. Khách hàng JACK cần điều này.
    { nhà máy = spa-nút-nhà máy
        đối số = {
            factory.name = support.node.driver
            node.name = Trình điều khiển giả
            nút.group = pipewire.dummy
            ưu tiên.driver = 20000
        }
    }
    { nhà máy = spa-nút-nhà máy
        đối số = {
            factory.name = support.node.driver
            node.name = Freewheel-Driver
            ưu tiên.driver = 19000
            nút.group = pipewire.freewheel
            nút.freewheel = true
        }
    }
    Điều này tạo ra một nút Nguồn mới. Nó sẽ có cổng đầu vào
    mà bạn có thể liên kết, để cung cấp âm thanh cho nguồn này.
    {nhà máy = bộ chuyển đổi
        đối số = {
            factory.name = support.null-audio-sink
            node.name = "my-mic"
            node.description = "Micrô"
            media.class = "Âm thanh/Nguồn/Ảo"
            audio.position = "FR,FL"
        }
    }

     Điều này tạo ra một thiết bị nguồn PCM duy nhất cho
     đường dẫn thiết bị alsa hw:0. Bạn có thể thay đổi nguồn để chìm
     để làm một bồn rửa trong cùng một cách.
    {nhà máy = bộ chuyển đổi
        đối số = {
            factory.name = api.alsa.pcm.source
            node.name = "alsa-source"
            node.description = "Nguồn PCM"
            media.class = "Âm thanh/Nguồn"
            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"
            âm thanh.rate = 48000
            âm thanh.channels = 2
            audio.position = "FR,FL"
        }
    }
]

bối cảnh.exec = [
    #{ đường dẫn = <tên chương trình> [ args = "<đối số>" ] }
    #
    # Thực thi chương trình đã cho với các đối số.
    #
    # Bạn có thể tùy chọn bắt đầu trình quản lý phiên tại đây,
    # nhưng tốt hơn là khởi động nó dưới dạng dịch vụ systemd.
    # Chạy trình quản lý phiên với -h để biết các tùy chọn.
    #
    #{ đường dẫn = "/usr/bin/pipewire-media-session" args = "" }
    #
    # Bạn cũng có thể tùy ý khởi động máy chủ pulseaudio tại đây
    # nhưng tốt hơn là khởi động nó dưới dạng dịch vụ systemd.
    # Có thể thú vị khi bắt đầu một daemon khác ở đây lắng nghe
    # trên một địa chỉ khác với tùy chọn -a (ví dụ: -a tcp:4713).
    #
    #{ đường dẫn = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" }
]

bản đồ kênh = phải, trái

Someone avatar
lá cờ my
Bạn đã không cung cấp hệ điều hành và chi tiết phát hành. Bạn đang sử dụng phiên bản Ubuntu nào? Vì nó hiện đang được viết, thật khó để xác định một câu trả lời đầy đủ. Vui lòng [chỉnh sửa] câu hỏi và thêm đủ chi tiết để chúng tôi có thể xác định câu trả lời đầy đủ. Cảm ơn.
Hayguneys avatar
lá cờ jp
Ok đã thêm phiên bản ubuntu mà tôi đang sử dụng và phiên bản pipewire, cũng đã thêm toàn bộ .conf của tôi cho pipewire.
Someone avatar
lá cờ my
Cảm ơn vì thông tin.
Điểm:1
lá cờ jp

Được rồi, vì vậy tôi đã cài đặt EasyEffects, gói này có một plugin hay có tên là Công cụ âm thanh nổi, với nó, tôi chuyển các kênh FL sang FR mà không gặp bất kỳ rắc rối nào, một ơn trời thực sự! Nó quản lý toàn bộ đường ống, theo những gì tôi hiểu nên nó là một công cụ mạnh mẽ.đây là giao diện của plug-in trên EasyEffects

Điểm:0
lá cờ bv

Cảm ơn câu hỏi và câu trả lời, tôi thấy điều này đang tìm kiếm một giải pháp tương tự. Tuy nhiên, EasyEffects không định tuyến đến đúng thiết bị và khi tôi cố gắng loay hoay với nó để cố gắng làm cho nó hoạt động theo ý thích của mình, hệ thống âm thanh liên tục gặp sự cố.

Tôi đã kết thúc việc xem xét Tài liệu PipeWire và chỉ chỉnh sửa một ví dụ một cách nhẹ nhàng, và giải pháp hoạt động như một cơ duyên.

Hoàn thành các bước:

  1. Tôi đã sao chép qua /usr/share/pipewire/pipewire.conf tập tin để /etc/pipewire/pipewire.conf (điều này sẽ được áp dụng trên toàn hệ thống. Bạn có thể sao chép nó vào ~/.config/pipewire/pipewire.conf cho thiết lập người dùng).

  2. Sau đó, tôi đã thêm mô-đun sau:

    context.modules = [
    ...
    ##### sao chép các dòng bên dưới và thêm vào /etc/pipewire/pipewire.conf của bạn
    #####
    { name = libpipewire-module-loopback
            đối số = {
                audio.position = [ FL FR ]
                chụp.props = {
                    media.class=Âm thanh/Chìm
                    nút.name = my_sink
                    node.description = "my-sink"
                    #node.độ trễ = 1024/48000
                    #audio.rate = 44100
                    #audio.kênh = 2
                    #audio.vị trí = [ FL FR ]
                    #node.target = "my-default-sink"
                }
                phát lại.props = {
                    #media.class = Âm thanh/Nguồn
                    nút.name = my_sink
                    node.description = "my-sink"
                    #node.độ trễ = 1024/48000
                    #audio.rate = 44100
                    #audio.kênh = 2
                    audio.position = [ FR FL ]
                    node.target = "my-default-sink"
                }
            }
        }
    
    

    Đây là từ chủ đề 'Tạo bồn rửa/nguồn kết hợp', điểm khác biệt duy nhất so với ví dụ là âm thanh.vị trí dòng của phát lại.props mà tôi đã đảo ngược.

  3. Khởi động lại đường ống:

    systemctl --user khởi động lại pipewire pipewire-xung pipewire-media-session.service
    
  4. lựa chọn bồn rửa của tôi vì thiết bị Âm thanh mặc định trong cài đặt Gnome đã đảo ngược các kênh và nó có vẻ phổ biến.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.