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