Làm cách nào để định cấu hình PulseAudio cho Âm thanh vòm 7.1 qua HDMI?


10

Tôi có máy của tôi được kết nối qua HDMI với một máy thu. Nhưng khi tôi cố gắng sử dụng nhiều hơn hai kênh với PulseAudio, tôi chỉ nhận được hai kênh. pacmd list cardshiển thị thẻ, nhưng không hiển thị cấu hình HDMI có nhiều hơn hai kênh.

Tôi đã xác nhận rằng âm thanh 7.1 hoạt động thông qua ALSA:

pasuspender -- speaker-test -D hdmi -c 8 -m FL,FC,FR,RR,RRC,RLC,RL,LFE

Sản xuất tĩnh mà đi xung quanh phòng.

Câu trả lời:


20

Trong PulseAudio, mỗi card âm thanh có một bộ hồ sơ được liên kết với nó. Một bộ hồ sơ chứa nhiều hồ sơ và đó là những hồ sơ bạn thấy khi liệt kê các thẻ (hoặc khi tìm trong GUI PulseAudio khác nhau).

Có một defaulthồ sơ, trong đó chủ yếu chứa những thứ hữu ích cho đầu ra âm thanh tương tự. Ngoài ra còn có một extra-hdmicấu hình được tự động áp dụng cho một số đầu ra HDMI và sẽ cung cấp các tùy chọn tối đa 5.1. Cả hai cấu hình này đều không may /usr/share/pulseaudio/alsa-mixer/profile-sets, và do đó bạn không thể chỉnh sửa chúng (Tôi đã gửi lỗi Debug 736708 về điều này.) Theo tài liệu, bạn có thể vô hiệu hóa tính năng tự động phát hiện dựa trên udev và định cấu hình thủ công mọi thứ mà bạn chỉ định đường dẫn đầy đủ đến một hồ sơ. Nhưng hóa ra, trong khi nó không được ghi lại, udev cũng có thể chỉ định một đường dẫn đầy đủ.

Thiết lập quy tắc udev để gán bộ hồ sơ

Bạn chỉ định một bộ hồ sơ theo quy tắc udev bằng cách đặt PULSE_PROFILE_SETbiến môi trường udev. Tài liệu của nó chỉ lấy một tệp trong /usrthư mục con nói trên , nhưng một đường dẫn đầy đủ cũng hoạt động. Trong trường hợp của tôi, tôi đã tạo quy tắc này:

# cat /etc/udev/rules.d/95-local-pulseaudio.rules 
ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1c20", ENV{PULSE_PROFILE_SET}="/etc/pulse/my-hdmi.conf"

Bạn sẽ cần sử dụng số nhà cung cấp và thiết bị PCI thích hợp mà bạn có thể dễ dàng lấy được lspci -nn.

Sau khi tạo quy tắc udev, bạn có thể áp dụng nó ngay lập tức udevadm trigger -ssound. Bạn có thể sẽ muốn xây dựng lại initramfs của mình ( update-initramfs -u)

Tất nhiên, xác nhận rằng quy tắc udev có hiệu lực udevadm info --query=all --path /sys/class/sound/card0(dĩ nhiên sử dụng số thẻ thích hợp). Bạn sẽ thấy E: PULSE_PROFILE_SET=/etc/pulse/my-hdmi.conftrong đầu ra. Nếu không, đừng tiếp tục. Nó sẽ không hoạt động. Có gì đó không đúng với quy tắc udev của bạn (hoặc có thể bạn không kích hoạt chúng. Bạn luôn có thể thử khởi động lại).

Tạo tệp /etc/pulse/my-hdmi.conf

Lưu ý: Bản đồ kênh rõ ràng là hệ thống cụ thể. Bạn sẽ cần thử nghiệm để làm cho nó phù hợp với hệ thống của bạn. Tôi đã may mắn, bố cục 7.1 của tôi chỉ liên quan đến việc bỏ các mục cuối cùng để xây dựng 5.1, 4.0, v.v ... Hướng dẫn bên dưới.

Đây là rất nhiều bản sao và dán, chủ yếu. Mỗi phần khác nhau trong (a) tên, (b) mô tả, (c) bản đồ kênh, (d) [tùy chọn] ưu tiên.

[General]
auto-profiles = yes

