入力チャンネル数に基づいたPulseAudioプロファイルの自動切り替え


39

HDMI経由でオーディオを受信機に実行しています。受信機には7.1のフルセットアップが接続されています。しかし、私が聴いているもののほとんどは、はるかに少ないチャンネルを持っています。一部はモノラル、ほとんどはステレオ、ビットは5.1です。レシーバーに適切な数のチャンネルが供給されると、レシーバーはさまざまなDSP効果を発揮します(センターチャンネルの分割、サブウーファーへのベースの送信、ドルビーマトリックスサラウンドの自動検出など)。多数のサイレントチャネルを含む完全な7.1信号を送信すると、機能しなくなります。

PulseAudioの出力チャンネルの数は、カードに割り当てられたプロファイルにより、カード/シンクごとに設定されます。、、およびさまざまなGUIプログラムを使用してpacmd、割り当てられたプロファイルを変更できpactlます。

入力ストリームでのチャネル使用に基づいてプロファイルを自動的に変更するように設定するにはどうすればよいですか?たとえば、入力ストリームがフロント左とフロント右のみを使用している場合、ステレオプロファイルに切り替えます。後左と後右も使用している場合は、4進法などに切り替えます。


3
私は間違っているかもしれませんが、それが実現可能であるとは思いません。Pulseaudioは複数のストリームを一度に管理します。異なるチャンネル番号の異なるストリームが一緒に再生されている場合、どのプロファイルが正しいでしょうか?
アレッシオガエータ

@medenチャンネル数が最も多いものだと思います。
デロベルト

はい、もちろんですが、目標を達成できなかった場合もあります。ところで、Pulseaudioには条件付きでプロファイルを切り替える方法はないと思います。おそらく、PulseaudioのKodiガイド[ kodi.wiki/view/PulseAudio]は、ヒントを得るのに役立ちます(つまり、パススルーを使用し、使用するすべての形式をサポートしていれば、レシーバーにすべての作業を行わせます)。
アレッシオガエータ

これは興味深い質問です。これをテストするためのオーディオ設定はありませんが、回避策として、想定する各インスタンスのプロファイルを作成する場合は、事前にストリームを分析するスクリプトを設定します(または、mediainfoまたはの出力をgrepすることにより)そして、プレーヤーを起動する前に適切なプロファイルを選択するために使用します。論理的な観点からは、一度に1つのオーディオを再生していれば動作するはずです。ffmpegavconvpacmd
オタク長老

4
まだ送信されていない場合は、launchpad.net / bugs / bugtrackers / pulseaudio-bugsでこの質問を機能リクエストとして送信する価値があります。これは興味深い機能であり、パルスオーディオはおそらく外部スクリプトを使用するよりも内部でこれを解決できる可能性があります。
アレクサンダー

回答:


1

これは単なる概念であり、完全なソリューションではありません。

patcl subscribe設定をpulsaudioクライアントに割り当てることができれば、独自のイベント処理を行うことができる場合があります(たとえば、ムービープレーヤーが接続する場合、7.1構成に切り替えるか、ステレオ構成を使用します)。からイベントの一定のストリームを取得patcl subscribeします。これは、クライアント接続を監視することで処理できます。その後、単にpactl / pacmdを呼び出してプロファイルを変更できます。

pactl subscribeの出力例:

$ pactl subscribe 
Event 'change' on sink #0
Event 'remove' on sink-input #93
Event 'change' on sink #0
Event 'change' on source #0
Event 'change' on sink #0
Event 'change' on source #0
Event 'new' on sink-input #98
Event 'change' on sink-input #98

チャンネル数が異なる複数のクライアントが存在する場合の処理​​にはまだ問題があることに注意してください。

さらに、上記のアプローチはかなり制限されています。アプリケーションごとの設定は、アプリケーションの実際の使用チャネル数を検出するには不十分です(たとえば、vlcは5.1または7.1ビデオを再生する場合があります)。pactlを介してpulseaudioクライアントの実際に使用されているチャンネルの数を取得する方法を見つけていませんが、ここでいくつかのオプションを見逃しているかもしれません。または、ビデオプレーヤーアプリケーション自体にフックして、そこから欠落しているビットを取得することもできます。


pactl list | grep format.channels最大を見つけることができるはずです。使用されているチャネルの数(および詳細も同様)。サブスクライブされたイベントによってトリガーされるスクリプトでその情報を使用すると、ソリューションにつながる可能性があります。
とんでもない
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.