web-dev-qa-db-ja.com

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

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

部屋を一周する静電気を発生させます。

10
derobert

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

defaultプロファイルがあり、これには主にアナログサウンド出力に役立つものが含まれています。一部のHDMI出力に自動的に適用されるextra-hdmiプロファイルもあり、最大5.1のオプションを提供します。残念ながら、これらのプロファイルはどちらも/usr/share/pulseaudio/alsa-mixer/profile-setsにあるため、実際に編集することはできません(私は デバッグバグ736708 これについて報告しました)。ドキュメントによると、udevベースの自動検出、および手動ですべてを構成します。これにより、プロファイルへの完全パスを指定できます。しかし、文書化されていませんが、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ルールに問題があります(または、トリガーしなかった可能性があります。いつでも再起動してみてください)。

/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を再起動します:pulseaudio -k、通常のユーザーとして、ユーザーごとのデーモン(デフォルト)を使用していると仮定します。もう一度起動すると、単純な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を再起動する必要があります。

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

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はおそらくサポートします)。

20
derobert