[Mapping hdmi-stereo]
device-strings = hdmi:%f
channel-map = front-left,front-right
description = Digital Stereo (HDMI)
priority = 4
direction = output
paths-output = hdmi-output-0

[Mapping hdmi-surround-40]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right
description = Digital Quadrophonic (HDMI)
priority = 1
direction = output
paths-output = hdmi-output-0

[Mapping hdmi-surround-51]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
description = Digital Surround 5.1 (HDMI)
priority = 2
direction = output
paths-output = hdmi-output-0

[Mapping hdmi-surround-71]
description = Digital Surround 7.1 (HDMI)
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
priority = 3
direction = output
paths-output = hdmi-output-0

Bây giờ, để kiểm tra điều này:

  1. Khởi động lại PulseAudio : pulseaudio -k, như người dùng bình thường của bạn, giả sử bạn đang sử dụng trình tiện ích cho mỗi người dùng (mặc định). Bắt đầu lại, thậm chí một đơn giản aplay -lsẽ làm việc.
  2. Chuyển sang cấu hình 7.1. Cá nhân tôi đã từng pactl set-card-profile 0 "output:hdmi-surround-71"làm điều này, nhưng GUI cũng sẽ hoạt động hoàn hảo.
  3. Chạy đi speaker-test -c 8 -t w. Nó sẽ bắt đầu thông báo tên người nói, hy vọng tên chính xác của mỗi người nói. Nếu tên không đến từ người nói chính xác, bạn sẽ phải thay đổi bản đồ kênh để có tên đúng. Sau mỗi lần thay đổi bản đồ kênh, bạn phải khởi động lại PulseAudio.

Tặng kem! Cài đặt hữu ích hơn

Trong /etc/pulse/daemon.conf, có một vài cài đặt bạn có thể muốn thay đổi:

enable-remixing- Nếu điều này được bật, tín hiệu âm thanh nổi sẽ phát kênh trái của cả ba loa trái của bạn và kênh phải của nó ra khỏi loa phải của bạn. Nếu tắt, nó sẽ chỉ ra hai mặt trước. Lưu ý rằng bạn cũng có thể thay đổi cấu hình thành âm thanh nổi (để chỉ gửi âm thanh nổi ra cổng HDMI và để người nhận của bạn quyết định cách ánh xạ nó tới loa).

enable-lfe-remixing - Tương tự, nhưng để phối lại với kênh LFE (loa siêu trầm).

default-sample-format- Nếu thiết lập HDMI của bạn hỗ trợ âm thanh lớn hơn 16 bit, bạn có thể muốn tăng mức này lên s32le(từ mặc định s16le).

default-sample-rate, alternate-sample-rate- Bạn có thể muốn trao đổi những thứ này (và thậm chí có thể vô hiệu hóa hoàn toàn 44.1KHz) nếu bạn chủ yếu sử dụng vật liệu nguồn DVD thường là 48KHz. Hoặc, nếu bộ thu HDMI của bạn hỗ trợ nó, bạn có thể đạt tới 192KHz. Lưu ý rằng 176KHz có đặc tính tốt là bội số của cả 44.1 và 48KHz. Xem bên dưới để biết cách xác định những gì người nhận của bạn hỗ trợ

default-sample-channels- Có vẻ không quan trọng lắm. Hồ sơ có thể ghi đè lên nó ...

Đương nhiên, bạn sẽ phải khởi động lại PulseAudio sau khi thay đổi tệp này.

Thưởng lần nữa! Xem những gì người nhận của bạn hỗ trợ

eld.*các tệp trong /proc/asoundđó cho bạn biết đầu kia của liên kết HDMI yêu cầu hỗ trợ gì. Ví dụ:

