web-dev-qa-db-ja.com

ALSAを介して入力/出力するようにPulseAudioを設定するにはどうすればよいですか?

入力と出力に単一のALSAデバイスのみを使用するようにPulseAudioを設定するにはどうすればよいですか?

デフォルトのPulseAudio設定では、PulseAudioは起動時にすべてのALSAデバイスを開きます。これにより、PulseAudioを他のALSAクライアントと一緒に使用することができなくなります。多くの人がALSAよりもPulseAudioを好みますが、他のユーザーはそれを苛立たせています。良くも悪くも、PulseAudioは標準になり、SkypeやFirefoxなどのいくつかの一般的なLinuxアプリケーションは、PulseAudioを介したオーディオ出力のみをサポートしています。

ALSAに直接出力するオーディオクライアントを使用することを好むユーザーもいれば、JACKなどの別のオーディオフレームワークに出力するが、JACKにALSAに直接アクセスさせたいユーザーもいます。これらのユーザーの場合、PulseAudioをアンインストールすることで、すべてのALSAデバイスを簡単に解放できます。ただし、PulseAudioを削除すると、SkypeとFirefoxでオーディオを使用できなくなります。

より良い解決策は、PulseAudioが他のALSAクライアントと「うまく再生」し、その構成で指定される単一のデバイスのみ、またはALSA defaultだけに出力する構成を考え出すことです。端末。どうすればそれができますか?

1
Metamorphic

この答えは@dirktの答えに基づいているので、彼に感謝します。

  1. ~/.config/Pulse/default.paを編集できます。これは、「pulseaudio(1)」マニュアルページの「ファイル」の下にリストされています。存在する場合、グローバルdefault.paは使用されません。私の場合、次の最小限の構成で動作するセットアップを取得できます。

    load-module module-alsa-sink device=default
    load-module module-alsa-source device=default
    
    load-module module-native-protocol-unix
    

    ただし、私のシステムでは/etc/Pulse/default.paであるグローバルバージョンを調べて、このファイルに他に何が含まれるかを確認することをお勧めします。ここでは、音量設定の復元、Bluetoothデバイスの検出、JACKとのインターフェイス、ユーザーのログアウト時にデーモンを自動的に終了するモジュールなど、さまざまな種類のベルとホイッスルが構成されています。グローバルファイルをホームディレクトリにコピーして編集する場合、またはグローバルファイルを直接編集する場合は、次の手順を実行する必要があります。

    • load-module module-udev-detectをコメントアウトします。これは、ALSAハードウェアデバイスを検索し、上記のALSAモジュールに渡したデバイス引数をオーバーライドします。
    • 次に、module-alsa-sink行とmodule-alsa-source行を追加します。 module-native-protocol-unix行はすでに存在しているはずです。
    • load-module module-suspend-on-idle;の行をコメントアウトする必要がある場合があります。これにより、 特定の出力デバイス でのテストで問題が発生しました。症状は、mplayer -ao Pulse ...が「オーディオデバイスがスタックしました!」と報告することです。 mpv -ao Pulse ...は「[ao/Pulse]ストリームが一時停止されています。救済します。」と報告します。そのモジュールをコメントアウトすると、問題が修正されました。
  2. 上記のdevice=defaultとは異なるデバイスを選択した場合、たとえば、記録と再生に2つの別々のALSAデバイスを選択した場合、それは私のでは機能しません経験-parecordは、ソースデバイスではなくシンクデバイスからの記録を試みます。 ALSAを介した入力と出力用に別々のデバイスを構成していて、 同じPCMデバイスで名前を付けたい の場合は、次のようなものを~/.asoundrcに入れる必要があります。

    pcm.!default {     # "!" means "override" the previous definition
        type asym
        playback.pcm "hw4mix"
        capture.pcm "hw:5"
    }
    

    ここで、hw4mixは、ファイルで以前に定義された dmixデバイス に名前を付けます。一方、hw:5は、USBマイクのハードウェアデバイスを指定します。これはPulseAudioを幸せにします。 PulseAudioクライアント用の特別なデバイスを使用したい場合は、「default」ではなく「special_pulseaudio_device」という名前を付けることができます(もちろん、それを参照するためにdefault.paを更新します)。

  3. テスト。 pulseaudio -kまたはkillall pulseaudioを使用して、現在のPulseAudioデーモンを強制終了します。次に、pulseaudio -vvで再開します。もちろん、~/.asoundrcを編集するたびにこれを行う必要があります。動作するセットアップができたら、pactl exit; pulseaudio --startのようなものを試すことができます。 --startオプションを使用すると、バックグラウンドで実行され、エラーメッセージを表示できなくなります。

    parecord -v t.wavおよびpaplay -v t.wavを使用して、WAVファイルを録音および再生します。これらのコマンドを同時に実行できるはずです。

    • 再生にはdmixデバイスを使用しているので、paplayaplayを一緒に使用でき、ミキシングは自動的に行われます。ただし、私の設定ではマイクを共有できません。 PulseAudioの実行中(「デバイスまたはリソースがビジー」)、arecordを使用してそこから録音できません。そのためには、 dsnoop デバイスを作成し、上記のhw:5の代わりにその名前を付ける必要があります。

    • Skypeを機能させようとしている場合は、Skypeの「エコー/サウンドテストサービス」を使用してセットアップをテストします。 Skypeはすでにバックグラウンドで実行されている可能性があることに注意してください。開始する前にkillall skypeを試して、新しいPulseAudio接続を強制的に確立してください。私の経験では、SkypeはPulseAudioデーモンに接続できない場合、いかなる種類のエラー状態も報告しません。

