「PipeWire」の版間の差分
(→PulseAudio クライアント: 微修正) |
DreamChaser (トーク | 投稿記録) 細 (auioとなっていた箇所をaudioに修正) |
||
(6人の利用者による、間の72版が非表示) | |||
2行目: | 2行目: | ||
[[en:PipeWire]] |
[[en:PipeWire]] |
||
[[fi:PipeWire]] |
[[fi:PipeWire]] |
||
+ | [[pt:PipeWire]] |
||
+ | [[ru:PipeWire]] |
||
+ | [[zh-hans:PipeWire]] |
||
+ | {{Related articles start}} |
||
+ | {{Related|PipeWire/サンプル}} |
||
+ | {{Related|WirePlumber}} |
||
+ | {{Related articles end}} |
||
+ | [https://pipewire.org PipeWire] は新しい低レベルマルチメディアフレームワークです。 |
||
+ | 映像と音声を最小の遅延で再生/キャプチャすることを目的としていて、[[PulseAudio]]、[[JACK]]、[[ALSA]]、[[GStreamer]] をベースとしたアプリケーションと互換性があります。 |
||
+ | このフレームワークのデーモンは (PulseAudio と JACK の機能を持った) オーディオサーバーとしても、ビデオキャプチャサーバーとしても設定できます。 |
||
− | [http://pipewire.org PipeWire] は、GNOME が開発した新しいマルチメディアフレームワークです。開発を担当しているのはWim Taymans です。 |
||
− | PipeWire は [[Flatpak]] のようなコンテナをサポートしており、 |
+ | また PipeWire は [[Flatpak]] のようなコンテナをサポートしており、''audio'' や ''video'' [[ユーザーとグループ#グループ管理|ユーザーグループ]]に依存するのではなく、Flatpak や Wayland にスクリーンや音声を録音する許可を求める [[Polkit]] のようなセキュリティモデルを使用しています。 |
== インストール == |
== インストール == |
||
− | 公式リポジトリ |
+ | 公式リポジトリから {{Pkg|pipewire}} パッケージを [[インストール]] してください。[[multilib]] に対応した {{Pkg|lib32-pipewire}} もあります。 |
− | Pipewire は [[systemd/ユーザー]] を使 |
+ | Pipewire は [[systemd/ユーザー]] を使ってサーバーを管理し、ソケットを自動で起動します。 |
+ | オプションとして、{{Pkg|pipewire-docs}} をインストールすると、ドキュメントを確認することができます。 |
||
− | 必要に応じて、 {{pkg|pipewire-docs}} をインストールしてドキュメントを確認します。 {{pkg|pipewire-alsa}}、 {{pkg|pipewire-pulse}}、 {{pkg|pipewire-jack}} などの他のパッケージは、 [https://wiki.archlinux.jp/index.php/PipeWire#Audio PulseAudio/JACKの代わりにPipeWireを使用] したくない場合を除き、通常は必要ありません。 multilib をサポートするために、 {{aur|lib 32-pipewire}}、 {{aur|lib 32-pipewire-jack}} も利用できます。 |
||
+ | Pipewire は、他のオーディオサーバーと置き換えることができます。詳しくは [[PipeWire#オーディオ|オーディオ]] を参照してください。 |
||
− | == 使用方法 == |
||
− | === |
+ | === セッション マネージャー === |
+ | [[JACK]] と同様、PipeWire は内部で接続ロジックを実装していません。新しいストリームを監視し、適切な出力デバイスやアプリケーションに接続する負担は、セッションマネージャーとして知られる外部のコンポーネントに任されています。 |
||
− | ほとんどのブラウザは、 WebRTC を使用しているとき (例えば Google Hongouts で) デスクトップ (または個々のアプリケーション) をキャプチャするために X11 に依存していました。 Wayland では、セキュリティ上の理由から、共有メカニズムは異なる方法で処理されます。 PipeWire は、アクセスコントロールを使用して、 Wayland の下のコンテンツを共有できます。 |
||
+ | 現在、推奨のセッションマネージャーは1つだけで次になります: |
||
− | これには {{pkg|xdg-desktop-portal}} とそのバックエンドの1つが必要です [http://jgrulich.cz/2018/07/04/04/how-to-enable-and-use-screen-sharing-on-wayland] 利用可能なバックエンドは次のとおりです。 |
||
+ | * {{App|[[WirePlumber]]| 強力なマネージャであり、現在の推奨品です。モジュール設計に基づいており、実際の管理機能を実装する Lua プラグインがあります。|https://pipewire.pages.freedesktop.org/wireplumber/|{{Pkg|wireplumber}}}} |
||
+ | 次のセッションマネージャーはサポート外になっており WirePlumber を推奨しています: |
||
− | * {{pkg|xdg-desktop-portal-gtk}} gnomeの場合。 |
||
− | * {{pkg|xdg-desktop-portal-kde}} KDEの場合。 |
||
− | * {{pkg|xdg-desktop-portal-wlr}} wlroots ベースのコンポジター(例えば [[Sway]]、 [https://github.com/djpohly/dwl dwl]) |
||
+ | * {{App|PipeWire Media Session|いくつかの基本的なデスクトップのユースケースに対応した非常にシンプルなセッションマネージャです。これは主にテスト用と新しいセッションマネージャを構築するための例として実装されました。|https://gitlab.freedesktop.org/pipewire/media-session|{{Pkg|pipewire-media-session}}}} |
||
− | Firefox(84+)はデフォルトでこのメソッドをサポートしていますが、Chromium(73以降)では、[https://bugs.chromium.org/p/chromium/issues/detail?id=682122 WebRTC PipeWireサポート] を有効にする必要があります。次のURLの対応する(実験的)フラグ |
||
− | chrome://flags/#enable-webrtc-pipewire-capturer |
||
+ | PipeWire のインストール時に、どちらかを選ぶように指示されます。後で適切なパッケージをインストールすることで、もう一方のオプションと衝突しますが、置き換えることで切り替えが可能です。 |
||
− | {{ic|xdg-Desktop-Portal-WLR}} の作業には、 {{ic|xdg_current_desktop}} [https://github.com/emersion/xdg-desktop-portal-wlr#running] を設定する必要があります。 |
||
− | XDG_CURRENT_DESKTOP=SWAY をエクスポートします |
||
+ | === GUI === |
||
− | Chromium は 現在 PipeWire 0.2 を使っていますが、Arch Linux では PipeWire 0.3 を提供しているので、スクリーン共有を行うには {{pkg|libpipewire02}} もインストールする必要があります。 |
||
+ | * {{App|Helvum|PipeWire 用の GTK 製のパッチベイ。 JACK のツールの catia にインスパイアされた。|https://gitlab.freedesktop.org/ryuukyu/helvum|{{pkg|helvum}}}} |
||
− | {{Tip|複数のモニタがある場合に {{ic|xdg-desktop-portal-wlr}} を使用して個々のモニタを共有するには、 {{ic|1=--output=''Monitor''}} フラグをユニットのサービスファイルの {{ic|1=ExecStart=} オプション [[Systemd#Editing_provided_units|editing]] で追加します。行全体は {{ic|1=ExecStart=@libexecdir@/xdg-desktop-portal-wlr--output=eDP-1}} のようになります。}}}} |
||
+ | * {{App|qpwgraph|Qt-based Graph/Patchbay for PipeWire, inspired by the JACK tool QjackCtl.|https://gitlab.freedesktop.org/rncbc/qpwgraph|{{Pkg|qpwgraph}}}} |
||
+ | == 設定 == |
||
− | {{Accuracy|[https://github.com/flatpak/xdg-desktop-portal-gtk/pull/225 この要求] が統合されたため、{{Pkg|xdg-desktop-portal-gtk}} の特定のアプリケーション/ウィンドウの共有に関する次の注記が正しくない可能性があります。また、 [https://github.com/flatpak/xdg-desktop-portal-gtk/issues/204] のディスカッションの追跡チケットも参照してください。}} |
||
+ | PipeWire パッケージは、初期設定ファイルを{{ic|/usr/share/pipewire}} に用意しています。パッケージのアップデートで変更内容が上書きされてしまうので、これらのファイルを直接編集するべきではありません。PipeWire を設定するには、ファイルを {{ic|/usr/share/pipewire}} からシステム全体の代替場所 {{ic|/etc/pipewire}} か、ユーザーの場所 {{ic|~/.config/pipewire}} にコピーしてください。[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PipeWire#configuration-file-pipewireconf] |
||
− | 唯一サポートされている機能はデスクトップ全体を共有することであり、特定のアプリ/ウィンドウを共有することではありません [https://github.com/emersion/xdg-desktop-portal-wlr/wiki/FAQ#will-this-let-me-share-individual-windows] [https://github.com/KDE/xdg-desktop-portal-kde/blob/master/TODO] |
||
− | === |
+ | === プロファイル === |
+ | Pipewire では、PulseAudio のプロファイルに加えて、pavucontrol で選択可能なカスタムの ''Pro Audio'' プロファイルが提供されています。その効果はこちらで解説しています:https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/FAQ#what-is-the-pro-audio-profile |
||
− | ソフトウェアはまだ製造済みではありませんが、[https://wiki.archlinux.jp/index.php/GStreamer GStreamer] に頼るほとんどのアプリケーション。 PipeWire GStreamer プラグインのおかげで、ビデオストリームはボックス外で機能するはずです。例えばの用途のような用途。そのため、 {{pkg|cheese}} したがって、すでにそれを使用してビデオ入力を共有できます。 |
||
− | + | == 使用方法 == |
|
+ | === 音声 === |
||
− | PulseAudio と Jack と同様に、 PipeWire をオーディオサーバーとして使用できます。 PulseAudio 互換のサーバー実装と JACK クライアント用の ABI 互換ライブラリを提供することで、 PulseAudio と Jack の両方を置き換えることを目的としています。詳細については、[https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ このブログエントリ] |
||
+ | |||
+ | PulseAudio や JACK と同様に PipeWire をオーディオサーバーとして使用できます。 PulseAudio サーバーの互換実装と JACK クライアント用の ABI 互換ライブラリを提供することで PulseAudio と JACK の両方を置き換えることを目的としています。詳細については[https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ この記事]を参照してください。 |
||
==== ALSA/レガシーアプリケーション ==== |
==== ALSA/レガシーアプリケーション ==== |
||
− | {{pkg|pipewire-alsa}} をインストール |
+ | {{pkg|pipewire-alsa}} をインストールして ALSA API を使用するすべてのアプリケーションが PipeWire を使用するよう設定できます。 |
==== PulseAudio クライアント ==== |
==== PulseAudio クライアント ==== |
||
− | {{pkg|pipewire-pulse}} をインストールします。 |
+ | {{pkg|pipewire-pulse}} をインストールします。このパッケージは {{pkg|pulseaudio}} と {{pkg|pulseaudio-bluetooth}} を置き換えます。再起動するか、ログインし直すか、{{ic|pulseaudio.service}} を[[停止]]して、{{ic|pipewire-pulse.service}} ユーザーユニットを実行すると効果がわかります。 |
+ | |||
+ | パッケージがユーザーサービス {{ic|pipewire-pulse.socket}} を自動的に有効化するので、通常それ以上の操作は不要です。置き換えが機能しているかどうかを確認するには、次のコマンドを実行して出力を確認してください: |
||
+ | |||
+ | {{hc|$ pactl info|2= |
||
+ | ... |
||
+ | Server Name: PulseAudio (on PipeWire ''x.y.z'') |
||
+ | ... |
||
+ | Default Sink: alsa_output.{bus}-{device}.{profile} |
||
+ | Default Source: alsa_input.{bus}-{device}.{profile} |
||
+ | ... |
||
+ | }} |
||
+ | {{man|1|pactl}} は、依存関係として ''pipewire-pulse'' とともにインストールされる PulseAudio クライアントライブラリパッケージ ({{pkg|libpulse}}) によって提供されます。 |
||
− | 再起動または再ログインして効果を確認してください。 |
||
+ | ===== 全体または個別のチャンネルの音量を設定する ===== |
||
− | 交換が機能しているかどうかを確認するには、次のコマンドを実行して出力を参照してください。 |
||
+ | 出力チャンネルのボリュームを調整するには、{{ic|pactl get-sink-volume {sink}}} を使用して、''Default Sink:'' (上記) または ''Name'' の値を使用して ''sink'' を指定する必要があります。: |
||
− | {{hc|1=$ pactl info|2= |
||
+ | '' (下記)、デフォルトのシンクデバイス (''@DEFAULT_SINK@'')、または ''Sink #'' (例: 以下の ''1''): |
||
+ | {{hc|$ pactl list sinks {{!}} grep -B1 -A9 State:|2= |
||
+ | Sink #1 |
||
+ | State: RUNNING |
||
+ | Name: alsa_output.pci-0000_2d_00.4.analog-surround-51 |
||
... |
... |
||
+ | Driver: PipeWire |
||
− | Server Name: PulseAudio (on PipeWire 0.3.16) |
||
... |
... |
||
+ | Mute: no |
||
+ | Volume: front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB, rear-left: 65536 / 100% / 0.00 dB, rear-right: 65536 / 100% / 0.00 dB, front-center: 65536 / 100% / 0.00 dB, lfe: 65536 / 100% / 0.00 dB |
||
+ | balance 0.00 |
||
}} |
}} |
||
+ | ヒント: オーディオが再生されている場合、他のデバイスとして ''実行中'' の {{man|1|grep}} は ''一時停止'' されます。 |
||
+ | ''バランス'' 比率は自動的に計算されます。デフォルトのデバイスの全体のボリュームを設定するには、次のコマンドを使用します: {{bc|pactl set-sink-volume @DEFAULT_SINK@ 75%}} |
||
− | ==== JACK clients ==== |
||
+ | 個別のチャンネルを設定するには、各チャンネルのボリュームを個別に指定します: |
||
+ | {{bc|pactl set-sink-volume @DEFAULT_SINK@ 100% 75% 100% 75% 100% 100%}} |
||
+ | ''ソース'' 入力も同様に処理されます。さらに詳しい設定 (モジュールなど) については、[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Migrate-PulseAudio Migrate PulseAudio] および [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio Pipewire-Pulse Configuration] を参照してください。 |
||
− | {{pkg|pipewire-jack}} をインストールし、 {{ic|PW-JACK}} を使用して、元の {{ic|libjack*}} ではなく互換性のあるライブラリを持つジャッククライアントを起動します。 |
||
+ | |||
+ | ==== JACK クライアント ==== |
||
+ | |||
+ | {{pkg|pipewire-jack}} をインストールします。{{ic|pw-jack}} を使用して JACK クライアントを起動すると、元の {{ic|libjack*}} ではなく PipeWire が提供する互換ライブラリが使用されます: |
||
pw-jack ''application'' |
pw-jack ''application'' |
||
+ | カスタムバッファサイズを要求することもできます。{{ic|PIPEWIRE_LATENCY}}環境変数を {{ic|バッファサイズ/サンプルレート}} (ブロックのレイテンシ(秒)を意味します) に設定します: |
||
− | BufferSize/SampLerate (秒単位でブロック待ち時間に等しい) を設定することで、カスタムバッファサイズを要求することも可能です。 |
||
PIPEWIRE_LATENCY="128/48000" pw-jack ''application'' |
PIPEWIRE_LATENCY="128/48000" pw-jack ''application'' |
||
− | + | また {{aur|pipewire-jack-dropin}} をインストールするか、{{pkg|jack}} か {{pkg|jack2}} をアンインストールして JACK クライアントが互換ライブラリを自動的に読み込むようにもできます。 |
|
− | JACK アプリケーションが正しいライブラリにリンクしていることを確認 |
+ | {{ic|ldd}} を使用して JACK アプリケーションが正しいライブラリにリンクしていることを確認します。 |
{{hc|1=$ ldd /usr/bin/qjackctl {{!}} grep -i libjack|2= |
{{hc|1=$ ldd /usr/bin/qjackctl {{!}} grep -i libjack|2= |
||
87行目: | 122行目: | ||
==== Bluetooth デバイス ==== |
==== Bluetooth デバイス ==== |
||
− | PipeWire は |
+ | PipeWire は {{pkg|pipewire-pulse}} パッケージがインストールされている場合 Bluetooth オーディオデバイスを制御します。具体的には、メディアセッションデーモンは {{ic|/etc/pipewire/media-session.d/with-pulseaudio}} が存在する時に自動的にその {{ic|bluez5}} モジュールを有効にします。 |
+ | ===== プロファイルの自動選択機能 ===== |
||
− | ==== ネイティブジャックの上で PipeWire を実行します ==== |
||
+ | {{Pkg|pipewire-media-session}} は、入力ストリームが必要なときに、HSP/HFP と A2DP プロファイルを自動的に切り替えます。これを有効にするには、{{ic|bluez5.autoswitch-profile}} プロパティを {{ic|true}} にセットしてください。 |
||
− | PipeWire は、必要に応じてネイティブジャックデーモンの上にあるジャッククライアントとして実行することもできます。詳細については、[https://gitlab.freedesktop.org/pipewire/pipewire//wikis/jack and pipewire] を参照してください。 |
||
+ | {{hc|/etc/pipewire/media-session.d/bluez-monitor.conf (or ~/.config/pipewire/media-session.d/bluez-monitor.conf|output= |
||
− | == オーディオの後処理 == |
||
+ | ... |
||
+ | rules = [ |
||
+ | { |
||
+ | ... |
||
+ | actions = { |
||
+ | update-props = { |
||
+ | ... |
||
+ | bluez5.autoswitch-profile = true |
||
+ | ... |
||
+ | }} |
||
+ | これらの機能は、[[WirePlumber]] ではまだ [https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/90 実装中] です。 |
||
− | === パルス効果 === |
||
+ | ==== PipeWire ネイティブパッチセット ==== |
||
− | PulseEffects は GTK ユーティリティで、個々のアプリケーション出力ストリームとマイク入力ストリームに多数のオーディオエフェクトとフィルタを提供します。注目すべきエフェクトには、入出力イコライザー、出力ラウドネスイコライゼーションとベースエンハンスメント、入力ディエッサーとノイズリダクションプラグインなどがあります。エフェクトの全リストについては、 [https://github.com/wwmm/pulseeffects GitHubページ] を参照してください。 |
||
+ | |||
+ | グラフィカルな視覚化と接続の作成のための Helvum はありますが、それ以外はまだ入っていません。以下は、ワイヤセットの保存、ワイヤセットの読み込み、すべての接続の解除を行う bash スクリプトです。保存と読み込みには、コマンドラインパラメータでファイル名を指定します。 |
||
+ | |||
+ | {{hc|pw-savewires|<nowiki> |
||
+ | #!/bin/bash |
||
+ | |||
+ | if [[ "$#" -ne 1 ]]; then |
||
+ | echo |
||
+ | echo 'usage: pw-savewires filename' |
||
+ | echo |
||
+ | exit 0 |
||
+ | fi |
||
+ | |||
+ | rm $1 &> /dev/null |
||
+ | while IFS= read -r line; do |
||
+ | link_on=`echo $line | cut -f 4 -d '"'` |
||
+ | link_op=`echo $line | cut -f 6 -d '"'` |
||
+ | link_in=`echo $line | cut -f 8 -d '"'` |
||
+ | link_ip=`echo $line | cut -f 10 -d '"'` |
||
+ | echo "Saving: " "'"$link_on:$link_op"','"$link_in:$link_ip"'" |
||
+ | echo "'"$link_on:$link_op"','"$link_in:$link_ip"'" >> $1 |
||
+ | done < <(pw-cli dump short link) |
||
+ | </nowiki>}} |
||
+ | |||
+ | {{hc|pw-loadwires|<nowiki> |
||
+ | #!/bin/python |
||
+ | |||
+ | import sys |
||
+ | import csv |
||
+ | import os |
||
+ | |||
+ | if len(sys.argv) < 2: |
||
+ | print('\n usage: pw-loadwires filename\n') |
||
+ | quit() |
||
+ | |||
+ | with open(sys.argv[1], newline='') as csvfile: |
||
+ | pwwreader = csv.reader(csvfile, delimiter=',', quotechar='"') |
||
+ | for row in pwwreader: |
||
+ | print('Loading: ' + row[0] + ' --> ' + row[1]) |
||
+ | process = os.popen('pw-link ' + row[0] + ' ' + row[1]) |
||
+ | </nowiki>}} |
||
+ | |||
+ | {{hc|pw-dewire|<nowiki> |
||
+ | #!/bin/bash |
||
+ | while read -r line; do |
||
+ | echo 'Dewiring: ' $line '...' |
||
+ | pw-link -d $line |
||
+ | done < <(pw-cli dump short link {{!}} grep -Eo '^[0-9]+') |
||
+ | </nowiki>}} |
||
+ | |||
+ | ==== ネットワーク上のコンピューターとオーディオ機器を共有する ==== |
||
+ | |||
+ | PipeWire 自体はネットワーク透過型ではありませんが、そのパルス実装は [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-PulseAudio#network-support ネットワークストリーミング] をサポートしています。ネットワーク上のコンピュータ間でオーディオを共有する簡単な方法は、[[Avahi]] デーモンを使って検出することです。 |
||
+ | オーディオを共有するすべてのコンピュータで {{ic|avahi-daemon.service}} が実行されていることを確認してください。 |
||
+ | |||
+ | ローカルのオーディオデバイスを共有するために、ホスト上で適切なモジュールをロードしてください。 |
||
+ | |||
+ | pactl load-module module-native-protocol-tcp listen=''192.168.1.10'' # Use the local IP address |
||
+ | pactl load-module module-zeroconf-publish |
||
+ | |||
+ | 次に、クライアントにディスカバリモジュールをロードします。 |
||
+ | |||
+ | pactl load-module module-zeroconf-discover |
||
+ | |||
+ | ===== AirPlay レシーバーにオーディオをストリーミングする ===== |
||
+ | |||
+ | [[Wikipedia:ja:AirPlay#Receivers|AirPlay Receiver]] を装ったデバイスにオーディオをストリーミングすることが可能です。この機能を有効にするには、[https://docs.pipewire.org/page_module_raop_discover.html RAOP Discover モジュール] をロードします。 |
||
+ | |||
+ | $ pactl load-module module-raop-discover |
||
+ | |||
+ | 専用の設定ファイルを作成することで、このモジュールを自動的にロードすることもできます。 |
||
+ | |||
+ | {{hc|/etc/pipewire/pipewire.conf.d/raop-discover.conf (or ~/.config/pipewire/pipewire.conf.d/raop-discover.conf)|2= |
||
+ | context.modules = [ |
||
+ | { |
||
+ | name = libpipewire-module-raop-discover |
||
+ | args = { } |
||
+ | } |
||
+ | ] |
||
+ | }} |
||
+ | |||
+ | 一部のスピーカーの AirPlay 実装 (Sonos AirPlay 2 スピーカーなど) では、ソースデバイスで着信 UDP トラフィック用にポート 6001 および 6002 を開く必要がある場合があります。 |
||
+ | |||
+ | ==== ネイティブ JACK 上で PipeWire を実行する ==== |
||
+ | |||
+ | PipeWire はネイティブ JACK デーモン上の JACK クライアントとして実行することもできます。詳細は [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/JACK JACK and PipeWire] を参照してください。 |
||
+ | |||
+ | ==== PipeWire シンクとして ALSA dmix デバイスを使用する ==== |
||
+ | |||
+ | PipeWire サーバー(またはユーザーごとに複数) を [[Advanced Linux Sound Architecture#Dmix|ALSA dmix デバイス]] を介して ALSA に出力することが可能です。これにより、ALSA を主要な音声出力システムとして使用しながら、Bluetooth ヘッドフォンなどの ALSA 以外のデバイスを使用することができるようになります。 |
||
+ | |||
+ | ===== ALSA dmix セットアップ ===== |
||
+ | |||
+ | {{ic|PCH}} と {{ic|HDMI}} の 2 枚のカードがあるとします。 |
||
+ | |||
+ | {{hc|/proc/asound/cards| |
||
+ | 0 [PCH ]: HDA-Intel - HDA Intel PCH |
||
+ | HDA Intel PCH at 0xdff40000 irq 146 |
||
+ | 1 [HDMI ]: HDA-Intel - HDA ATI HDMI |
||
+ | HDA ATI HDMI at 0xdfe60000 irq 147 |
||
+ | }} |
||
+ | |||
+ | PCM は次のようになります。 |
||
+ | |||
+ | {{hc|/proc/asound/pcm| |
||
+ | 00-00: ALC1220 Analog : ALC1220 Analog : playback 1 : capture 1 |
||
+ | 00-02: ALC1220 Alt Analog : ALC1220 Alt Analog : capture 1 |
||
+ | 01-03: HDMI 0 : HDMI 0 : playback 1 |
||
+ | 01-07: HDMI 1 : HDMI 1 : playback 1 |
||
+ | 01-08: HDMI 2 : HDMI 2 : playback 1 |
||
+ | 01-09: HDMI 3 : HDMI 3 : playback 1 |
||
+ | 01-10: HDMI 4 : HDMI 4 : playback 1 |
||
+ | 01-11: HDMI 5 : HDMI 5 : playback 1 |
||
+ | }} |
||
+ | |||
+ | ALSA 設定が次のようになっているとします。 |
||
+ | |||
+ | {{hc|/etc/asound.conf| |
||
+ | ctl.!default { |
||
+ | type hw |
||
+ | card PCH |
||
+ | } |
||
+ | |||
+ | pcm.!default { |
||
+ | type plug |
||
+ | slave.pcm "'''dmix:PCH,0'''" |
||
+ | } |
||
+ | |||
+ | pcm.dhdmi { |
||
+ | type plug |
||
+ | slave.pcm "'''dmix:HDMI,9'''" |
||
+ | } |
||
+ | }} |
||
+ | |||
+ | この特定の例では、dmix デバイスは {{ic|dmix:PCH,0}} と {{ic|dmix:HDMI,9}} になります。 |
||
+ | |||
+ | ===== PipeWire dmix セットアップ ===== |
||
+ | |||
+ | まず、{{ic|alsa_monitor.enable()}} をコメントアウトして、{{ic|wireplumber}} によるハードウェア ALSA デバイスの監視と追加を停止します。 |
||
+ | |||
+ | {{hc|/etc/wireplumber/main.lua.d/90-enable-all.lua (or ~/.config/wireplumber/main.lua.d/90-enable-all.lua)| |
||
+ | ... |
||
+ | -- Load devices |
||
+ | '''-- alsa_monitor.enable()''' |
||
+ | v4l2_monitor.enable() |
||
+ | libcamera_monitor.enable() |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | ここで、dmix デバイスを使用するように {{ic|pipewire}} を設定します。デフォルトの設定ファイル ({{ic|/usr/share/pipewire/pipewire.conf}}) には [https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/0.3.59/src/daemon /pipewire.conf.in#L219-239 コメントアウトされた例] をベースとして使用できます。 |
||
+ | |||
+ | 独自の要素を {{ic|context.objects}} 配列に追加します。 |
||
+ | |||
+ | {{hc|/etc/pipewire/pipewire.conf.d/alsa-dmix.conf (or ~/.config/pipewire/pipewire.conf.d/alsa-dmix.conf)|output= |
||
+ | context.objects = [ |
||
+ | # We do not start with dmix, but with an input device. |
||
+ | # Do not forget to add an input device. |
||
+ | # On a friend's Laptop, I saw Zoom having a nervous |
||
+ | # breakdown and endlessly crying because no input device |
||
+ | # was configured! You have been warned. |
||
+ | { factory = adapter |
||
+ | args = { |
||
+ | factory.name = api.alsa.pcm.source |
||
+ | node.name = "alsa-mic-internal" # name of pulse device (mpv) |
||
+ | node.description = "Mic Internal" # name of pulse device (pavucontrol) |
||
+ | media.class = "Audio/Source" |
||
+ | api.alsa.path = "'''hw:PCH,0'''" |
||
+ | } |
||
+ | } |
||
+ | # Okay, now we add our dmix PCMs |
||
+ | { factory = adapter |
||
+ | args = { |
||
+ | factory.name = api.alsa.pcm.sink # sink for dmix |
||
+ | node.name = "alsa-dmix-internal" # name of pulse device (mpv) |
||
+ | node.description = "PCM Internal" # name of pulse device (pavucontrol) |
||
+ | media.class = "Audio/Sink" # Sink for dmix |
||
+ | api.alsa.path = "'''dmix:PCH,0'''" |
||
+ | } |
||
+ | } |
||
+ | |||
+ | { factory = adapter |
||
+ | args = { |
||
+ | factory.name = api.alsa.pcm.sink # sink for dmix |
||
+ | node.name = "alsa-dmix-hdmi" # name of pulse device (mpv) |
||
+ | node.description = "PCM HDMI" # name of pulse device (pavucontrol) |
||
+ | media.class = "Audio/Sink" # Sink for dmix |
||
+ | # remember this is a non-default dmix from /etc/asound.conf |
||
+ | api.alsa.path = "'''dmix:HDMI,9'''" |
||
+ | } |
||
+ | } |
||
+ | ] |
||
+ | }} |
||
+ | |||
+ | ユーザー (非 root) として、{{ic|wpctl status}} の出力を確認し、{{ic|wpctl set-default ''ID''}} でデフォルトの入力(ソース) と出力 (シンク) のデバイスを好みのものに設定します。{ic|''ID''}} はシンク/ソース名の前の数字です。 |
||
+ | |||
+ | これで、構成を完全にテストすることができます。 |
||
+ | |||
+ | ==== デバイスプロファイルの切り替え ==== |
||
+ | |||
+ | {{ic|snd_hda_intel}} などの一部のハードウェアオーディオデバイスは、デバイスが実行されているプロファイルによって機能が異なります。{{ic|snd_hda_intel}} の場合、HDMI とアナログ出力用に個別のプロファイルがあります。 |
||
+ | |||
+ | WirePlumber で HDMI に切り替える: |
||
+ | |||
+ | {{hc| |
||
+ | $ wpctl set-profile <device-ID> 3 |
||
+ | $ wpctl status |
||
+ | |output= |
||
+ | ... |
||
+ | ├─ Sinks: |
||
+ | │ * 53. Built-in Audio Digital Stereo (HDMI) [vol: 1.00] |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | WirePlumber でアナログに切り替える: |
||
+ | |||
+ | {{hc| |
||
+ | $ wpctl set-profile <device-ID> 1 |
||
+ | $ wpctl status |
||
+ | |output= |
||
+ | ... |
||
+ | ├─ Sinks: |
||
+ | │ * 51. Built-in Audio Analog Stereo [vol: 0.60] |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | === WebRTC 画面共有 === |
||
+ | |||
+ | ほとんどのアプリケーションは、例えばウェブブラウザで WebRTC を使うとき (例: Google Meet) などに、デスクトップ (あるいは個々のアプリケーション) をキャプチャするために X11 に依存していました。Wayland では、セキュリティ上の理由から画面共有は異なる方法で処理されます。PipeWire はきめ細かなアクセス制御を使用して、Wayland 上のコンテンツを共有できます。 |
||
+ | |||
+ | {{Tip|WebRTC 画面共有が機能しているかどうか、[https://mozilla.github.io/webrtc-landing/gum_test.html Mozilla の GetUserMedia WebRTX テストページ]でテストしましょう。}} |
||
+ | |||
+ | {{Note|1={{Pkg|xdg-desktop-portal}} 1.10.0 では、D-Bus インターフェースの仕様と実装の不一致が修正されました。[https://github.com/flatpak/xdg-desktop-portal/pull/609] そのため、一部のクライアントは xdg-desktop-portal 1.10.0 またはそれ以降で動作しないかもしれません。}} |
||
+ | |||
+ | Firefox (バージョン84以降) と Chromium (バージョン110以降) はデフォルトでこの方法をサポートしていますが、Chromium の古いバージョン (バージョン73以降) では、URL {{ic|chrome://flags/#enable-webrtc-pipewire-capturer}} で対応する (実験的) フラグを設定するか、CLI 引数 {{ic|1=--enable-features=WebRTCPipeWireCapturer}} を用いて、[https://bugs.chromium.org/p/chromium/issues/detail?id=682122 WebRTC PipeWire サポート] を有効化する必要があります。 |
||
+ | |||
+ | {{Pkg|obs-studio}} (バージョン27以降) は、新しい PipeWire キャプチャソースを使用することにより、この方法をサポートしています。 |
||
+ | |||
+ | === 映像 === |
||
+ | |||
+ | ソフトウェアはまだ商業利用には適していませんが、試す分には問題ありません。[[GStreamer]] を使用して映像ストリームを処理するほとんどのアプリケーションは PipeWire GStreamer プラグインを使用して設定なしで動作するはずです ([[GStreamer#PipeWire]] を参照してください)。そのため既に {{pkg|cheese}} のようなアプリケーションは PipeWire を使用して映像入力を利用できます。 |
||
+ | |||
+ | {{Pkg|pipewire-v4l2}} を使用すると、{{ic|pw-v4l2}} スクリプトを使用してライブラリをプリロードすることも可能になります ({{ic|/lib/pipewire-0.3/v4l2/libpw-v4l2.so}}) は、v4l2 呼び出しをインターセプトし、PipeWire 経由でビデオをルーティングします。 |
||
+ | |||
+ | == 音声のポストプロセッシング == |
||
+ | |||
+ | === Pipewire モジュールフィルターチェーン === |
||
+ | |||
+ | Pipewire には {{ic|[https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Filter-Chain filter-chain]}} という内部モジュールがあり、音声の入出力を処理するノードを作成することができます。参照してください。 |
||
+ | /usr/share/pipewire/filter-chain/ を参照してください。 |
||
+ | イコライザー、バーチャルサラウンドサウンド、LADSPA プラグイン、チャンネルミキシングなどの例を紹介します。 |
||
+ | |||
+ | ==== システム全体のパラメトリックイコライゼーション ==== |
||
+ | |||
+ | 設定ファイルを {{ic|.config}} フォルダにコピーします。 |
||
+ | mkdir -p ~/.config/pipewire/pipewire.conf.d |
||
+ | cp /usr/share/pipewire/filter-chain/sink-eq6.conf ~/.config/pipewire/pipewire.conf.d/ |
||
+ | 次に、{{ic|sink-eq6.conf}} を編集して、必要なパラメータを組み込みます。ヘッドフォンの場合、これらは [https://old.reddit.com/r/oratory1990/wiki/index Oratory1990 のデータベース] から入手できます。そこにリストされていない場合は、[https://github.com/jaakkopasanen/AutoEq/tree/master/results/ AutoEQ project] |
||
+ | |||
+ | プリアンプが必要な場合は、{{ic|eq_band_1}} を変更して、{{ic|bq_highshelf}} フィルタを周波数 0Hz でマイナスゲイン (-120 〜 +20dB のゲインをサポート) で適用します。 |
||
+ | label = bq_highshelf |
||
+ | control = { "Freq" = 0 "Q" = 1.0 "Gain" = -7.5 } |
||
+ | |||
+ | 6 バンドを超える場合は、{{ic|nodes}} リストと対応する {{ic|links}} にさらにエントリを追加して、1 つのフィルタ ":Out" を次のフィルタ ":In" に接続します。たとえば、11 に増やします。バンド (プリアンプ + 10): |
||
+ | { output = "eq_band_6:Out" input = "eq_band_7:In" } |
||
+ | { output = "eq_band_7:Out" input = "eq_band_8:In" } |
||
+ | { output = "eq_band_8:Out" input = "eq_band_9:In" } |
||
+ | { output = "eq_band_9:Out" input = "eq_band_10:In" } |
||
+ | { output = "eq_band_10:Out" input = "eq_band_11:In" } |
||
+ | |||
+ | Pipewire を再起動し、デフォルトのサウンド出力デバイスとして "Equalizer Sink" を選択します。これは、すべてのアプリケーションに適用されます。 |
||
+ | |||
+ | === EasyEffects === |
||
+ | |||
+ | EasyEffects (以前は PulseEffects と呼ばれていました) は多数のエフェクトとフィルタを個々の入出力ストリーム (アプリケーションの音声出力やマイクの入力など) に提供する GTK 製のユーティリティです。注目すべきエフェクトには、入出力イコライザー、出力ラウドネス等化、ベースエンハンスメント、入力ディエッサー、ノイズ抑制プラグインなどがあります。[https://github.com/wwmm/easyeffects GitHub ページ]にエフェクトの一覧があります。 |
||
+ | |||
+ | EasyEffects を使用するには、{{pkg|easyeffects}} をインストールします。プリセット設定集については、[https://github.com/wwmm/easyeffects/wiki/Community-presets コミュニティープリセット]を参照してください。 |
||
+ | |||
+ | {{Note|PulseEffects の古いバージョンについては [[PulseAudio#PulseEffects]] を参照してください。}} |
||
+ | |||
+ | === NoiseTorch === |
||
+ | |||
+ | {{aur|noisetorch}} はノイズ抑制に使用できます。ビルド済み ({{aur|noisetorch-bin}}) や開発版 ({{aur|noisetorch-git}}) のパッケージもあります。 |
||
+ | |||
+ | 起動すると選択したマイクにモジュールを読み込むことができます。声が出力される閾値を調整することができます。実際の声が削除されない最大のレベルに設定するべきです。 |
||
+ | |||
+ | === Noise suppression for voice === |
||
+ | |||
+ | {{pkg|noise-suppression-for-voice}} をインストールし、以下のいずれかのオプションを使用します: |
||
+ | |||
+ | * 以下の行を {{ic|context.exec}} セクションに追加する: |
||
+ | |||
+ | {{hc|/etc/pipewire/pipewire.conf (or ~/.config/pipewire/pipewire.conf)|output= |
||
+ | ... |
||
+ | context.exec = [ |
||
+ | ... |
||
+ | { path = "/usr/bin/pipewire" args = "-c /usr/share/pipewire/filter-chain/source-rnnoise.conf" } |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | * https://github.com/werman/noise-suppression-for-voice#pipewire に従う |
||
+ | |||
+ | そして、オーディオ設定でノイズキャンセルソースをデフォルトとして設定します。この機能を使う前に、アプリケーションを再起動する必要があるかもしれません。 |
||
+ | |||
+ | === JamesDSP === |
||
+ | |||
+ | [https://github.com/Audio4Linux/JDSP4Linux#readme JamesDSP for Linux] ({{AUR|jamesdsp}} として入手可能) は PipeWire と PulseAudio のためのオープンソースのサウンドエフェクトを提供します。LADSPA や Calf などに依存することなく、独自のエフェクトエンジンを使用しています。JamesDSP は当初 Android デバイス用のオーディオエフェクトプロセッサーとして公開されました。 |
||
+ | |||
+ | === LADSPA、LV2、VST プラグイン === |
||
+ | |||
+ | LADSPA、LV2、VSTのプラグインを使用したい場合は、カスタム PulseAudio null シンクと Carla Jack ホストを利用できます。{{pkg|pipewire-pulse}} と {{pkg|pipewire-jack}} と {{pkg|carla}} をインストールします。はじめに {{ic|default_null_sink}} という名前の PulseAudio の null シンクを作成します。 |
||
+ | |||
+ | pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR |
||
+ | |||
+ | {{ic|pw-jack carla-rack}} で PipeWire を使用する Carla を起動します。''Rack'' タブで使いたいプラグインを全て追加します。プラグインのタイプが ''stereo'' であることを確認してください。適用する順番を変えることができます。EasyEffectsのようにリストの最初のプラグインが最初に入力の音声ストリームを受け取ります。その後 ''Patchbay'' タブに移動し {{ic|default_null_sink}} の L/R monitor を Carla input に接続し、Carla output を出力したいデバイス (スピーカーやイヤホンや HDMI 出力など) の playback に接続します。設定をフォルダに保存します ({{ic|~/Documents/carla_sink_effects.carxp}} など)。 |
||
+ | |||
+ | Firefox で動画を見ている時など、アプリケーションが音声を再生している時に効果を試すことができます。2つの方法があります。一つは Carla の ''Patchbay'' タブで Firefox の接続を全て外し {{ic|default_null_sink}} の L/R output に接続する方法です。もう一つは {{pkg|pavucontrol}} を使用し Firefox の音声ストリームを {{ic|default_null_sink}} に変更する方法です (この方法は同じアプリケーションの次回起動時に同じ接続先を使用するはずです)。 |
||
+ | |||
+ | これらの設定を起動時に適用するには、まず2つの systemd ユーザーサービスを作成します: |
||
+ | |||
+ | {{hc|~/.config/systemd/user/jack-carla-rack.service|output= |
||
+ | [Unit] |
||
+ | Description=Load Carla Rack JACK host |
||
+ | |||
+ | [Service] |
||
+ | PassEnvironment="PIPEWIRE_LINK_PASSIVE=true" |
||
+ | Type=exec |
||
+ | ExecStart=/usr/bin/pw-jack carla-rack -n |
||
+ | |||
+ | [Install] |
||
+ | WantedBy=default.target |
||
+ | }} |
||
+ | {{hc|~/.config/systemd/user/pulseaudio-null-sink@.service|output= |
||
+ | [Unit] |
||
+ | Description=Load %i Pulseaudio null sink |
||
+ | Before=jack-carla-rack.service |
||
+ | After=pipewire-pulse.service |
||
+ | |||
+ | [Service] |
||
+ | Type=oneshot |
||
+ | ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR |
||
+ | ExecStop=/usr/bin/pactl unload-module module-null-sink |
||
+ | RemainAfterExit=yes |
||
+ | |||
+ | [Install] |
||
+ | WantedBy=default.target |
||
+ | }} |
||
+ | |||
+ | ''jack-carla-rack'' サービスの ''Environment'' を Carla の設定ファイルのフルパスを指定するよう上書きします: |
||
+ | |||
+ | {{hc|~/.config/systemd/user/jack-carla-rack.service.d/override.conf|output= |
||
+ | Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp" |
||
+ | ExecStart= |
||
+ | ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE |
||
+ | }} |
||
+ | 最後に、作成したサービスを有効化します。''pulseaudio-null-sink'' サービスには {{ic|default_null_sink}} 引数をつけてください: |
||
− | PipeWire で PulseEffects を使用するには、{{Pkg|pulseeffects}} または {{AUR|pulseeffects-git}} をインストールします。 |
||
+ | systemctl --user enable pulseaudio-null-sink@default_null_sink.service |
||
− | {{Note|これにより、 {{Pkg|pipewire-pulse}} と [[#PulseAudio clients|PulseAudio を PipeWire に置き換えて]] インストールされます。詳細は、 {{Bug|69437}} を参照してください。レガシーバージョンについては、 [[PulseAudio#PulseEffects]] を参照してください。}} |
||
+ | systemctl --user enable jack-carla-rack.service |
||
+ | {{Note|システム設定で {{ic|default_null_sink}} をデフォルトデバイスに設定すると、全てのアプリケーションが {{ic|default_null_sink}} にリダイレクトされ、音量の変更がスピーカーではなく {{ic|default_null_sink}} に対して行われるようになります。スピーカーの音量を変更したい場合は、デフォルトデバイスをスピーカーから変更せずにアプリケーションの出力先を pavucontrol で {{ic|default_null_sink}} に変更してください (PipeWire の互換性レイヤーは次回起動時も出力先を覚えています)。}} |
||
− | プリセット設定のコレクションについては、[https://github.com/wwmm/pulseeffects/wiki/Community-presets Community Presets] を参照してください。 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
− | === PipeWire によってマイクが検出されません=== |
||
+ | === オーディオ === |
||
− | PipeWire の {{ic|alsa-monitor}} モジュールは、デフォルトで {{pkg|alsa-card-profiles}} を使用してデバイスを検出します。これでうまくいかない場合は、 {{ic|api.alsa.use-acp}} をオフにするか、 {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}} の {{ic|rules}}->最初のルール->{{ic|actions}}->{{ic|update-props}} の下でオプションとして {{ic|api.alsa.use-ucm}} をオンにしてみてください。 |
||
+ | ==== PipeWire にマイクが検出されない ==== |
||
− | ... |
||
+ | |||
− | update-props = { |
||
+ | PipeWire の {{ic|alsa-monitor}} モジュールは、デフォルトで {{Pkg|alsa-card-profiles}} を使ってデバイスを検出します。これがうまくいかない場合は、{{ic|api.alsa.use-acp}} をオフにするか、オプションで {{ic|api.alsa.use-ucm}} をオンにすることを試してみてください。 |
||
− | api.alsa.use-acp = false |
||
+ | |||
− | ... |
||
+ | {{Pkg|pipewire-media-session}} を使用している場合。 |
||
+ | {{hc|/etc/pipewire/media-session.d/alsa-monitor.conf (or ~/.config/pipewire/media-session.d/alsa-monitor.conf)|output= |
||
+ | ... |
||
+ | rules = [ |
||
+ | { |
||
+ | ... |
||
+ | actions = { |
||
+ | update-props = { |
||
+ | ... |
||
+ | api.alsa.use-acp = false |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | それ以外の場合は、{{Pkg|wireplumber}} を使用している場合。 |
||
+ | {{hc|/etc/wireplumber/main.lua.d/50-alsa-config.lua (or ~/.config/wireplumber/main.lua.d/50-alsa-config.lua)|output= |
||
+ | ... |
||
+ | alsa_monitor.rules = { |
||
+ | { |
||
+ | ... |
||
+ | apply_properties = { |
||
+ | -- Use ALSA-Card-Profile devices. They use UCM or the profile |
||
+ | -- configuration to configure the device and mixer settings. |
||
+ | -- ["api.alsa.use-acp"] = true, |
||
+ | |||
+ | -- Use UCM instead of profile when available. Can be |
||
+ | -- disabled to skip trying to use the UCM profile. |
||
+ | ["api.alsa.use-ucm"] = true, |
||
+ | ... |
||
+ | }} |
||
− | + | その後、pipewire を再起動し、利用可能なデバイスを確認します。 |
|
− | {{hc|1= |
+ | {{hc| 1= |
$ pw-record --list-targets |
$ pw-record --list-targets |
||
|2= |
|2= |
||
127行目: | 555行目: | ||
}} |
}} |
||
− | === |
+ | ==== 新しいデバイスを接続したときにサウンドが自動的に切り替わらない ==== |
+ | 新しく接続されたデバイスに自動的に切り替えるには、次のファイルを作成します。: |
||
− | 2020-12-07 の時点で、Bluetooth デバイスを接続しても音が出ない場合は、デフォルトのシンクに切り替えるか、シンク入力を正しいシンクに移動する必要があります。 {{ic|pactl list sinks}} を使用して使用可能なシンクを一覧表示し、{{ic|pactl set-default-sink}} を使用してデフォルトのシンクを Bluetooth デバイスに切り替えます。これは [https://gist.github.com/tinywrkb/04e7fd644afa9b92d33a3a99ab07ee9e この1] のようなスクリプトを使って [[udev]] で自動化できます。 |
||
+ | {{hc|/etc/pipewire/pipewire-pulse.conf.d/switch-on-connect.conf (or ~/.config/pipewire/pipewire-pulse.conf.d/switch-on-connect.conf)|output= |
||
− | この問題については、この [https://www.reddit.com/r/archlinux/comments/jydd02/pipewirepulse_03164_in_testing_now_replaces/gd3m7fu/?context=3 Redditスレッド] を参照してください。スクリプトの作成者によると、ヘッドセットプロファイル (HSP) にまだ問題がある可能性があります。 |
||
+ | # override for pipewire-pulse.conf file |
||
+ | pulse.cmd = [ |
||
+ | { cmd = "load-module" args = "module-always-sink" flags = [ ] } |
||
+ | { cmd = "load-module" args = "module-switch-on-connect" } |
||
+ | ] |
||
+ | }} |
||
+ | |||
+ | ==== サウンドが自動的に Bluetooth ヘッドフォンに切り替わらない ==== |
||
+ | |||
+ | {{ic|pactl load-module module-switch-on-connect}} を実行し、ログイン時に自動的にそのコマンドが実行されるようにデスクトップ環境を設定してください。詳しくは [https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/89 wireplumber issue #89] を見てください。 |
||
+ | |||
+ | ==== Bluetooth デバイスに接続しても音が出ない ==== |
||
+ | |||
+ | 2020-12-07 の時点で、Bluetooth デバイスを接続しても音が出ない場合は、デフォルトのシンクに切り替えるか、シンク入力を正しいシンクに移動する必要があります。{{ic|pactl list sinks}} で使用可能なシンクの一覧を表示し、{{ic|pactl set-default-sink}} でデフォルトのシンクを Bluetooth デバイスに切り替えます。これは[https://gist.github.com/tinywrkb/04e7fd644afa9b92d33a3a99ab07ee9e このようなスクリプト]を使って [[udev]] で自動化できます。 |
||
+ | |||
+ | この問題については、この [https://www.reddit.com/r/archlinux/comments/jydd02/pipewirepulse_03164_in_testing_now_replaces/gd3m7fu/?context=3 Reddit スレッド]を参照してください。スクリプトの作成者によると、ヘッドセットプロファイル (HSP) にまだ問題がある可能性があります。 |
||
− | === 音量が小さい === |
+ | ==== 音量が小さい ==== |
− | PulseAudio を |
+ | PulseAudio を PipeWire で置き換えた後、正しく音が出ても、再起動後に音量が極端に小さくなることがあります。 |
− | {{ic|alsamixer}} を開き、{{ic|F6}} を |
+ | {{ic|alsamixer}} を開き、{{ic|F6}} を押して適切なサウンドカードを選び ALSA のボリュームが100%であることを確認してください。{{ic|alsactl}} は再起動後もこの設定を維持するはずです。 |
− | === RLIMIT_MEMLOCK |
+ | ==== increasing RLIMIT_MEMLOCK ==== |
− | + | Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK |
|
− | {{pkg|realtime-privileges}} をインストールし |
+ | {{pkg|realtime-privileges}} をインストールし {{ic|realtime}} グループに自分のユーザーを追加します。 |
− | あるいは |
+ | あるいは memlock を 64kB から 128kB に増やすことで、この問題を解決できるようです。[[systemd/ユーザー]] で {{ic|pipewire-pulse}} を実行している場合は {{ic|/etc/security/limits.d/username.conf}} に次の行を追加します: |
username soft memlock 64 |
username soft memlock 64 |
||
username hard memlock 128 |
username hard memlock 128 |
||
+ | ==== サンプリングレートを変更する ==== |
||
− | === 再接続後に外付けサウンドカードがアクティブにならない === |
||
+ | PipeWire のデフォルトでは、グローバルサンプルレートは 48kHz に設定されています。これを変更したい場合(より高い値をサポートする DAC を所有しているなど)、設定ファイル {{ic|/etc/pipewire/pipewire.conf}} の {{ic|1=default.clock.rate = 48000}} 行を編集することで行うことができます。例えば、192kHz にしたい場合は、{{ic|48000}} を {{ic|1=default.clock.rate = 192000}} にコメントを解除して変更します。 |
||
− | {{ic|~/.config/pipewire-media-session/default-profile}} にデフォルトプロファイル ''オフ'' のエントリがあるかどうかを確認し、削除します。それでも解決しない場合は、 {{ic|~/.config/pipewire-media-session/}} からすべてのファイルを削除し、 {{ic|systemctl--user restart pipewire.service}} を使用して PipeWire を再起動します。 |
||
+ | PipeWire は、DAC がサポートする出力サンプルレートを変更することもできます。設定するには、{{ic|1=default.clock.allowed-rates = [ 48000 ]}} という行をコメント解除して設定します。例えば、{{ic|[ 44100 48000 88200 96000 ]}} とします。サンプルレートは、カードがアイドルのときに再生されるオーディオストリームのサンプルレートに従います。 |
||
− | === No Sound または pactl info show Failure:Connection refused === |
||
− | これは、アプリケーションが PipeWire-Pulse サービスに接続できず、{{ic|/etc/pipewire/pipewire-pulse.conf}} が存在し空でないことを確認し、 {{ic|systemctl--user restart pipewire-pulse.service}} を使用して PipeWire-Pulse を再起動して下さい。 |
||
+ | どの出力サンプルレートとサンプルフォーマットが DAC に送られたデータであるかを確認するには(おそらく桁を変更する必要があります)。 |
||
− | それでも解決しない場合は、 {{ic|strace-f-o/tmp/pipe.txt pactl情報}} と pastebin {{ic|/tmp/pipe.txt}} を実行し、IRC (Freenode '''#pipewire''') かメーリングリストでヘルプを探してください。 |
||
+ | cat /proc/asound/card0/pcm0p/sub0/hw_params |
||
+ | どの入力サンプルレートを使用しているかを確認するには、{{ic|pcm0p}} を {{ic|pcm0c}} に変更します。({{ic|c}} は "capture" の略、{{ic|p}} は "playback" の略です). |
||
+ | ==== 許容されるサンプルレートの変更 ==== |
||
− | === Bluetooth のオーディオ品質が低い=== |
||
+ | |||
+ | PipeWire は、DAC がサポートする出力サンプルレートを動的に変更することもできます。サンプルレートは、再生中のオーディオストリームのサンプルレートに従います。 |
||
+ | |||
+ | {{hc|/etc/pipewire/pipewire.conf (or ~/.config/pipewire/pipewire.conf)|output= |
||
+ | ... |
||
+ | context.properties = { |
||
+ | ... |
||
+ | '''default.clock.allowed-rates = [ ''sample_rate_1'' ''sample_rate_2'' ''sample_rate_3'' ... ]''' |
||
+ | ... |
||
+ | }} |
||
+ | たとえば、{{ic|[ 44100 48000 88200 96000 ]}} です。DAC でサポートされている値については、ハードウェアのマニュアルを参照してください。 |
||
+ | |||
+ | 開発者の [https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1523] によると: "PipeWire は最大16の異なるサンプルレートを許容し、可能な限り切り替えます。" つまり、上記の設定では、'''再サンプリングは行われない'''ということです。 |
||
+ | |||
+ | DAC に送信されるデータがどの出力サンプルレートとサンプルフォーマットであるかを確認するには (おそらく桁を変更する必要があります): |
||
+ | |||
+ | $ cat /proc/asound/card0/pcm0p/sub0/hw_params |
||
+ | |||
+ | どの入力サンプルレートが使用されているかを確認するには、{{ic|pcm0p}} を {{ic|pcm0c}} に変更します ({{ic|c}} は "capture" の略で、{{ic|p}} は "playback" の略です) |
||
+ | |||
+ | ==== 音質 (リサンプリング品質) ==== |
||
+ | |||
+ | PulseAudio を {{ic|1=resample-method = speex-float-10}} または {{ic|soxr-vhq}} で使用していた場合、コメントを解除して {{ic|1=resample.XXX}} を変更することを検討するとよいかもしれません。{{ic|1=resample.quality = 4}} を {{ic|10}} または最大値 {{ic|15}} に変更することを検討してください。(存在しない場合は {{ic|/usr/share/pipewire/}} からコピーしてください)。PipeWire の再起動を忘れないでください (sudo なし): {{ic|systemctl --user restart pipewire.service pipewire-pulse.socket}} (設定変更を適用させたい場合は、{{ic|pipewire-pulse.socket}}を絶対に忘れないでください)。 |
||
+ | |||
+ | {{ic|10}} と {{ic|15}} では、品質の差はほとんどありませんが、CPU 負荷は 2〜3 倍になっています。また、{{ic|4}}, {{ic|10}}, {{ic|15}} のレイテンシーの差はまだ誰も調べていません。Ryzen 2600 で 44100→48000Hz で {{ic|1= resample.quality = 15}} にすると {{ic|pipewire}} や {{ic|pipewire-pulse}} プロセスが 1CPUコア4.0% の負荷となる。 |
||
+ | |||
+ | リサンプラーの比較はこちら:https://src.infinitewave.ca/(18KHz以上、120dB以上は注意)。speeex は ''Xiph.org Speex'' と記載されています。 |
||
+ | |||
+ | PipeWire は Spa と呼ばれる独自のリサンプリングアルゴリズムを使用しています。SoX の {{ic|sox}}、Speex の {{ic|speexenc}} と同様、PipeWire にはそのスタンドアロン版があります。{{ic|spa-resample}} 使い方は |
||
+ | spa-resample -q 15 -f s24 -r 48000 input16bit44100orAnythingElse.wav output24bit48000hz.wav |
||
+ | |||
+ | 自分で sink を作れば、他のリサンプラーを使うことも可能でしょう。あるいは、音楽プレーヤーのプラグインを使うこともできます(例えば、Qmmp には SoX プラグインがあります) |
||
+ | |||
+ | ==== 外付けサウンドカードが再接続後に有効にならない ==== |
||
+ | |||
+ | {{ic|~/.config/pipewire-media-session/default-profile}} にデフォルトプロファイル ''off'' のエントリがあれば削除します。それでも解決しない場合は {{ic|~/.config/pipewire-media-session/}} からすべてのファイルを削除し、{{ic|systemctl --user restart pipewire.service}} で PipeWire を再起動します。 |
||
+ | |||
+ | ==== 音が出ないまたは pactl info が Failure: Connection refused と表示する ==== |
||
+ | |||
+ | これはアプリケーションが PipeWire-Pulse サービスに接続できていないことを意味します。{{ic|/etc/pipewire/pipewire-pulse.conf}} が存在し空でないことを確認し、{{ic|systemctl --user restart pipewire-pulse.service}} で PipeWire-Pulse を再起動してください。 |
||
+ | |||
+ | それでも解決しない場合は {{ic|strace -f -o /tmp/pipe.txt pactl info}} を実行し、pastebin に {{ic|/tmp/pipe.txt}} を貼り付けて、IRC (OFTC の [ircs://irc.oftc.net/pipewire #pipewire]) かメーリングリストで相談してください。 |
||
+ | |||
+ | ==== Bluetooth の音声の品質が低い==== |
||
+ | |||
+ | Bluetooth で再生が途切れる場合は {{ic|systemctl --user status pipewire.service}} を実行してみてください。次のようなエラーが表示される場合は、 |
||
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered |
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered |
||
− | + | {{ic|pactl list sinks}} で現在選択されているコーデックを確認し、{{ic|/etc/pipewire/media-session.d/bluez-monitor.conf}} の {{ic|bluez5.codecs}} を {{ic|sbc aac ldac aptx aptx_hd}} のいずれかに変更してみてください。 |
|
− | {{hc| |
+ | {{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output= |
... |
... |
||
properties = { |
properties = { |
||
... |
... |
||
bluez5.codecs = [sbc] |
bluez5.codecs = [sbc] |
||
− | ... |
+ | ... |
+ | }} |
||
+ | mSBC サポートの有効化を試すには (Sony 1000XM3 のマイクの問題を修正します): |
||
− | === PipeWire の更新と再起動後 (git/>=0.3.23) デバイスが検出されません=== |
||
+ | {{hc|/etc/pipewire/media-session.d/bluez-monitor.conf|output= |
||
− | commit 012a68f8[https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/012a68f8ef33705f1a40ec8ac294b8cce7f6aa88] の時点で、新しい systemd サービスが追加され、デフォルトでは無効になっています。これは、システムリブート時に {{ic|pipewire-media-session}} が実行されないことを意味します。サービスの実行を有効にするには、次の手順に従います。 {{ic|systemctl--user enable--now pipewire-media-session.service}} |
||
+ | ... |
||
+ | rules = [ |
||
+ | ... |
||
+ | actions = { |
||
+ | ... |
||
+ | update-props = { |
||
+ | ... |
||
+ | bluez5.msbc-support = true |
||
+ | ... |
||
+ | }} |
||
+ | 変更を適用するには {{ic|systemctl --user restart pipewire.service}} で PipeWire を再起動する必要があります。 |
||
− | ユーザーまたはパッケージマネージャが更新後に構成ファイルの変更をソートしていない場合、 pipewire.service で {{ic|pipewire-media-session}} の別のインスタンスが実行されている可能性があります。実行をチェックしてください :{{ic|systemctl --user status pipewire.service}} |
||
+ | ==== 再生開始時に明らかな音声の遅延やポップノイズ/音割れが発生する ==== |
||
− | 実行中の pipewire および pipewire-media-session が表示される場合は、システムまたはユーザ設定、あるいはその両方を更新します。 |
||
+ | これは、非アクティブ時のノードの一時停止が原因です。 |
||
− | {{hc|head=/etc/pipewire/pipewire.conf および/または ~/.config/pipewire/pipewire.conf|output= |
||
+ | |||
− | context.exec = { |
||
+ | {{pkg|pipiwire-media-session}} を使用: |
||
+ | |||
+ | これを無効にするには、遅延が発生する場所に応じて {{ic|/etc/pipewire/media-session.d/*-monitor.conf}} を編集し、プロパティ {{ic|session.suspend-timeout-seconds}} を 0 に変更します。無効にするか、他の値を試して、何が機能するかを確認します。 |
||
+ | |||
+ | または、{{ic|/etc/pipewire/media-session.d/media-session.conf}} の行 {{ic|suspend-node}} をコメントアウトすることもできます。 |
||
+ | |||
+ | [[再起動]] して {{ic|pipewire.service}} と {{ic|pipewire-pulse.service}} の両方の変更を適用して下さい。 |
||
+ | |||
+ | {{pkg|wireplumber}} で、新しいファイルを作成してデフォルト設定を上書きします: |
||
+ | |||
+ | {{hc|~/.config/wireplumber/main.lua.d/51-disable-suspension.lua |
||
+ | (or /etc/wireplumber/main.lua.d/51-disable-suspension.lua)|2= |
||
+ | table.insert (alsa_monitor.rules, { |
||
+ | matches = { |
||
+ | { |
||
+ | -- Matches all sources. |
||
+ | { "node.name", "matches", "alsa_input.*" }, |
||
+ | }, |
||
+ | { |
||
+ | -- Matches all sinks. |
||
+ | { "node.name", "matches", "alsa_output.*" }, |
||
+ | }, |
||
+ | }, |
||
+ | apply_properties = { |
||
+ | ["session.suspend-timeout-seconds"] = 0, -- 0 disables suspend |
||
+ | }, |
||
+ | }) |
||
+ | }} |
||
+ | |||
+ | Bluetooth デバイスの場合は、次の設定も使用します (ファイルの場所が異なることに注意してください): |
||
+ | |||
+ | {{hc|~/.config/wireplumber/bluetooth.lua.d/51-disable-suspension.lua |
||
+ | (or /etc/wireplumber/bluetooth.lua.d/51-disable-suspension.lua)|2= |
||
+ | -- Note: bluez_monitor, not alsa_monitor |
||
+ | table.insert (bluez_monitor.rules, { |
||
+ | matches = { |
||
+ | { |
||
+ | -- Matches all sources. |
||
+ | -- Note: bluez_input, not alsa_input |
||
+ | { "node.name", "matches", "bluez_input.*" }, |
||
+ | }, |
||
+ | { |
||
+ | -- Matches all sinks. |
||
+ | -- Note: bluez_output, not alsa_output |
||
+ | { "node.name", "matches", "bluez_output.*" }, |
||
+ | }, |
||
+ | }, |
||
+ | apply_properties = { |
||
+ | ["session.suspend-timeout-seconds"] = 0, -- 0 disables suspend |
||
+ | }, |
||
+ | }) |
||
+ | }} |
||
+ | |||
+ | {{ic|pipewire.service}} と {{ic|wireplumber.service}} を再起動して、変更を適用します。 |
||
+ | |||
+ | サスペンドを完全に無効にする代わりに、タイムアウト値を、ソースがサスペンドされるまでに必要な遅延秒数に変更することもできます。 |
||
+ | |||
+ | ==== 複数のストリームの再生が開始されると音声が途切れる ==== |
||
+ | |||
+ | この問題は通常、{{ic|pipewire-pulse.service}} [[systemd/ユーザー|ユーザーユニット]] の [[journal]] を読み取り、次のような行を見つけることで診断できます。 |
||
+ | |||
+ | pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940 |
||
+ | |||
+ | [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors 公式 PipeWire トラブルシューティングガイド] によると、{{pkg|pipewire-media-session}} のこの問題を解決するには: |
||
+ | |||
+ | {{hc|/etc/pipewire/media-session.d/alsa-monitor.conf (or ~/.config/pipewire/media-session.d/alsa-monitor.conf|2= |
||
+ | api.alsa.headroom = 1024 |
||
+ | }} |
||
+ | |||
+ | {{pkg|wireplumber}} を使用する場合: |
||
+ | |||
+ | {{hc|/etc/wireplumber/main.lua.d/50-alsa-config.lua (or ~/.config/wireplumber/main.lua.d/50-alsa-config.lua)|2= |
||
+ | apply_properties = { |
||
+ | ["api.alsa.headroom"] = 1024, |
||
+ | }, |
||
+ | }} |
||
+ | |||
+ | カーネルページのロックやスケジューリングの遅延が原因で音声の途切れが発生する場合は、[[ゲーム#カーネルパラメータを調整して応答時間を安定化させる|カーネルパラメータを調整して応答時間を安定化させる]] を参照してください。 |
||
+ | |||
+ | ==== 音がひずむ ==== |
||
+ | * マイクについては、{{ic|alsamixer}} を起動し、問題があるサウンドカードを選択し、{{ic|Mic Boost}} や {{ic|Internal Mic Boost}} の値を下げてみてください。 |
||
+ | * {{ic|/etc/pipewire/pipewire.conf}} の {{ic|1=default.clock.rate = 48000}} のコメントを外して、値を {{ic|44100}} に下げてみてください。 |
||
+ | |||
+ | ==== スタンバイ後に音声の問題が発生する ==== |
||
+ | |||
+ | スリープから復帰した際に音が消えたり壊れたりする場合は、ALSA を最初期化すると改善するかもしれません: |
||
+ | |||
+ | # alsactl init |
||
+ | |||
+ | ==== USB DAC(例:Schiit 社製 DAC)で高レイテンシー ==== |
||
+ | |||
+ | サンプルレートやフォーマットを変更することで、Schiit Hel 2 などの一部の DAC でレイテンシーを減らすことができるかもしれません [https://www.reddit.com/r/osugame/comments/msifdd/usb_dacamp_and_audio_lag/] ''pipewire-media-session'' のマッチングルールを使用すると、デバイスのプロパティを設定することができます [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Config-pipewire-media-session#matching-rules] |
||
+ | ''pipewire-media-session'' の {{ic|alsa-monitor.conf}} のデフォルト設定を {{ic|/etc/pipewire/media-session.d}} か {{ic|~/.config/pipewire/media-session.d}} にコピーしてください。 |
||
+ | そして、以下のような新しいルールブロックを追加してください。 |
||
+ | |||
+ | {{hc|/etc/pipewire/media-session.d/alsa-monitor.conf |
||
+ | ~/.config/pipewire/media-session.d/alsa-monitor.conf|output= |
||
+ | rules = { |
||
+ | ... |
||
+ | { |
||
+ | matches = [ |
||
+ | { |
||
+ | node.name = "alsa_output.<name of node>" |
||
+ | } |
||
+ | ] |
||
+ | actions = { |
||
+ | update-props = { |
||
+ | audio.format = "S24_3LE" |
||
+ | audio.rate = 96000 |
||
+ | # Following value should be doubled until audio doesn't cut out or other issues stop occurring |
||
+ | api.alsa.period-size = 128 |
||
+ | } |
||
+ | } |
||
+ | } |
||
+ | ... |
||
+ | } |
||
+ | }} |
||
+ | |||
+ | {{ic|alsa_output.<node name>}} ノードは {{ic|pw-top}} で取得することができます。 |
||
+ | |||
+ | DAC は異なるフォーマットやサンプルレートをサポートしているかもしれません。[[ALSA]] に問い合わせることで、あなたの DAC が何をサポートしているかを確認することができます。 |
||
+ | |||
+ | まず、DAC のカード番号を取得します。 |
||
+ | |||
+ | {{hc|$ aplay -l| |
||
+ | ... |
||
+ | card 3: S2 [Schiit Hel 2], device 0: USB Audio [USB Audio] |
||
+ | Subdevices: 0/1 |
||
+ | Subdevice #0: subdevice #0 |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | つまり、この例ではカード3ということになります。 |
||
+ | サポートされているすべてのサンプルレートとフォーマットを取得します。 |
||
+ | |||
+ | {{hc|$ cat /proc/asound/cardX/streamX| |
||
+ | ... |
||
+ | Playback: |
||
... |
... |
||
+ | Interface 1 |
||
− | # 以下の行はコメントアウトする必要があります |
||
+ | Altset 1 |
||
− | #"/usr/bin/pipewire-media-session" = { args = "" } |
||
+ | Format: S16_LE |
||
+ | Channels: 2 |
||
+ | Endpoint: 0x05 (5 OUT) (ASYNC) |
||
+ | Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 |
||
+ | Data packet interval: 125 us |
||
+ | Bits: 16 |
||
+ | ... |
||
+ | Interface 1 |
||
+ | Altset 2 |
||
+ | Format: S24_3LE |
||
+ | Channels: 2 |
||
+ | Endpoint: 0x05 (5 OUT) (ASYNC) |
||
+ | Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 |
||
+ | Data packet interval: 125 us |
||
+ | Bits: 24 |
||
+ | ... |
||
+ | Interface 1 |
||
+ | Altset 3 |
||
+ | Format: S32_LE |
||
+ | Channels: 2 |
||
+ | Endpoint: 0x05 (5 OUT) (ASYNC) |
||
+ | Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 |
||
+ | Data packet interval: 125 us |
||
+ | Bits: 32 |
||
+ | ... |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | この場合、{{ic|S16_LE, S24_3LE, S32_LE}} はサポートされているフォーマットで、{{ic|44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000}} はすべてのフォーマットでサポートされているサンプルレートとなります。 |
||
+ | |||
+ | ==== 音量が 30% になるまで USB DAC から音が出ない ==== |
||
+ | |||
+ | USB DAC の中には、ある一定の音量に達するまで音が出なくなるものがあります [https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1117] 一般的にこれは約 25%〜30% で、最初の音量が不快なほど大きくなり、低い音量を維持することができなくなります。解決策としては、{{ic|["api.alsa.soft-mixer"]}} を {{ic|true}} に設定して、ハードウェアミキサーの音量コントロールを無視することが挙げられます。 |
||
+ | |||
+ | {{Pkg|wireplumber}} でこれを実現するには、{{ic|/usr/share/wireplumber/main.lua.d/50-alsa-config.lua}} 設定に次を使用して構成フラグメントを追加します。 {{ic|table.insert}}: |
||
+ | |||
+ | {{hc|~/.config/wireplumber/main.lua.d/51-volume-fix.lua|output= |
||
+ | |||
+ | table.insert (alsa_monitor.rules, { |
||
+ | matches = { |
||
+ | { |
||
+ | -- This matches all cards. |
||
+ | { "device.name", "matches", "alsa_card.*" }, |
||
+ | }, |
||
+ | }, |
||
+ | -- Apply properties on the matched object. |
||
+ | apply_properties = { |
||
+ | -- Don't use the hardware mixer for volume control. It |
||
+ | -- will only use software volume. The mixer is still used |
||
+ | -- to mute unused paths based on the selected port. |
||
+ | ["api.alsa.soft-mixer"] = true, |
||
+ | } |
||
+ | }) |
||
+ | }} |
||
+ | |||
+ | 次に、pipewire を再起動します。{{ic|alsamixer}} でマスターボリュームを設定し、{{ic|# alsactl store}} で設定を保存します。これで、ボリュームミキサーを通常どおり使用できるようになります。 |
||
+ | |||
+ | ==== リアルタイムオーディオが動作しない ==== |
||
+ | |||
+ | {{ic|RTKit error: org.freedesktop.DBus.Error.AccessDenied}} が {{ic|systemctl --user status pipewire.service}} の出力に表示された場合、pipewire daemon の優先度がリアルタイムに変更されていないことを示します。この問題については、[https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1069] を参照してください。 |
||
+ | |||
+ | ==== 同じサウンドカード上の複数のシンクへの同時出力 ==== |
||
+ | |||
+ | {{ic|/usr/share/alsa-card-profile/mixer/profile-sets/default.conf}} のコピーを作成し、アップデート後も変更が持続するようにします。ここでは、アナログと HDMI の2つのデフォルトマッピングを結合したプロファイルを定義しています。 |
||
+ | |||
+ | {{hc|/usr/share/alsa-card-profile/mixer/profile-sets/multiple.conf|2= |
||
+ | [General] |
||
+ | auto-profiles = no |
||
+ | |||
+ | [Mapping analog-stereo] |
||
+ | device-strings = front:%f |
||
+ | channel-map = left,right |
||
+ | paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 |
||
+ | paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic |
||
+ | priority = 15 |
||
+ | |||
+ | [Mapping hdmi-stereo] |
||
+ | description = Digital Stereo (HDMI) |
||
+ | device-strings = hdmi:%f |
||
+ | paths-output = hdmi-output-0 |
||
+ | channel-map = left,right |
||
+ | priority = 9 |
||
+ | direction = output |
||
+ | |||
+ | [Profile multiple] |
||
+ | description = Analog Stereo Duplex + Digital Stereo (HDMI) Output |
||
+ | output-mappings = analog-stereo hdmi-stereo |
||
+ | input-mappings = analog-stereo |
||
+ | }} |
||
+ | |||
+ | ここで、PipeWire の media-session に、新しい card-profile を使用してデバイスをマッチングするように設定します。識別情報は、{{ic|$ pw-cli dump device}} で見つけることができます。 |
||
+ | |||
+ | {{hc|/etc/pipewire/media-session.d/alsa-monitor.conf|2= |
||
+ | rules = [ |
||
+ | { |
||
+ | matches = [ { alsa.card_name = "HDA Intel PCH" } ] |
||
+ | actions = { |
||
+ | update-props = { |
||
+ | api.alsa.use-acp = true |
||
+ | device.profile-set = "multiple.conf" |
||
+ | device.profile = "multiple" |
||
+ | api.acp.auto-profile = false |
||
+ | api.acp.auto-port = false |
||
+ | } |
||
+ | } |
||
+ | } |
||
+ | ] |
||
+ | }} |
||
+ | |||
+ | ==== Discord から通知音が鳴らない ==== |
||
+ | |||
+ | min.quantum が低すぎることが原因かもしれませんので、700以上に設定してみてください。pipewire-pulse.conf の pulse.rules セクションに以下のルールを追加することで、Discord 専用にオーバーライドすることが可能です。 |
||
+ | |||
+ | {{hc|/etc/pipewire/pipewire-pulse.conf (or ~/.config/pipewire/pipewire-pulse.conf)|output= |
||
+ | ... |
||
+ | pulse.rules = [ |
||
... |
... |
||
+ | { |
||
− | } |
||
+ | # Discord notification sounds fix |
||
+ | matches = [ { application.process.binary = "Discord" } ] |
||
+ | actions = { |
||
+ | update-props = { |
||
+ | pulse.min.quantum = 1024/48000 # 21ms |
||
+ | } |
||
+ | } |
||
+ | } |
||
+ | ... |
||
}} |
}} |
||
− | === |
+ | ==== PipeWire で FMOD ゲームがクラッシュする ==== |
+ | [[Wikipedia:Pillars_of_Eternity|Pillars of Eternity]] のような古いバージョンの [[Wikipedia:FMOD|FMOD オーディオエンジン]] を使っているゲームの中には、PulseAudio バイナリが存在しないと {{ic|pulseaudio --check}} を呼び出してクラッシュするものがあります。回避策としては、{{ic|/bin/pulseaudio}}を{{ic|/bin/true}}にシンボリックリンクすることです[https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1514] |
||
− | これは、非アクティブ時のノードの中断が原因です。これを修正するには、遅延が発生する場所に応じて {{ic|/etc/pipewire/media-session.d/*-monitor.conf}} を編集し、プロパティ {{ic|session.suspend-timeout-seconds}} を 0 に変更して無効にするか、他の値を試して動作を確認します。あるいは、 {{ic|/etc/pipewire/media-session.conf}} の行 {{ic|suspend-node}} をコメントアウトすることもできます。 {{ic|pipewire}} および {{ic|pipewire-pulse}} systemd サービスの両方を再起動してこれらの変更を適用するか、または再起動します。 |
||
+ | # ln -s /bin/true /bin/pulseaudio |
||
− | === 複数のストリームの再生開始時にオーディオがカットアウトされる === |
||
+ | PulseAudio を再インストールする場合は、シンボリックリンクを削除する必要があることに注意してください。 |
||
− | この問題は通常、 {{ic|journalctl -b | grep -i pipewire}} を実行し、次のような行を検索することで診断できます。 |
||
+ | ==== 自動切り替えが機能しない ==== |
||
− | pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940 |
||
+ | |||
+ | 自動切り替えが機能しない場合、[[WirePlumber]] の状態に問題がある可能性があります。[https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/191#note_1252549 this comment] が提案しているように、[[WirePlumber]] のローカル状態を削除し、デーモンを再起動することで改善されるかどうか確認することができます。 |
||
+ | |||
+ | $ rm -r ~/.local/state/wireplumber/ |
||
+ | |||
+ | 次に、{{ic|wireplumber.service}} [[systemd/ユーザー|ユーザーユニット]] を [[ヘルプ:読み方# systemd ユニットのコントロール|再起動]] します。 |
||
+ | |||
+ | ==== リアルタイムプライオリティの欠落/サスペンド後の負荷によるクラックリング ==== |
||
+ | |||
+ | rtkit の [https://github.com/heftig/rtkit/issues/13 2011年] からのバグにより、サスペンドイベントが発生すると PipeWire のリアルタイム優先度が取り消され、元に戻らなくなります。この原因となる保護を無効にするには、{{ic|rtkit-daemon.service}} を [[編集]] してください: |
||
+ | |||
+ | {{hc|/etc/systemd/system/rtkit-daemon.service.d/override.conf|2= |
||
+ | [Service] |
||
+ | ExecStart= |
||
+ | ExecStart=/usr/lib/rtkit-daemon --no-canary |
||
+ | }} |
||
+ | |||
+ | 次に、メディアセッションサービスとともに、{{ic|rtkit-daemon.service}} ユニットと {{ic|pipewire.service}} ユーザー ユニットを再起動します。 |
||
+ | |||
+ | ==== RAOP デバイス (Sonos など) へのストリーミング中に音が出ない ==== |
||
+ | |||
+ | [[Avahi]] または [[systemd-resolved]] を使用して mDNS ホスト名解決を設定します。 |
||
+ | |||
+ | ==== KDE Plasma でサウンドデバイスが表示されない ==== |
||
+ | |||
+ | PipeWire クライアント (デスクトップ環境を含む) は、[https://specations.freedesktop.org/basedir-spec/basedir-spec-latest.html#variables XDG_RUNTIME_DIR] [[環境変数]] に依存して PipeWire デーモンに接続する場合があります。[https://docs.pipewire.org/page_daemon.html] ログイン直後にサウンドデバイスが表示されない場合は、この変数が手動で間違ったパスに設定されている可能性があります。 |
||
+ | |||
+ | これは PipeWire を手動で再起動することで解決できますが、Chromium で画面共有できない ({{ic|pipewire context failed}} により) など、他の問題が依然として発生する可能性があります。{{ic|XDG_RUNTIME_DIR}} は {{man|8|pam_systemd}} によって自動的に設定されるため、初期化ファイルに設定されているインスタンスをすべて削除する必要があります。 |
||
+ | |||
+ | === ビデオ === |
||
+ | |||
+ | ==== OBS(など)がウィンドウ/スクリーンを要求しても何も表示されない ==== |
||
+ | |||
+ | {{Pkg|xdg-desktop-portal}} と {{Pkg|xdg-desktop-portal-gtk}} または {{Pkg|xdg-desktop-portal-kde}} がインストールされていることが確実なら、デーモンの実行状態を確認してください。 |
||
+ | |||
+ | OBS では、すべてがうまくいっていれば、{{ic|stdout}} にこのように表示されるはずです。 |
||
+ | |||
+ | ... |
||
+ | info: [pipewire] desktop selected, setting up screencast |
||
+ | info: [pipewire] created stream 0x5632d7456850 |
||
+ | info: [pipewire] playing stream... |
||
+ | マルチモニタ環境では、{{Pkg|slurp}} パッケージを使用すると、すべての画面をキャプチャすることができます。 |
||
− | [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/Troubleshooting#underrununderflow-and-broken-pipe-errors 公式PipeWireトラブルシューティングガイド] によると、この問題を解決するには、 {{ic|/etc/pipewire/media-session.d/alsa-monitor.conf}} を編集し、 {{ic|1=api.alsa.headroom=0}} という行のコメントを外し、値を {{ic|1024}} に変更します。 |
||
== 参照 == |
== 参照 == |
||
− | * [https:// |
+ | * [https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/home Wiki] — PipeWire Wiki on Freedesktop GitLab |
* [https://blogs.gnome.org/uraeus/2018/01/26/an-update-on-pipewire-the-multimedia-revolution-an-update/ Pipewire Update Blog Post] — PipeWire の2018年1月時点での進捗が書かれた記事 |
* [https://blogs.gnome.org/uraeus/2018/01/26/an-update-on-pipewire-the-multimedia-revolution-an-update/ Pipewire Update Blog Post] — PipeWire の2018年1月時点での進捗が書かれた記事 |
||
− | * [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] — 2020年9月からの |
+ | * [https://blogs.gnome.org/uraeus/2020/09/04/pipewire-late-summer-update-2020/ PipeWire Late Summer Update 2020] — 2020年9月からの記事 |
2024年10月17日 (木) 23:42時点における最新版
関連記事
PipeWire は新しい低レベルマルチメディアフレームワークです。 映像と音声を最小の遅延で再生/キャプチャすることを目的としていて、PulseAudio、JACK、ALSA、GStreamer をベースとしたアプリケーションと互換性があります。
このフレームワークのデーモンは (PulseAudio と JACK の機能を持った) オーディオサーバーとしても、ビデオキャプチャサーバーとしても設定できます。
また PipeWire は Flatpak のようなコンテナをサポートしており、audio や video ユーザーグループに依存するのではなく、Flatpak や Wayland にスクリーンや音声を録音する許可を求める Polkit のようなセキュリティモデルを使用しています。
目次
- 1 インストール
- 2 設定
- 3 使用方法
- 4 音声のポストプロセッシング
- 5 トラブルシューティング
- 5.1 オーディオ
- 5.1.1 PipeWire にマイクが検出されない
- 5.1.2 新しいデバイスを接続したときにサウンドが自動的に切り替わらない
- 5.1.3 サウンドが自動的に Bluetooth ヘッドフォンに切り替わらない
- 5.1.4 Bluetooth デバイスに接続しても音が出ない
- 5.1.5 音量が小さい
- 5.1.6 increasing RLIMIT_MEMLOCK
- 5.1.7 サンプリングレートを変更する
- 5.1.8 許容されるサンプルレートの変更
- 5.1.9 音質 (リサンプリング品質)
- 5.1.10 外付けサウンドカードが再接続後に有効にならない
- 5.1.11 音が出ないまたは pactl info が Failure: Connection refused と表示する
- 5.1.12 Bluetooth の音声の品質が低い
- 5.1.13 再生開始時に明らかな音声の遅延やポップノイズ/音割れが発生する
- 5.1.14 複数のストリームの再生が開始されると音声が途切れる
- 5.1.15 音がひずむ
- 5.1.16 スタンバイ後に音声の問題が発生する
- 5.1.17 USB DAC(例:Schiit 社製 DAC)で高レイテンシー
- 5.1.18 音量が 30% になるまで USB DAC から音が出ない
- 5.1.19 リアルタイムオーディオが動作しない
- 5.1.20 同じサウンドカード上の複数のシンクへの同時出力
- 5.1.21 Discord から通知音が鳴らない
- 5.1.22 PipeWire で FMOD ゲームがクラッシュする
- 5.1.23 自動切り替えが機能しない
- 5.1.24 リアルタイムプライオリティの欠落/サスペンド後の負荷によるクラックリング
- 5.1.25 RAOP デバイス (Sonos など) へのストリーミング中に音が出ない
- 5.1.26 KDE Plasma でサウンドデバイスが表示されない
- 5.2 ビデオ
- 5.1 オーディオ
- 6 参照
インストール
公式リポジトリから pipewire パッケージを インストール してください。multilib に対応した lib32-pipewire もあります。
Pipewire は systemd/ユーザー を使ってサーバーを管理し、ソケットを自動で起動します。
オプションとして、pipewire-docs をインストールすると、ドキュメントを確認することができます。
Pipewire は、他のオーディオサーバーと置き換えることができます。詳しくは オーディオ を参照してください。
セッション マネージャー
JACK と同様、PipeWire は内部で接続ロジックを実装していません。新しいストリームを監視し、適切な出力デバイスやアプリケーションに接続する負担は、セッションマネージャーとして知られる外部のコンポーネントに任されています。
現在、推奨のセッションマネージャーは1つだけで次になります:
- WirePlumber — 強力なマネージャであり、現在の推奨品です。モジュール設計に基づいており、実際の管理機能を実装する Lua プラグインがあります。
次のセッションマネージャーはサポート外になっており WirePlumber を推奨しています:
- PipeWire Media Session — いくつかの基本的なデスクトップのユースケースに対応した非常にシンプルなセッションマネージャです。これは主にテスト用と新しいセッションマネージャを構築するための例として実装されました。
PipeWire のインストール時に、どちらかを選ぶように指示されます。後で適切なパッケージをインストールすることで、もう一方のオプションと衝突しますが、置き換えることで切り替えが可能です。
GUI
- Helvum — PipeWire 用の GTK 製のパッチベイ。 JACK のツールの catia にインスパイアされた。
- qpwgraph — Qt-based Graph/Patchbay for PipeWire, inspired by the JACK tool QjackCtl.
設定
PipeWire パッケージは、初期設定ファイルを/usr/share/pipewire
に用意しています。パッケージのアップデートで変更内容が上書きされてしまうので、これらのファイルを直接編集するべきではありません。PipeWire を設定するには、ファイルを /usr/share/pipewire
からシステム全体の代替場所 /etc/pipewire
か、ユーザーの場所 ~/.config/pipewire
にコピーしてください。[1]
プロファイル
Pipewire では、PulseAudio のプロファイルに加えて、pavucontrol で選択可能なカスタムの Pro Audio プロファイルが提供されています。その効果はこちらで解説しています:https://gitlab.freedesktop.org/pipewire/pipewire/-/wikis/FAQ#what-is-the-pro-audio-profile
使用方法
音声
PulseAudio や JACK と同様に PipeWire をオーディオサーバーとして使用できます。 PulseAudio サーバーの互換実装と JACK クライアント用の ABI 互換ライブラリを提供することで PulseAudio と JACK の両方を置き換えることを目的としています。詳細についてはこの記事を参照してください。
ALSA/レガシーアプリケーション
pipewire-alsa をインストールして ALSA API を使用するすべてのアプリケーションが PipeWire を使用するよう設定できます。
PulseAudio クライアント
pipewire-pulse をインストールします。このパッケージは pulseaudio と pulseaudio-bluetooth を置き換えます。再起動するか、ログインし直すか、pulseaudio.service
を停止して、pipewire-pulse.service
ユーザーユニットを実行すると効果がわかります。
パッケージがユーザーサービス pipewire-pulse.socket
を自動的に有効化するので、通常それ以上の操作は不要です。置き換えが機能しているかどうかを確認するには、次のコマンドを実行して出力を確認してください:
$ pactl info
... Server Name: PulseAudio (on PipeWire x.y.z) ... Default Sink: alsa_output.{bus}-{device}.{profile} Default Source: alsa_input.{bus}-{device}.{profile} ...
pactl(1) は、依存関係として pipewire-pulse とともにインストールされる PulseAudio クライアントライブラリパッケージ (libpulse) によって提供されます。
全体または個別のチャンネルの音量を設定する
出力チャンネルのボリュームを調整するには、pactl get-sink-volume {sink
} を使用して、Default Sink: (上記) または Name の値を使用して sink を指定する必要があります。:
(下記)、デフォルトのシンクデバイス (@DEFAULT_SINK@)、または Sink # (例: 以下の 1):
$ pactl list sinks | grep -B1 -A9 State:
Sink #1 State: RUNNING Name: alsa_output.pci-0000_2d_00.4.analog-surround-51 ... Driver: PipeWire ... Mute: no Volume: front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB, rear-left: 65536 / 100% / 0.00 dB, rear-right: 65536 / 100% / 0.00 dB, front-center: 65536 / 100% / 0.00 dB, lfe: 65536 / 100% / 0.00 dB balance 0.00
ヒント: オーディオが再生されている場合、他のデバイスとして 実行中 の grep(1) は 一時停止 されます。
バランス 比率は自動的に計算されます。デフォルトのデバイスの全体のボリュームを設定するには、次のコマンドを使用します:
pactl set-sink-volume @DEFAULT_SINK@ 75%
個別のチャンネルを設定するには、各チャンネルのボリュームを個別に指定します:
pactl set-sink-volume @DEFAULT_SINK@ 100% 75% 100% 75% 100% 100%
ソース 入力も同様に処理されます。さらに詳しい設定 (モジュールなど) については、Migrate PulseAudio および Pipewire-Pulse Configuration を参照してください。
JACK クライアント
pipewire-jack をインストールします。pw-jack
を使用して JACK クライアントを起動すると、元の libjack*
ではなく PipeWire が提供する互換ライブラリが使用されます:
pw-jack application
カスタムバッファサイズを要求することもできます。PIPEWIRE_LATENCY
環境変数を バッファサイズ/サンプルレート
(ブロックのレイテンシ(秒)を意味します) に設定します:
PIPEWIRE_LATENCY="128/48000" pw-jack application
また pipewire-jack-dropinAUR をインストールするか、jack か jack2 をアンインストールして JACK クライアントが互換ライブラリを自動的に読み込むようにもできます。
ldd
を使用して JACK アプリケーションが正しいライブラリにリンクしていることを確認します。
$ ldd /usr/bin/qjackctl | grep -i libjack
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)
Bluetooth デバイス
PipeWire は pipewire-pulse パッケージがインストールされている場合 Bluetooth オーディオデバイスを制御します。具体的には、メディアセッションデーモンは /etc/pipewire/media-session.d/with-pulseaudio
が存在する時に自動的にその bluez5
モジュールを有効にします。
プロファイルの自動選択機能
pipewire-media-session は、入力ストリームが必要なときに、HSP/HFP と A2DP プロファイルを自動的に切り替えます。これを有効にするには、bluez5.autoswitch-profile
プロパティを true
にセットしてください。
/etc/pipewire/media-session.d/bluez-monitor.conf (or ~/.config/pipewire/media-session.d/bluez-monitor.conf
... rules = [ { ... actions = { update-props = { ... bluez5.autoswitch-profile = true ...
これらの機能は、WirePlumber ではまだ 実装中 です。
PipeWire ネイティブパッチセット
グラフィカルな視覚化と接続の作成のための Helvum はありますが、それ以外はまだ入っていません。以下は、ワイヤセットの保存、ワイヤセットの読み込み、すべての接続の解除を行う bash スクリプトです。保存と読み込みには、コマンドラインパラメータでファイル名を指定します。
pw-savewires
#!/bin/bash if [[ "$#" -ne 1 ]]; then echo echo 'usage: pw-savewires filename' echo exit 0 fi rm $1 &> /dev/null while IFS= read -r line; do link_on=`echo $line | cut -f 4 -d '"'` link_op=`echo $line | cut -f 6 -d '"'` link_in=`echo $line | cut -f 8 -d '"'` link_ip=`echo $line | cut -f 10 -d '"'` echo "Saving: " "'"$link_on:$link_op"','"$link_in:$link_ip"'" echo "'"$link_on:$link_op"','"$link_in:$link_ip"'" >> $1 done < <(pw-cli dump short link)
pw-loadwires
#!/bin/python import sys import csv import os if len(sys.argv) < 2: print('\n usage: pw-loadwires filename\n') quit() with open(sys.argv[1], newline='') as csvfile: pwwreader = csv.reader(csvfile, delimiter=',', quotechar='"') for row in pwwreader: print('Loading: ' + row[0] + ' --> ' + row[1]) process = os.popen('pw-link ' + row[0] + ' ' + row[1])
pw-dewire
#!/bin/bash while read -r line; do echo 'Dewiring: ' $line '...' pw-link -d $line done < <(pw-cli dump short link {{!}} grep -Eo '^[0-9]+')
ネットワーク上のコンピューターとオーディオ機器を共有する
PipeWire 自体はネットワーク透過型ではありませんが、そのパルス実装は ネットワークストリーミング をサポートしています。ネットワーク上のコンピュータ間でオーディオを共有する簡単な方法は、Avahi デーモンを使って検出することです。
オーディオを共有するすべてのコンピュータで avahi-daemon.service
が実行されていることを確認してください。
ローカルのオーディオデバイスを共有するために、ホスト上で適切なモジュールをロードしてください。
pactl load-module module-native-protocol-tcp listen=192.168.1.10 # Use the local IP address pactl load-module module-zeroconf-publish
次に、クライアントにディスカバリモジュールをロードします。
pactl load-module module-zeroconf-discover
AirPlay レシーバーにオーディオをストリーミングする
AirPlay Receiver を装ったデバイスにオーディオをストリーミングすることが可能です。この機能を有効にするには、RAOP Discover モジュール をロードします。
$ pactl load-module module-raop-discover
専用の設定ファイルを作成することで、このモジュールを自動的にロードすることもできます。
/etc/pipewire/pipewire.conf.d/raop-discover.conf (or ~/.config/pipewire/pipewire.conf.d/raop-discover.conf)
context.modules = [ { name = libpipewire-module-raop-discover args = { } } ]
一部のスピーカーの AirPlay 実装 (Sonos AirPlay 2 スピーカーなど) では、ソースデバイスで着信 UDP トラフィック用にポート 6001 および 6002 を開く必要がある場合があります。
ネイティブ JACK 上で PipeWire を実行する
PipeWire はネイティブ JACK デーモン上の JACK クライアントとして実行することもできます。詳細は JACK and PipeWire を参照してください。
PipeWire シンクとして ALSA dmix デバイスを使用する
PipeWire サーバー(またはユーザーごとに複数) を ALSA dmix デバイス を介して ALSA に出力することが可能です。これにより、ALSA を主要な音声出力システムとして使用しながら、Bluetooth ヘッドフォンなどの ALSA 以外のデバイスを使用することができるようになります。
ALSA dmix セットアップ
PCH
と HDMI
の 2 枚のカードがあるとします。
/proc/asound/cards
0 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xdff40000 irq 146 1 [HDMI ]: HDA-Intel - HDA ATI HDMI HDA ATI HDMI at 0xdfe60000 irq 147
PCM は次のようになります。
/proc/asound/pcm
00-00: ALC1220 Analog : ALC1220 Analog : playback 1 : capture 1 00-02: ALC1220 Alt Analog : ALC1220 Alt Analog : capture 1 01-03: HDMI 0 : HDMI 0 : playback 1 01-07: HDMI 1 : HDMI 1 : playback 1 01-08: HDMI 2 : HDMI 2 : playback 1 01-09: HDMI 3 : HDMI 3 : playback 1 01-10: HDMI 4 : HDMI 4 : playback 1 01-11: HDMI 5 : HDMI 5 : playback 1
ALSA 設定が次のようになっているとします。
/etc/asound.conf
ctl.!default { type hw card PCH } pcm.!default { type plug slave.pcm "dmix:PCH,0" } pcm.dhdmi { type plug slave.pcm "dmix:HDMI,9" }
この特定の例では、dmix デバイスは dmix:PCH,0
と dmix:HDMI,9
になります。
PipeWire dmix セットアップ
まず、alsa_monitor.enable()
をコメントアウトして、wireplumber
によるハードウェア ALSA デバイスの監視と追加を停止します。
/etc/wireplumber/main.lua.d/90-enable-all.lua (or ~/.config/wireplumber/main.lua.d/90-enable-all.lua)
... -- Load devices -- alsa_monitor.enable() v4l2_monitor.enable() libcamera_monitor.enable() ...
ここで、dmix デバイスを使用するように pipewire
を設定します。デフォルトの設定ファイル (/usr/share/pipewire/pipewire.conf
) には /pipewire.conf.in#L219-239 コメントアウトされた例 をベースとして使用できます。
独自の要素を context.objects
配列に追加します。
/etc/pipewire/pipewire.conf.d/alsa-dmix.conf (or ~/.config/pipewire/pipewire.conf.d/alsa-dmix.conf)
context.objects = [ # We do not start with dmix, but with an input device. # Do not forget to add an input device. # On a friend's Laptop, I saw Zoom having a nervous # breakdown and endlessly crying because no input device # was configured! You have been warned. { factory = adapter args = { factory.name = api.alsa.pcm.source node.name = "alsa-mic-internal" # name of pulse device (mpv) node.description = "Mic Internal" # name of pulse device (pavucontrol) media.class = "Audio/Source" api.alsa.path = "hw:PCH,0" } } # Okay, now we add our dmix PCMs { factory = adapter args = { factory.name = api.alsa.pcm.sink # sink for dmix node.name = "alsa-dmix-internal" # name of pulse device (mpv) node.description = "PCM Internal" # name of pulse device (pavucontrol) media.class = "Audio/Sink" # Sink for dmix api.alsa.path = "dmix:PCH,0" } } { factory = adapter args = { factory.name = api.alsa.pcm.sink # sink for dmix node.name = "alsa-dmix-hdmi" # name of pulse device (mpv) node.description = "PCM HDMI" # name of pulse device (pavucontrol) media.class = "Audio/Sink" # Sink for dmix # remember this is a non-default dmix from /etc/asound.conf api.alsa.path = "dmix:HDMI,9" } } ]
ユーザー (非 root) として、wpctl status
の出力を確認し、wpctl set-default ID
でデフォルトの入力(ソース) と出力 (シンク) のデバイスを好みのものに設定します。{ic|ID}} はシンク/ソース名の前の数字です。
これで、構成を完全にテストすることができます。
デバイスプロファイルの切り替え
snd_hda_intel
などの一部のハードウェアオーディオデバイスは、デバイスが実行されているプロファイルによって機能が異なります。snd_hda_intel
の場合、HDMI とアナログ出力用に個別のプロファイルがあります。
WirePlumber で HDMI に切り替える:
$ wpctl set-profile <device-ID> 3 $ wpctl status
... ├─ Sinks: │ * 53. Built-in Audio Digital Stereo (HDMI) [vol: 1.00] ...
WirePlumber でアナログに切り替える:
$ wpctl set-profile <device-ID> 1 $ wpctl status
... ├─ Sinks: │ * 51. Built-in Audio Analog Stereo [vol: 0.60] ...
WebRTC 画面共有
ほとんどのアプリケーションは、例えばウェブブラウザで WebRTC を使うとき (例: Google Meet) などに、デスクトップ (あるいは個々のアプリケーション) をキャプチャするために X11 に依存していました。Wayland では、セキュリティ上の理由から画面共有は異なる方法で処理されます。PipeWire はきめ細かなアクセス制御を使用して、Wayland 上のコンテンツを共有できます。
Firefox (バージョン84以降) と Chromium (バージョン110以降) はデフォルトでこの方法をサポートしていますが、Chromium の古いバージョン (バージョン73以降) では、URL chrome://flags/#enable-webrtc-pipewire-capturer
で対応する (実験的) フラグを設定するか、CLI 引数 --enable-features=WebRTCPipeWireCapturer
を用いて、WebRTC PipeWire サポート を有効化する必要があります。
obs-studio (バージョン27以降) は、新しい PipeWire キャプチャソースを使用することにより、この方法をサポートしています。
映像
ソフトウェアはまだ商業利用には適していませんが、試す分には問題ありません。GStreamer を使用して映像ストリームを処理するほとんどのアプリケーションは PipeWire GStreamer プラグインを使用して設定なしで動作するはずです (GStreamer#PipeWire を参照してください)。そのため既に cheese のようなアプリケーションは PipeWire を使用して映像入力を利用できます。
pipewire-v4l2 を使用すると、pw-v4l2
スクリプトを使用してライブラリをプリロードすることも可能になります (/lib/pipewire-0.3/v4l2/libpw-v4l2.so
) は、v4l2 呼び出しをインターセプトし、PipeWire 経由でビデオをルーティングします。
音声のポストプロセッシング
Pipewire モジュールフィルターチェーン
Pipewire には filter-chain
という内部モジュールがあり、音声の入出力を処理するノードを作成することができます。参照してください。
/usr/share/pipewire/filter-chain/ を参照してください。
イコライザー、バーチャルサラウンドサウンド、LADSPA プラグイン、チャンネルミキシングなどの例を紹介します。
システム全体のパラメトリックイコライゼーション
設定ファイルを .config
フォルダにコピーします。
mkdir -p ~/.config/pipewire/pipewire.conf.d cp /usr/share/pipewire/filter-chain/sink-eq6.conf ~/.config/pipewire/pipewire.conf.d/
次に、sink-eq6.conf
を編集して、必要なパラメータを組み込みます。ヘッドフォンの場合、これらは Oratory1990 のデータベース から入手できます。そこにリストされていない場合は、AutoEQ project
プリアンプが必要な場合は、eq_band_1
を変更して、bq_highshelf
フィルタを周波数 0Hz でマイナスゲイン (-120 〜 +20dB のゲインをサポート) で適用します。
label = bq_highshelf control = { "Freq" = 0 "Q" = 1.0 "Gain" = -7.5 }
6 バンドを超える場合は、nodes
リストと対応する links
にさらにエントリを追加して、1 つのフィルタ ":Out" を次のフィルタ ":In" に接続します。たとえば、11 に増やします。バンド (プリアンプ + 10):
{ output = "eq_band_6:Out" input = "eq_band_7:In" } { output = "eq_band_7:Out" input = "eq_band_8:In" } { output = "eq_band_8:Out" input = "eq_band_9:In" } { output = "eq_band_9:Out" input = "eq_band_10:In" } { output = "eq_band_10:Out" input = "eq_band_11:In" }
Pipewire を再起動し、デフォルトのサウンド出力デバイスとして "Equalizer Sink" を選択します。これは、すべてのアプリケーションに適用されます。
EasyEffects
EasyEffects (以前は PulseEffects と呼ばれていました) は多数のエフェクトとフィルタを個々の入出力ストリーム (アプリケーションの音声出力やマイクの入力など) に提供する GTK 製のユーティリティです。注目すべきエフェクトには、入出力イコライザー、出力ラウドネス等化、ベースエンハンスメント、入力ディエッサー、ノイズ抑制プラグインなどがあります。GitHub ページにエフェクトの一覧があります。
EasyEffects を使用するには、easyeffects をインストールします。プリセット設定集については、コミュニティープリセットを参照してください。
NoiseTorch
noisetorchAUR はノイズ抑制に使用できます。ビルド済み (noisetorch-binAUR) や開発版 (noisetorch-gitAUR) のパッケージもあります。
起動すると選択したマイクにモジュールを読み込むことができます。声が出力される閾値を調整することができます。実際の声が削除されない最大のレベルに設定するべきです。
Noise suppression for voice
noise-suppression-for-voice をインストールし、以下のいずれかのオプションを使用します:
- 以下の行を
context.exec
セクションに追加する:
/etc/pipewire/pipewire.conf (or ~/.config/pipewire/pipewire.conf)
... context.exec = [ ... { path = "/usr/bin/pipewire" args = "-c /usr/share/pipewire/filter-chain/source-rnnoise.conf" } ...
そして、オーディオ設定でノイズキャンセルソースをデフォルトとして設定します。この機能を使う前に、アプリケーションを再起動する必要があるかもしれません。
JamesDSP
JamesDSP for Linux (jamesdspAUR として入手可能) は PipeWire と PulseAudio のためのオープンソースのサウンドエフェクトを提供します。LADSPA や Calf などに依存することなく、独自のエフェクトエンジンを使用しています。JamesDSP は当初 Android デバイス用のオーディオエフェクトプロセッサーとして公開されました。
LADSPA、LV2、VST プラグイン
LADSPA、LV2、VSTのプラグインを使用したい場合は、カスタム PulseAudio null シンクと Carla Jack ホストを利用できます。pipewire-pulse と pipewire-jack と carla をインストールします。はじめに default_null_sink
という名前の PulseAudio の null シンクを作成します。
pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=default_null_sink channel_map=FL,FR
pw-jack carla-rack
で PipeWire を使用する Carla を起動します。Rack タブで使いたいプラグインを全て追加します。プラグインのタイプが stereo であることを確認してください。適用する順番を変えることができます。EasyEffectsのようにリストの最初のプラグインが最初に入力の音声ストリームを受け取ります。その後 Patchbay タブに移動し default_null_sink
の L/R monitor を Carla input に接続し、Carla output を出力したいデバイス (スピーカーやイヤホンや HDMI 出力など) の playback に接続します。設定をフォルダに保存します (~/Documents/carla_sink_effects.carxp
など)。
Firefox で動画を見ている時など、アプリケーションが音声を再生している時に効果を試すことができます。2つの方法があります。一つは Carla の Patchbay タブで Firefox の接続を全て外し default_null_sink
の L/R output に接続する方法です。もう一つは pavucontrol を使用し Firefox の音声ストリームを default_null_sink
に変更する方法です (この方法は同じアプリケーションの次回起動時に同じ接続先を使用するはずです)。
これらの設定を起動時に適用するには、まず2つの systemd ユーザーサービスを作成します:
~/.config/systemd/user/jack-carla-rack.service
[Unit] Description=Load Carla Rack JACK host [Service] PassEnvironment="PIPEWIRE_LINK_PASSIVE=true" Type=exec ExecStart=/usr/bin/pw-jack carla-rack -n [Install] WantedBy=default.target
~/.config/systemd/user/pulseaudio-null-sink@.service
[Unit] Description=Load %i Pulseaudio null sink Before=jack-carla-rack.service After=pipewire-pulse.service [Service] Type=oneshot ExecStart=/usr/bin/pactl load-module module-null-sink object.linger=1 media.class=Audio/Sink sink_name=%i channel_map=FL,FR ExecStop=/usr/bin/pactl unload-module module-null-sink RemainAfterExit=yes [Install] WantedBy=default.target
jack-carla-rack サービスの Environment を Carla の設定ファイルのフルパスを指定するよう上書きします:
~/.config/systemd/user/jack-carla-rack.service.d/override.conf
Environment="CARLA_CONFIG_FILE=/home/username/Documents/carla_sink_effects.carxp" ExecStart= ExecStart=/usr/bin/pw-jack carla-rack -n $CARLA_CONFIG_FILE
最後に、作成したサービスを有効化します。pulseaudio-null-sink サービスには default_null_sink
引数をつけてください:
systemctl --user enable pulseaudio-null-sink@default_null_sink.service systemctl --user enable jack-carla-rack.service
トラブルシューティング
オーディオ
PipeWire にマイクが検出されない
PipeWire の alsa-monitor
モジュールは、デフォルトで alsa-card-profiles を使ってデバイスを検出します。これがうまくいかない場合は、api.alsa.use-acp
をオフにするか、オプションで api.alsa.use-ucm
をオンにすることを試してみてください。
pipewire-media-session を使用している場合。
/etc/pipewire/media-session.d/alsa-monitor.conf (or ~/.config/pipewire/media-session.d/alsa-monitor.conf)
... rules = [ { ... actions = { update-props = { ... api.alsa.use-acp = false ...
それ以外の場合は、wireplumber を使用している場合。
/etc/wireplumber/main.lua.d/50-alsa-config.lua (or ~/.config/wireplumber/main.lua.d/50-alsa-config.lua)
... alsa_monitor.rules = { { ... apply_properties = { -- Use ALSA-Card-Profile devices. They use UCM or the profile -- configuration to configure the device and mixer settings. -- ["api.alsa.use-acp"] = true, -- Use UCM instead of profile when available. Can be -- disabled to skip trying to use the UCM profile. ["api.alsa.use-ucm"] = true, ...
その後、pipewire を再起動し、利用可能なデバイスを確認します。
$ pw-record --list-targets
Available targets ("*" denotes default): 62 58: description="Built-in Audio" prio=1872 60: description="Built-in Audio" prio=2000 * 62: description="Built-in Audio (Loopback PCM)" prio=1984
新しいデバイスを接続したときにサウンドが自動的に切り替わらない
新しく接続されたデバイスに自動的に切り替えるには、次のファイルを作成します。:
/etc/pipewire/pipewire-pulse.conf.d/switch-on-connect.conf (or ~/.config/pipewire/pipewire-pulse.conf.d/switch-on-connect.conf)
# override for pipewire-pulse.conf file pulse.cmd = [ { cmd = "load-module" args = "module-always-sink" flags = [ ] } { cmd = "load-module" args = "module-switch-on-connect" } ]
サウンドが自動的に Bluetooth ヘッドフォンに切り替わらない
pactl load-module module-switch-on-connect
を実行し、ログイン時に自動的にそのコマンドが実行されるようにデスクトップ環境を設定してください。詳しくは wireplumber issue #89 を見てください。
Bluetooth デバイスに接続しても音が出ない
2020-12-07 の時点で、Bluetooth デバイスを接続しても音が出ない場合は、デフォルトのシンクに切り替えるか、シンク入力を正しいシンクに移動する必要があります。pactl list sinks
で使用可能なシンクの一覧を表示し、pactl set-default-sink
でデフォルトのシンクを Bluetooth デバイスに切り替えます。これはこのようなスクリプトを使って udev で自動化できます。
この問題については、この Reddit スレッドを参照してください。スクリプトの作成者によると、ヘッドセットプロファイル (HSP) にまだ問題がある可能性があります。
音量が小さい
PulseAudio を PipeWire で置き換えた後、正しく音が出ても、再起動後に音量が極端に小さくなることがあります。
alsamixer
を開き、F6
を押して適切なサウンドカードを選び ALSA のボリュームが100%であることを確認してください。alsactl
は再起動後もこの設定を維持するはずです。
increasing RLIMIT_MEMLOCK
Dec 13 11:11:11 HOST pipewire-pulse[99999]: Failed to mlock memory 0x7f4f659d8000 32832: This is not a problem but for best performance, consider increasing RLIMIT_MEMLOCK
realtime-privileges をインストールし realtime
グループに自分のユーザーを追加します。
あるいは memlock を 64kB から 128kB に増やすことで、この問題を解決できるようです。systemd/ユーザー で pipewire-pulse
を実行している場合は /etc/security/limits.d/username.conf
に次の行を追加します:
username soft memlock 64 username hard memlock 128
サンプリングレートを変更する
PipeWire のデフォルトでは、グローバルサンプルレートは 48kHz に設定されています。これを変更したい場合(より高い値をサポートする DAC を所有しているなど)、設定ファイル /etc/pipewire/pipewire.conf
の default.clock.rate = 48000
行を編集することで行うことができます。例えば、192kHz にしたい場合は、48000
を default.clock.rate = 192000
にコメントを解除して変更します。
PipeWire は、DAC がサポートする出力サンプルレートを変更することもできます。設定するには、default.clock.allowed-rates = [ 48000 ]
という行をコメント解除して設定します。例えば、[ 44100 48000 88200 96000 ]
とします。サンプルレートは、カードがアイドルのときに再生されるオーディオストリームのサンプルレートに従います。
どの出力サンプルレートとサンプルフォーマットが DAC に送られたデータであるかを確認するには(おそらく桁を変更する必要があります)。
cat /proc/asound/card0/pcm0p/sub0/hw_params
どの入力サンプルレートを使用しているかを確認するには、pcm0p
を pcm0c
に変更します。(c
は "capture" の略、p
は "playback" の略です).
許容されるサンプルレートの変更
PipeWire は、DAC がサポートする出力サンプルレートを動的に変更することもできます。サンプルレートは、再生中のオーディオストリームのサンプルレートに従います。
/etc/pipewire/pipewire.conf (or ~/.config/pipewire/pipewire.conf)
... context.properties = { ... default.clock.allowed-rates = [ sample_rate_1 sample_rate_2 sample_rate_3 ... ] ...
たとえば、[ 44100 48000 88200 96000 ]
です。DAC でサポートされている値については、ハードウェアのマニュアルを参照してください。
開発者の [3] によると: "PipeWire は最大16の異なるサンプルレートを許容し、可能な限り切り替えます。" つまり、上記の設定では、再サンプリングは行われないということです。
DAC に送信されるデータがどの出力サンプルレートとサンプルフォーマットであるかを確認するには (おそらく桁を変更する必要があります):
$ cat /proc/asound/card0/pcm0p/sub0/hw_params
どの入力サンプルレートが使用されているかを確認するには、pcm0p
を pcm0c
に変更します (c
は "capture" の略で、p
は "playback" の略です)
音質 (リサンプリング品質)
PulseAudio を resample-method = speex-float-10
または soxr-vhq
で使用していた場合、コメントを解除して resample.XXX
を変更することを検討するとよいかもしれません。resample.quality = 4
を 10
または最大値 15
に変更することを検討してください。(存在しない場合は /usr/share/pipewire/
からコピーしてください)。PipeWire の再起動を忘れないでください (sudo なし): systemctl --user restart pipewire.service pipewire-pulse.socket
(設定変更を適用させたい場合は、pipewire-pulse.socket
を絶対に忘れないでください)。
10
と 15
では、品質の差はほとんどありませんが、CPU 負荷は 2〜3 倍になっています。また、4
, 10
, 15
のレイテンシーの差はまだ誰も調べていません。Ryzen 2600 で 44100→48000Hz で resample.quality = 15
にすると pipewire
や pipewire-pulse
プロセスが 1CPUコア4.0% の負荷となる。
リサンプラーの比較はこちら:https://src.infinitewave.ca/(18KHz以上、120dB以上は注意)。speeex は Xiph.org Speex と記載されています。
PipeWire は Spa と呼ばれる独自のリサンプリングアルゴリズムを使用しています。SoX の sox
、Speex の speexenc
と同様、PipeWire にはそのスタンドアロン版があります。spa-resample
使い方は
spa-resample -q 15 -f s24 -r 48000 input16bit44100orAnythingElse.wav output24bit48000hz.wav
自分で sink を作れば、他のリサンプラーを使うことも可能でしょう。あるいは、音楽プレーヤーのプラグインを使うこともできます(例えば、Qmmp には SoX プラグインがあります)
外付けサウンドカードが再接続後に有効にならない
~/.config/pipewire-media-session/default-profile
にデフォルトプロファイル off のエントリがあれば削除します。それでも解決しない場合は ~/.config/pipewire-media-session/
からすべてのファイルを削除し、systemctl --user restart pipewire.service
で PipeWire を再起動します。
音が出ないまたは pactl info が Failure: Connection refused と表示する
これはアプリケーションが PipeWire-Pulse サービスに接続できていないことを意味します。/etc/pipewire/pipewire-pulse.conf
が存在し空でないことを確認し、systemctl --user restart pipewire-pulse.service
で PipeWire-Pulse を再起動してください。
それでも解決しない場合は strace -f -o /tmp/pipe.txt pactl info
を実行し、pastebin に /tmp/pipe.txt
を貼り付けて、IRC (OFTC の #pipewire) かメーリングリストで相談してください。
Bluetooth の音声の品質が低い
Bluetooth で再生が途切れる場合は systemctl --user status pipewire.service
を実行してみてください。次のようなエラーが表示される場合は、
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered
pactl list sinks
で現在選択されているコーデックを確認し、/etc/pipewire/media-session.d/bluez-monitor.conf
の bluez5.codecs
を sbc aac ldac aptx aptx_hd
のいずれかに変更してみてください。
/etc/pipewire/media-session.d/bluez-monitor.conf
... properties = { ... bluez5.codecs = [sbc] ...
mSBC サポートの有効化を試すには (Sony 1000XM3 のマイクの問題を修正します):
/etc/pipewire/media-session.d/bluez-monitor.conf
... rules = [ ... actions = { ... update-props = { ... bluez5.msbc-support = true ...
変更を適用するには systemctl --user restart pipewire.service
で PipeWire を再起動する必要があります。
再生開始時に明らかな音声の遅延やポップノイズ/音割れが発生する
これは、非アクティブ時のノードの一時停止が原因です。
これを無効にするには、遅延が発生する場所に応じて /etc/pipewire/media-session.d/*-monitor.conf
を編集し、プロパティ session.suspend-timeout-seconds
を 0 に変更します。無効にするか、他の値を試して、何が機能するかを確認します。
または、/etc/pipewire/media-session.d/media-session.conf
の行 suspend-node
をコメントアウトすることもできます。
再起動 して pipewire.service
と pipewire-pulse.service
の両方の変更を適用して下さい。
wireplumber で、新しいファイルを作成してデフォルト設定を上書きします:
~/.config/wireplumber/main.lua.d/51-disable-suspension.lua (or /etc/wireplumber/main.lua.d/51-disable-suspension.lua)
table.insert (alsa_monitor.rules, { matches = { { -- Matches all sources. { "node.name", "matches", "alsa_input.*" }, }, { -- Matches all sinks. { "node.name", "matches", "alsa_output.*" }, }, }, apply_properties = { ["session.suspend-timeout-seconds"] = 0, -- 0 disables suspend }, })
Bluetooth デバイスの場合は、次の設定も使用します (ファイルの場所が異なることに注意してください):
~/.config/wireplumber/bluetooth.lua.d/51-disable-suspension.lua (or /etc/wireplumber/bluetooth.lua.d/51-disable-suspension.lua)
-- Note: bluez_monitor, not alsa_monitor table.insert (bluez_monitor.rules, { matches = { { -- Matches all sources. -- Note: bluez_input, not alsa_input { "node.name", "matches", "bluez_input.*" }, }, { -- Matches all sinks. -- Note: bluez_output, not alsa_output { "node.name", "matches", "bluez_output.*" }, }, }, apply_properties = { ["session.suspend-timeout-seconds"] = 0, -- 0 disables suspend }, })
pipewire.service
と wireplumber.service
を再起動して、変更を適用します。
サスペンドを完全に無効にする代わりに、タイムアウト値を、ソースがサスペンドされるまでに必要な遅延秒数に変更することもできます。
複数のストリームの再生が開始されると音声が途切れる
この問題は通常、pipewire-pulse.service
ユーザーユニット の journal を読み取り、次のような行を見つけることで診断できます。
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940
公式 PipeWire トラブルシューティングガイド によると、pipewire-media-session のこの問題を解決するには:
/etc/pipewire/media-session.d/alsa-monitor.conf (or ~/.config/pipewire/media-session.d/alsa-monitor.conf
api.alsa.headroom = 1024
wireplumber を使用する場合:
/etc/wireplumber/main.lua.d/50-alsa-config.lua (or ~/.config/wireplumber/main.lua.d/50-alsa-config.lua)
apply_properties = { ["api.alsa.headroom"] = 1024, },
カーネルページのロックやスケジューリングの遅延が原因で音声の途切れが発生する場合は、カーネルパラメータを調整して応答時間を安定化させる を参照してください。
音がひずむ
- マイクについては、
alsamixer
を起動し、問題があるサウンドカードを選択し、Mic Boost
やInternal Mic Boost
の値を下げてみてください。 /etc/pipewire/pipewire.conf
のdefault.clock.rate = 48000
のコメントを外して、値を44100
に下げてみてください。
スタンバイ後に音声の問題が発生する
スリープから復帰した際に音が消えたり壊れたりする場合は、ALSA を最初期化すると改善するかもしれません:
# alsactl init
USB DAC(例:Schiit 社製 DAC)で高レイテンシー
サンプルレートやフォーマットを変更することで、Schiit Hel 2 などの一部の DAC でレイテンシーを減らすことができるかもしれません [4] pipewire-media-session のマッチングルールを使用すると、デバイスのプロパティを設定することができます [5]
pipewire-media-session の alsa-monitor.conf
のデフォルト設定を /etc/pipewire/media-session.d
か ~/.config/pipewire/media-session.d
にコピーしてください。
そして、以下のような新しいルールブロックを追加してください。
/etc/pipewire/media-session.d/alsa-monitor.conf ~/.config/pipewire/media-session.d/alsa-monitor.conf
rules = { ... { matches = [ { node.name = "alsa_output.<name of node>" } ] actions = { update-props = { audio.format = "S24_3LE" audio.rate = 96000 # Following value should be doubled until audio doesn't cut out or other issues stop occurring api.alsa.period-size = 128 } } } ... }
alsa_output.<node name>
ノードは pw-top
で取得することができます。
DAC は異なるフォーマットやサンプルレートをサポートしているかもしれません。ALSA に問い合わせることで、あなたの DAC が何をサポートしているかを確認することができます。
まず、DAC のカード番号を取得します。
$ aplay -l
... card 3: S2 [Schiit Hel 2], device 0: USB Audio [USB Audio] Subdevices: 0/1 Subdevice #0: subdevice #0 ...
つまり、この例ではカード3ということになります。 サポートされているすべてのサンプルレートとフォーマットを取得します。
$ cat /proc/asound/cardX/streamX
... Playback: ... Interface 1 Altset 1 Format: S16_LE Channels: 2 Endpoint: 0x05 (5 OUT) (ASYNC) Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 Data packet interval: 125 us Bits: 16 ... Interface 1 Altset 2 Format: S24_3LE Channels: 2 Endpoint: 0x05 (5 OUT) (ASYNC) Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 Data packet interval: 125 us Bits: 24 ... Interface 1 Altset 3 Format: S32_LE Channels: 2 Endpoint: 0x05 (5 OUT) (ASYNC) Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 Data packet interval: 125 us Bits: 32 ... ...
この場合、S16_LE, S24_3LE, S32_LE
はサポートされているフォーマットで、44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
はすべてのフォーマットでサポートされているサンプルレートとなります。
音量が 30% になるまで USB DAC から音が出ない
USB DAC の中には、ある一定の音量に達するまで音が出なくなるものがあります [6] 一般的にこれは約 25%〜30% で、最初の音量が不快なほど大きくなり、低い音量を維持することができなくなります。解決策としては、["api.alsa.soft-mixer"]
を true
に設定して、ハードウェアミキサーの音量コントロールを無視することが挙げられます。
wireplumber でこれを実現するには、/usr/share/wireplumber/main.lua.d/50-alsa-config.lua
設定に次を使用して構成フラグメントを追加します。 table.insert
:
~/.config/wireplumber/main.lua.d/51-volume-fix.lua
table.insert (alsa_monitor.rules, { matches = { { -- This matches all cards. { "device.name", "matches", "alsa_card.*" }, }, }, -- Apply properties on the matched object. apply_properties = { -- Don't use the hardware mixer for volume control. It -- will only use software volume. The mixer is still used -- to mute unused paths based on the selected port. ["api.alsa.soft-mixer"] = true, } })
次に、pipewire を再起動します。alsamixer
でマスターボリュームを設定し、# alsactl store
で設定を保存します。これで、ボリュームミキサーを通常どおり使用できるようになります。
リアルタイムオーディオが動作しない
RTKit error: org.freedesktop.DBus.Error.AccessDenied
が systemctl --user status pipewire.service
の出力に表示された場合、pipewire daemon の優先度がリアルタイムに変更されていないことを示します。この問題については、[7] を参照してください。
同じサウンドカード上の複数のシンクへの同時出力
/usr/share/alsa-card-profile/mixer/profile-sets/default.conf
のコピーを作成し、アップデート後も変更が持続するようにします。ここでは、アナログと HDMI の2つのデフォルトマッピングを結合したプロファイルを定義しています。
/usr/share/alsa-card-profile/mixer/profile-sets/multiple.conf
[General] auto-profiles = no [Mapping analog-stereo] device-strings = front:%f channel-map = left,right paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic priority = 15 [Mapping hdmi-stereo] description = Digital Stereo (HDMI) device-strings = hdmi:%f paths-output = hdmi-output-0 channel-map = left,right priority = 9 direction = output [Profile multiple] description = Analog Stereo Duplex + Digital Stereo (HDMI) Output output-mappings = analog-stereo hdmi-stereo input-mappings = analog-stereo
ここで、PipeWire の media-session に、新しい card-profile を使用してデバイスをマッチングするように設定します。識別情報は、$ pw-cli dump device
で見つけることができます。
/etc/pipewire/media-session.d/alsa-monitor.conf
rules = [ { matches = [ { alsa.card_name = "HDA Intel PCH" } ] actions = { update-props = { api.alsa.use-acp = true device.profile-set = "multiple.conf" device.profile = "multiple" api.acp.auto-profile = false api.acp.auto-port = false } } } ]
Discord から通知音が鳴らない
min.quantum が低すぎることが原因かもしれませんので、700以上に設定してみてください。pipewire-pulse.conf の pulse.rules セクションに以下のルールを追加することで、Discord 専用にオーバーライドすることが可能です。
/etc/pipewire/pipewire-pulse.conf (or ~/.config/pipewire/pipewire-pulse.conf)
... pulse.rules = [ ... { # Discord notification sounds fix matches = [ { application.process.binary = "Discord" } ] actions = { update-props = { pulse.min.quantum = 1024/48000 # 21ms } } } ...
PipeWire で FMOD ゲームがクラッシュする
Pillars of Eternity のような古いバージョンの FMOD オーディオエンジン を使っているゲームの中には、PulseAudio バイナリが存在しないと pulseaudio --check
を呼び出してクラッシュするものがあります。回避策としては、/bin/pulseaudio
を/bin/true
にシンボリックリンクすることです[8]
# ln -s /bin/true /bin/pulseaudio
PulseAudio を再インストールする場合は、シンボリックリンクを削除する必要があることに注意してください。
自動切り替えが機能しない
自動切り替えが機能しない場合、WirePlumber の状態に問題がある可能性があります。this comment が提案しているように、WirePlumber のローカル状態を削除し、デーモンを再起動することで改善されるかどうか確認することができます。
$ rm -r ~/.local/state/wireplumber/
次に、wireplumber.service
ユーザーユニット を 再起動 します。
リアルタイムプライオリティの欠落/サスペンド後の負荷によるクラックリング
rtkit の 2011年 からのバグにより、サスペンドイベントが発生すると PipeWire のリアルタイム優先度が取り消され、元に戻らなくなります。この原因となる保護を無効にするには、rtkit-daemon.service
を 編集 してください:
/etc/systemd/system/rtkit-daemon.service.d/override.conf
[Service] ExecStart= ExecStart=/usr/lib/rtkit-daemon --no-canary
次に、メディアセッションサービスとともに、rtkit-daemon.service
ユニットと pipewire.service
ユーザー ユニットを再起動します。
RAOP デバイス (Sonos など) へのストリーミング中に音が出ない
Avahi または systemd-resolved を使用して mDNS ホスト名解決を設定します。
KDE Plasma でサウンドデバイスが表示されない
PipeWire クライアント (デスクトップ環境を含む) は、XDG_RUNTIME_DIR 環境変数 に依存して PipeWire デーモンに接続する場合があります。[9] ログイン直後にサウンドデバイスが表示されない場合は、この変数が手動で間違ったパスに設定されている可能性があります。
これは PipeWire を手動で再起動することで解決できますが、Chromium で画面共有できない (pipewire context failed
により) など、他の問題が依然として発生する可能性があります。XDG_RUNTIME_DIR
は pam_systemd(8) によって自動的に設定されるため、初期化ファイルに設定されているインスタンスをすべて削除する必要があります。
ビデオ
OBS(など)がウィンドウ/スクリーンを要求しても何も表示されない
xdg-desktop-portal と xdg-desktop-portal-gtk または xdg-desktop-portal-kde がインストールされていることが確実なら、デーモンの実行状態を確認してください。
OBS では、すべてがうまくいっていれば、stdout
にこのように表示されるはずです。
... info: [pipewire] desktop selected, setting up screencast info: [pipewire] created stream 0x5632d7456850 info: [pipewire] playing stream...
マルチモニタ環境では、slurp パッケージを使用すると、すべての画面をキャプチャすることができます。
参照
- Wiki — PipeWire Wiki on Freedesktop GitLab
- Pipewire Update Blog Post — PipeWire の2018年1月時点での進捗が書かれた記事
- PipeWire Late Summer Update 2020 — 2020年9月からの記事