PulseAudioをHDMI上の7.1サラウンドサウンドに設定するにはどうすればよいですか?


10

マシンを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

部屋の周りを移動する静電気を生成します。

回答:


20

PulseAudioでは、各サウンドカードにプロファイルセットが関連付けられています。プロファイルセットには複数のプロファイルが含まれており、それらはカードを一覧表示するとき(またはさまざまなPulseAudio GUIで見るとき)に表示されるプロファイルです。

defaultプロファイルがあり、主にアナログサウンド出力に役立つものが含まれています。extra-hdmi一部のHDMI出力に自動的に適用されるプロファイルもあり、最大5.1のオプションを提供します。これらのプロファイルはどちらも残念ながらにあるため/usr/share/pulseaudio/alsa-mixer/profile-sets、実際に編集することはできません(これについては、デバッグバグ736708を提出しました)。ドキュメントによると、udevベースの自動検出を無効にして、すべてを手動で設定することができます。プロファイルへの絶対パス。しかし、ドキュメントには記載されていませんが、udevではフルパスを指定することもできます。

udevルールを設定してプロファイルセットを割り当てる

udevルールでプロファイルセットを割り当てるには、PULSE_PROFILE_SETudev環境変数を設定します。前述の/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"

から簡単に取得できる適切なPCIベンダーとデバイス番号を使用する必要がありますlspci -nn

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ルールに問題があります(または、トリガーしなかった可能性があります。いつでも再起動してみてください)。

/etc/pulse/my-hdmi.confファイルを作成します

注:チャネルマップは明らかにシステム固有です。ご使用のシステムに正しく合わせるには、実験する必要があります。私の幸運なことに、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

これをテストするには:

  1. pulseaudio -kユーザーごとのデーモン(デフォルト)を使用している場合は、通常のユーザーとしてPulseAudio:を再起動します。もう一度起動してくださいaplay -l。単純なものでも機能します。
  2. 7.1プロファイルに切り替えます。個人的には、以前pactl set-card-profile 0 "output:hdmi-surround-71"はこれを使用していましたが、GUIも完全に機能します。
  3. を実行します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-ratealternate-sample-rate—通常は48KHzのDVDソース素材をほとんど使用している場合は、これらを交換する必要があります(44.1KHzを完全に無効にすることもできます)。または、お使いのHDMIレシーバーがサポートしている場合は、192KHzまで使用できます。176KHzには44.1と48KHzの両方の偶数倍という優れた特性があることに注意してください。レシーバーがサポートするものを決定する方法については、以下を参照してください

default-sample-channels—実際には重要ではないようです。プロファイルはおそらくそれを上書きします...

当然、このファイルを変更した後はPulseAudioを再起動する必要があります。

再びボーナス!レシーバーがサポートするものを確認する

HDMIリンクのもう一方の端がサポートすると主張していることを伝えるeld.*ファイルがあります/proc/asound。例えば:

# 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おそらくそうです)。


おかげで100万人になり、しばらくの間セットアップに苦労していました。私にとってudevルールは最初に適用されなかったため、PCを再起動する必要がありました。ただし、1つの問題.. @derobert X265、7.1オーディオストリームをパススルーできないようです。PCを使用してデコードし、オーディオストリームを転送するだけです。(私のレシーバーは5.1ですが)何か提案はありますか?ありがとう!
dimuthu

@dimuthu H.265(x265)はビデオコーデックであり、オーディオコーデックではありません。PulseAudioのパススルーのサポートは限定的であり、有効にする必要があり(GUIで最も簡単)、ステレオに設定する必要がある場合があることに注意してください(パススルーの仕組みの実装の詳細であり、チャネル数の実際の制限ではありません) )。Kodi wikiの詳細ページを思い出したようです。
derobert 2017

1
@dimuthu(2番目のコメントで申し訳ありません。SEアプリが編集しようとするとクラッシュします...)5.1レシーバーはAC3とDTSのみをサポートしていると思います。たとえば、AACではありません。マルチチャネルPCMでは使用できないレシーバーの一部の機能を使用できる場合を除いて、パススルーするのはあまり意味がありません。少なくともHDMIではありません。
derobert 2017

はい、そうです、私はPulseAudioをステレオHDMIに設定することで、オーディオをそのまま通過させます。これが、ビットストリームオーディオを受信機に送る唯一の方法です。また、AACについて掘り下げました。Yahamaは仕様について何も言及していませんが、ハイエンドモデルでのみ利用できることを示すオンラインの証拠を見つけました。HTPCを使用してデコードすることで、多くの詳細を失いますか?7.1Ch / 192KHz、24ビットに設定しました。ありがとう!
dimuthu 2017

@dimuthuあなたがPulseAudioで設定された合理的な品質のレートコンバーターを持っている限り、あなたは実際にPCでデコードすることによって何も失うべきではありません。まあ、いくつかのCPU時間以外は何もありません(特にそのサンプルレートで、間違いなくソースマテリアルをはるかに超えています)
derobert
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.