マシンをHDMI経由でレシーバーに接続しています。しかし、PulseAudioで3つ以上のチャネルを使用しようとすると、2つしか取得できません。 pacmd list cards
はカードを表示しますが、3つ以上のチャネルを持つHDMIプロファイルは表示しません。
ALSAを介して7.1サウンドが機能することを確認しました:
pasuspender -- speaker-test -D hdmi -c 8 -m FL,FC,FR,RR,RRC,RLC,RL,LFE
部屋を一周する静電気を発生させます。
PulseAudioでは、各サウンドカードにプロファイルセットが関連付けられています。プロファイルセットには複数のプロファイルが含まれており、それらはカードを一覧表示するとき(またはさまざまなPulseAudio GUIで見るとき)に表示されるプロファイルです。
default
プロファイルがあり、これには主にアナログサウンド出力に役立つものが含まれています。一部のHDMI出力に自動的に適用されるextra-hdmi
プロファイルもあり、最大5.1のオプションを提供します。残念ながら、これらのプロファイルはどちらも/usr/share/pulseaudio/alsa-mixer/profile-sets
にあるため、実際に編集することはできません(私は デバッグバグ736708 これについて報告しました)。ドキュメントによると、udevベースの自動検出、および手動ですべてを構成します。これにより、プロファイルへの完全パスを指定できます。しかし、文書化されていませんが、udevはフルパスも指定できることがわかりました。
Pulse_PROFILE_SET
udev環境変数を設定して、udevルールにプロファイルセットを割り当てます。前述の/usr
サブディレクトリ内のファイルのみをとるように文書化されていますが、フルパスも機能します。私の場合、私はこのルールを作成しました:
# cat /etc/udev/rules.d/95-local-pulseaudio.rules
ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1c20", ENV{Pulse_PROFILE_SET}="/etc/Pulse/my-hdmi.conf"
lspci -nn
から簡単に取得できる適切なPCIベンダーとデバイス番号を使用する必要があります。
Udevルールを作成したら、udevadm trigger -ssound
を使用してすぐに適用できます。おそらくinitramfsも再構築したいと思うでしょう(update-initramfs -u
)
Udevルールがudevadm info --query=all --path /sys/class/sound/card0
で有効になったことを確認します(もちろん、適切なカード番号を使用してください)。出力にE: Pulse_PROFILE_SET=/etc/Pulse/my-hdmi.conf
が表示されます。そうでない場合は、続行しないでください。動作しません。 udevルールに問題があります(または、トリガーしなかった可能性があります。いつでも再起動してみてください)。
注:チャネルマップは明らかにシステム固有です。ご使用のシステムに正しく合わせるには、実験する必要があります。私の幸運なことに、7.1のレイアウトでは、5.1、4.0などをビルドするための最終的なアイテムをドロップするだけです。手順は以下のとおりです。
これは、多くの場合、多くのコピーと貼り付けです。各セクションは、(a)名前、(b)説明、(c)チャネルマップ、(d)[オプション]優先順位が異なります。
[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
これをテストするには:
pulseaudio -k
、通常のユーザーとして、ユーザーごとのデーモン(デフォルト)を使用していると仮定します。もう一度起動すると、単純なaplay -l
でも機能します。pactl set-card-profile 0 "output:hdmi-surround-71"
を使用してこれを行いましたが、GUIも完全に機能します。speaker-test -c 8 -t w
を実行します。スピーカー名、できれば各スピーカーの正しい名前を発表し始めます。名前が正しい話者から来ていない場合は、チャンネルマップを変更して正しい名前にする必要があります。チャンネルマップを変更するたびに、PulseAudioを再起動する必要があります。/etc/Pulse/daemon.conf
には、変更が必要な設定がいくつかあります。
enable-remixing
—これがオンの場合、ステレオ信号では、左チャンネルの3つすべてから左チャンネルが再生され、右スピーカーから右チャンネルが再生されます。オフの場合、前面の2つだけが出てきます。プロファイルをステレオに変更することもできます(HDMIポートからステレオサウンドのみを送信し、レシーバーにスピーカーへのマッピング方法を決定させる)。
enable-lfe-remixing
—同様ですが、LFE(サブウーファー)チャンネルへのリミックス用です。
default-sample-format
— HDMIセットアップが16ビットを超えるオーディオをサポートしている場合、これをs32le
(デフォルトのs16le
から)に増やすことができます。
default-sample-rate
、alternate-sample-rate
—通常48KHzのDVDソース素材を主に使用している場合は、これらを交換する必要があります(44.1KHzを完全に無効にすることもできます)。または、お使いのHDMIレシーバーがサポートしている場合は、192KHzまで使用できます。 176KHzには44.1と48KHzの両方の偶数倍という素敵な特性があることに注意してください。レシーバーがサポートするものを決定する方法については、以下を参照してください
default-sample-channels
—それほど重要ではないようです。プロファイルはおそらくそれを上書きします...
もちろん、このファイルを変更した後はPulseAudioを再起動する必要があります。
eld.*
には/proc/asound
ファイルがあり、HDMIリンクのもう一方の端がサポートすると主張している内容を示しています。例えば:
# 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
したがって、私のレシーバーが最大8チャネル、192KHz、24ビットサウンドでLPCM(リニアPCM、つまり非圧縮オーディオ)をサポートしていることがわかります。 AC3、DTS、DSD、DD +、DTS-HD、ドルビーTrueHDもサポートしています。そのため、これらでエンコードされたファイルがあれば、それらのフォーマットをパススルーできます(もちろん、私のメディアプレーヤーがサポートしている場合、mpv
はおそらくサポートします)。