bashスクリプトから、内蔵スピーカーからサウンドを再生し、それ以外の場合は無効のままにします。

bashスクリプトから、内蔵スピーカーからサウンドを再生し、それ以外の場合は無効のままにします。

以前、同様の質問を投稿しましたが、Kamil Maciorowski さんが、投稿されたとおり、実際には単一の問題ではなく、3 つの問題が混在していると正しく賢明に指摘してくれました。そこで、壊れたシステムと質問を削除しました。現在の Lubuntu を新規インストールしてやり直しています。箱から出してすぐに、Bluetooth ヘッドフォンをオンにすると、内蔵スピーカーではなくヘッドフォンから音が再生されます。ヘッドフォンをオフにすると、音は自動的にスピーカーから再生されます。

私が望むのは、特定のコマンドの出力を明示的にスピーカーに指示しない限り、スピーカーにサウンドが送信されないことです。たとえば、疑似コード: ヘッドフォンがaplay /path/fire-alarm.wav -o speakers利用可能な場合は他のすべてのサウンドをヘッドフォンから再生し、そうでない場合はまったく再生しないようにします。

この種のポリシーを直接規定していない場合は、システムをだまして /dev/null をヘッドフォンの次に 2 番目で内部スピーカーより前の、常に動作し常に利用可能なオーディオ シンクとして認識させる方法があるのではないかと思います。これを「このサウンドをスピーカーから再生する」コマンドと組み合わせて使用​​すれば、それが実現するはずです。

どちらも不可能な場合は、ヘッドフォン機能に影響を与えず、再ログインせずにスピーカーを無効および有効にするコマンドでも、ビザンチン Linux サウンド アーキテクチャの何かが「スピーカーがオフになっています。修正します」と自動的に判断しない限り、ほぼ同じ目的を達成できます。

これは、Bluetooth ヘッドフォンがデフォルトであるべきだと言っているのと同じではありません。それが現状です。私が「Debbie Does Dubai」を視聴しているときにヘッドフォンが範囲外になったり、電池が切れたり、物理的な位置を調整しようとして手探りでヘッドフォンを外したりした場合、サウンドが自動的に切り替わってスピーカーから出力され始めるのは望ましくありません。

私が求めているのは、特定のストリームをスピーカーに送信するように明示的に指示しない限りスピーカーに何も送信せず、そのストリームのみを送信するポリシー、またはそれが失敗した場合は、再ログインせずにスピーカーを無効および有効にするスクリプト可能な方法です。

答え1

PULSE_SINK=<シンク名> プログラム

利用可能な「sink_name」のリストは以下から取得できます。

LANG=C pactl list | grep -A2 'Sink #' | grep Name: | cut -d" " -f2

関連情報