メディア再生/一時停止イベントの検出

メディア再生/一時停止イベントの検出

ヘッドホンを外した後、再生を一時停止してから再接続した後、再生を再開したいと思います。

私の現在のソリューションはACPIを使用して、図に示すようにプラグ/プラグ解除を検出します。ここ。再生を再生/一時停止するには、を使用しますxdotool key XF86AudioPlay

このソリューションは、次の基本的なケースでうまく機能します。

  • 音楽が再生中で、ヘッドフォンが接続されています。
  • ヘッドホンが外れた。=>音楽が一時停止しました。
  • ヘッドフォンが再接続されました=>音楽は引き続き再生されます。

しかし、そうでない場合は再生を再開したくありません。ポジティブヘッドホンを外した場合。

次のシナリオを想像してください。

  • ヘッドホンを接続してコンピュータを起動します。
  • 音楽を再生、
  • 音楽の一時停止、
  • ヘッドフォンを抜いてください。
  • ヘッドホンを再接続します。

最後の部分が問題です。ヘッドホンを外したときに再生が有効になっていなくても、ヘッドフォンを再接続すると再生が再開されます。

また、私のシステムではxdotool key XF86AudioPlay再生のみを切り替え、xdotool key XF86AudioPause何もしません。これは状況をさらに悪化させる。

  • ヘッドフォンを着用してコンピュータを起動します。
  • 音楽を再生、
  • 音楽の一時停止、
  • ヘッドフォンを抜く(音楽が再生され始めます!)

だから私に必要なのは再生/一時停止/停止イベント検出すべての状況で正しく反応できるようにプラグ/プラグ解除イベントを提供します。

このステートマシンは必要な操作を説明します。 FSM一時停止プラグを抜きます。


思い出したアイデアの1つは、再生/一時停止/停止キーボードショートカットを再バインドしてステータスシステムロジックを追加することです。欠点はゲームをすることです。いつもこれらのキーボードショートカットは、たとえば制御の代わりに使用する必要があります。やや非実用的なリズムボックスボタンです。

また、プレイ中にRhythmboxを閉じると、ステートマシンは特定のplaying状態のままになります。もちろん、Rhythmboxが終了するのを待ってから状態をstopped。ところで音楽を再生するのがRhythmboxではなくVLCなどならどうでしょうか?このアプローチは醜く信頼できないので避けたいです。


私の質問:メディアの再生が一時停止/再開/停止される時点をどのように検出しますか?

答え1

pacmd list-sink-inputs1つのオプションは、たとえば(表示)を使用してPulseaudioストリームの状態を確認したり、state選択したプログラミング言語を使用してPulseaudio悪魔と直接対話することです。

プレーヤー自体が一時停止している場合、メディアプレーヤーはストリームを一時停止する必要があります(stateからに変更されます)。一部のメディアプレーヤーはこれを行うことができ、一部はそうではないかもしれません。RUNNINGCORKED

関連情報