ヘッドホンを外した後、再生を一時停止してから再接続した後、再生を再開したいと思います。
私の現在のソリューションはACPIを使用して、図に示すようにプラグ/プラグ解除を検出します。ここ。再生を再生/一時停止するには、を使用しますxdotool key XF86AudioPlay
。
このソリューションは、次の基本的なケースでうまく機能します。
- 音楽が再生中で、ヘッドフォンが接続されています。
- ヘッドホンが外れた。=>音楽が一時停止しました。
- ヘッドフォンが再接続されました=>音楽は引き続き再生されます。
しかし、そうでない場合は再生を再開したくありません。ポジティブヘッドホンを外した場合。
次のシナリオを想像してください。
- ヘッドホンを接続してコンピュータを起動します。
- 音楽を再生、
- 音楽の一時停止、
- ヘッドフォンを抜いてください。
- ヘッドホンを再接続します。
最後の部分が問題です。ヘッドホンを外したときに再生が有効になっていなくても、ヘッドフォンを再接続すると再生が再開されます。
また、私のシステムではxdotool key XF86AudioPlay
再生のみを切り替え、xdotool key XF86AudioPause
何もしません。これは状況をさらに悪化させる。
- ヘッドフォンを着用してコンピュータを起動します。
- 音楽を再生、
- 音楽の一時停止、
- ヘッドフォンを抜く(音楽が再生され始めます!)。
だから私に必要なのは再生/一時停止/停止イベント検出すべての状況で正しく反応できるようにプラグ/プラグ解除イベントを提供します。
思い出したアイデアの1つは、再生/一時停止/停止キーボードショートカットを再バインドしてステータスシステムロジックを追加することです。欠点はゲームをすることです。いつもこれらのキーボードショートカットは、たとえば制御の代わりに使用する必要があります。やや非実用的なリズムボックスボタンです。
また、プレイ中にRhythmboxを閉じると、ステートマシンは特定のplaying
状態のままになります。もちろん、Rhythmboxが終了するのを待ってから状態をstopped
。ところで音楽を再生するのがRhythmboxではなくVLCなどならどうでしょうか?このアプローチは醜く信頼できないので避けたいです。
私の質問:メディアの再生が一時停止/再開/停止される時点をどのように検出しますか?
答え1
pacmd list-sink-inputs
1つのオプションは、たとえば(表示)を使用してPulseaudioストリームの状態を確認したり、state
選択したプログラミング言語を使用してPulseaudio悪魔と直接対話することです。
プレーヤー自体が一時停止している場合、メディアプレーヤーはストリームを一時停止する必要があります(state
からに変更されます)。一部のメディアプレーヤーはこれを行うことができ、一部はそうではないかもしれません。RUNNING
CORKED