特定のアプリケーション(Ecasound?レガシーコード?)がPulseAudioで動作しないという理由だけでも、適切なALSA構成を持つことが望ましいです。これらの手順が、ALSAを好みに合わせて構成し、PulseAudioに依存するSkypeなどのプログラムを使用できるようにしたいと考えている人に役立つことを願っています。

4
Metamorphic

ALSAのデフォルトデバイスを使用するようにPulseAudioを設定しない。代わりに、デフォルトのデバイスとしてPulseを使用するようにALSAを構成します。

pcm.!default Pulse
ctl.!default Pulse

このようにして、PulseAudioを認識しないALSAアプリケーションは、その間接層を介してPulseAudioを使用します。

これを行う必要がある理由は、PulseAudioalwaysがALSAをバックエンドとして使用し、起動時にallALSAデバイスを開くためです。ほとんどのALSAデバイスは複数回開くことができません。これにより、PulseAudioの実行中にALSAデバイスを直接使用しようとするすべてのALSAアプリケーションが失敗します。

何らかの理由で機能しないレガシーアプリケーションがある場合は、pasuspenderを使用してPulseAudioを一時的に一時停止し、この特定のアプリケーションを実行できます。

私は実際にあなたと同じような状況にあり、ALSAを長い間使用し、満足していたので、PulseAudioに切り替えることを余儀なくされました。 PulseAudioは、原則としてALSA(ストリームおよびソース/シンク)よりも優れた、より一般的な構造を持っており、いぼがある場合もありますが、それと一緒に暮らすことができます。

手動でpulseaudioを起動し、-vなどのpulseaudio -vv startフラグを追加することで、問題をデバッグできます。ログメッセージはsyslogに送られます。デバイスを切り替えたい場合は、pavucontrolが使いやすいGUIであり、より直接的な制御が必要な場合は、pacmdまたはpactlを使用できます(私は考えたことはありません)。コマンドラインCLIとして2つのプログラムがある理由を説明します。詳細については、help引数を使用してください。ファイルを好む場合は、すべてを簡単にスクリプト化できます。

また、利用可能な modules を確認することをお勧めします。

4
dirkt