mikutterでGStreamerを使用したメディア再生を行えるようにする
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
LICENSE
README.md
mikutter_gstreamer.rb
mst.rb
spec

README.md

mikutter_gstreamer

これは何?

GStreamer を用いてサウンドを再生するプラグインです。
通知用のプラグインとしての利用だけでなく、メディアプレイヤーのようなプラグインから再生制御インタフェースとして利用することも想定して作ろうとしています。
作ろうとしているだけであって実現できているかは聞くものじゃない。

依存

  • GStreamer(1.0系)
  • Ruby/GStreamer

使い方

  1. 設定画面「サウンド」を開きます
  2. サウンドの再生方法に「GStreamer」が追加されているので変更します
  3. 以後、ふぁぼ通知等の通知音が GStreamer を通して再生されるようになります

ありそうな問題

音量を設定したらマスタ音量が上がって耳が死ぬかと思った

A. Pulseaudioが悪い。設定を書き換えて対応してください。
もしくはそうしなくても済むような画期的なプルリクお待ちしています。
参考: PulseAudio - ArchWiki

イベント

他のプラグインからちょっとしたメディアプレイヤーのように使えるよう、いくつかのイベントを定義しています。
チャンネルを指定しない場合は:defaultとなります。

gst_play

引数 (ファイル名, チャンネル)
サウンドを再生します。既にチャンネルが使用されている場合それを停止してから再生します。

gst_enq

引数 (ファイル名, チャンネル)
サウンドファイルをキューに追加します。チャンネルの現在の再生とキューが全て消化された後に再生されます。

gst_stop

引数 (チャンネル)
指定チャンネルの再生を停止し、キューも破棄します。

gst_set_volume

引数 (音量[0-100], チャンネル)
指定チャンネルの音量を設定します。

mst.rb について

mikutter plugin 上に直接 GStreamer を使うコードを書いてもさっぱり動かなかったため、このプラグインでは処理を中継するスクリプトを子プロセスとして実行しそれを通しています。
それが「mst.rb」というプログラムになっています。
mst.rb は対話的に GStreamer のライブラリを利用する小さなプログラムです。
このプログラムに、例えばplay core/skin/data/sounds/favo.wavとコマンドを送るとふぁぼSEが再生されます。
また、コマンドの最後にもうひとつ引数を足すことでチャンネルを指定できます。
ひとつのチャンネルでは、最大1つの音声が再生されるよう制御されていて、例えば通知では"sound"チャンネルを指定しています。 もし他のプラグインからgst_playイベントなどを呼び出す際には、他の場所で使用されているキューに蓄積されいつまでも再生されない状況が発生しないように、各自のプラグインの slug 等を指定するべきです。

小学生並の感想

GStreamer を使用することで、mikutter ALSAプラグイン(aplay) では実現できなかった様々な形式のメディアファイルの再生や、出力音量の動的な変更、エレメントの概念による環境に応じた出力方法など、メディア再生に関わるさまざまな機能をアプリケーション上から使用することができます。
GStreamer プラグインのインストール次第で豊富な形式のメディアにまとめて対応できる点はとても魅力的です。
今後はこれらの特徴を活かせるようにしたいですね。