# cat /proc/asound/card0/eld#3.0 
monitor_present         1
eld_valid               1
monitor_name            TX-SR606
connection_type         HDMI
eld_version             [0x2] CEA-861D or below
edid_version            [0x3] CEA-861-B, C or D
manufacture_id          0xcb3d
product_id              0x863
port_id                 0x0
support_hdcp            0
support_ai              1
audio_sync_delay        0
speakers                [0x4f] FL/FR LFE FC RL/RR RLC/RRC
sad_count               8
sad0_coding_type        [0x1] LPCM
sad0_channels           2
sad0_rates              [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
sad0_bits               [0xe0000] 16 20 24
sad1_coding_type        [0x1] LPCM
sad1_channels           8
sad1_rates              [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
sad1_bits               [0xe0000] 16 20 24
sad2_coding_type        [0x2] AC-3
sad2_channels           8
sad2_rates              [0xe0] 32000 44100 48000
sad2_max_bitrate        640000
sad3_coding_type        [0x7] DTS
sad3_channels           8
sad3_rates              [0xc0] 44100 48000
sad3_max_bitrate        1536000
sad4_coding_type        [0x9] DSD (One Bit Audio)
sad4_channels           6
sad4_rates              [0x40] 44100
sad5_coding_type        [0xa] E-AC-3/DD+ (Dolby Digital Plus)
sad5_channels           8
sad5_rates              [0xc0] 44100 48000
sad6_coding_type        [0xb] DTS-HD
sad6_channels           8
sad6_rates              [0x1ec0] 44100 48000 88200 96000 176400 192000
sad7_coding_type        [0xc] MLP (Dolby TrueHD)
sad7_channels           8
sad7_rates              [0x1480] 48000 96000 192000

Vì vậy, bạn có thể thấy máy thu của tôi hỗ trợ LPCM (PCM tuyến tính, nghĩa là âm thanh không nén) ở tối đa 8 kênh, 192KHz, âm thanh 24 bit. Nó cũng hỗ trợ AC3, DTS, DSD, DD +, DTS-HD và Dolby TrueHD. Vì vậy, nếu tôi có các tệp được mã hóa trong các tệp đó, tôi có thể chuyển qua các định dạng đó (tất nhiên nếu trình phát đa phương tiện của tôi hỗ trợ nó, tất nhiên mpvlà có thể).


Cảm ơn một triệu cho việc này, đã vật lộn một lúc với thiết lập. Đối với tôi, các quy tắc udev không được áp dụng trước tiên, tôi phải khởi động lại PC để làm điều đó. Tuy nhiên, có một vấn đề .. @derobert Có vẻ như tôi không thể vượt qua luồng âm thanh X265, 7.1. Tôi chỉ cần giải mã nó bằng PC và truyền luồng âm thanh. (Mặc dù người nhận của tôi là 5.1) Bạn có gợi ý nào không? Cảm ơn!
dimuthu

@dimuthu H.265 (x265) là codec video, không phải codec âm thanh. Lưu ý rằng PulseAudio chỉ hỗ trợ hạn chế cho việc truyền qua, nó cần được bật (dễ nhất với GUI) và có thể cần phải được đặt thành âm thanh nổi (chỉ là chi tiết triển khai về cách thức hoạt động, không phải là giới hạn thực về số lượng kênh ). Tôi dường như nhớ lại một trang trên wiki Kodi với các chi tiết.
derobert

1
@dimuthu (Xin lỗi vì nhận xét thứ 2, ứng dụng SE đang gặp sự cố khi chỉnh sửa ...) Tôi đoán người nhận 5.1 chỉ hỗ trợ AC3 và DTS. Không, ví dụ, AAC. Trừ khi nó cho phép bạn sử dụng một số tính năng trên máy thu mà bạn không thể sử dụng với PCM đa kênh, không có nhiều điểm để vượt qua. Ít nhất là không qua HDMI.
derobert

vâng, bạn đúng, tôi thực sự truyền âm thanh bằng cách đặt PulseAudio thành Stereo HDMI. Đây là cách duy nhất tôi có thể nhận được âm thanh dòng bit đến máy thu. Cũng đã tìm hiểu về AAC và mặc dù Yahama đã không đề cập bất cứ điều gì về thông số kỹ thuật của họ, tôi đã tìm thấy một số bằng chứng trực tuyến để chỉ ra rằng nó chỉ có sẵn trong các mô hình cao cấp hơn. Tôi có mất quá nhiều chi tiết bằng cách giải mã nó bằng HTPC không? Tôi đã thiết lập nó lên tới 7.1Ch / 192KHz, 24 bit. Cảm ơn!
dimuthu

@dimuthu bạn thực sự không nên mất bất cứ thứ gì bằng cách giải mã trên PC miễn là bạn có bộ chuyển đổi tốc độ chất lượng hợp lý được đặt trong PulseAudio. Chà, không có gì ngoại trừ một số thời gian CPU (đặc biệt là ở tốc độ mẫu đó, không nghi ngờ gì vượt xa tài liệu nguồn)
derobert
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.