current-audio property

動画コンテナ(DVD や mp4 等)は音声や映像のトラックを複数格納できる。
主に字幕用途で考えられた構造だろう、と思う…

しかしこの構造を利用して昨今では様々な応用というか実験が進んでいる。
…っぽい、業界全般なんて現場のオッサンに解るはずが無いのだからしょーがない。

確実なのは特定用途限定かつ軽いことだけがウリのプレイヤーにはトドメでしかない。
たとえば私が公開しているプレイヤーアプリとかである。
こんなのってないよ…あんまりだよ…

つまり我が Y901x 0.3.5 はまったく複数トラックメディアに対応していない。
当然開発終了している Windows 用もそうだが開発は終了しているので放置。
DirectShow のコードなんて海外にゴロゴロ転がっているけどシラネ!

実は Totem で指定すれば Y901x にも反映されるのであまり気にしていなかった。
ぶっちゃけ Totem が終了時に X の設定を初期化しないというのを利用しているだけ。
だったけどいいかげんに自分自身が気になるようになってきたのでそろそろ対策しよう。

日本語版 Ubuntu てか GNOME 環境専用アプリで続けるなら別に…
って次で GNOME を排除すると明言している Ubuntu は終わった感が…
GNOME だから選んでいた人は多いと思うんですけど…
私も Fedora 15 待ちで移行は確定だけど Ubuntu 11.04 は全然話題になっていないね…

いつものように長い戯れ言はこのくらいにして。

playbin2

n-audio プロパティでオーディオトラック数。
current-audio プロパティでオーディオトラックの指定。
が可能であるようだ。

Totem のソース bacon-video-widget-gst-0.10.c
にて parse_stream_info 関数がやっていることを参考にしただけなんだが。
C のコードを見て形を変えて Python で使うのは GPL には反していないよね。

映像やテキストのトラック関連もあるけど現状は「シラネ!」でいいだろう。
Y901x 0.3.5 の 1314 行目に以下を追記してみる。

# Audio
asink = self.player.get_property("audio-sink")
if asink:
    self.toolbox.volumebar.set_property("sensitive", True)
    v = self.toolbox.volumeadj.get_value() / 100.0
    self.set_volume(v)
    # 追加
    print self.player.get_property("n-audio")
    # デフォルトは -1 で先頭トラックはゼロ
    self.player.set_property("current-audio", 1)
else:
    self.toolbox.volumebar.set_property("sensitive", False)

なんだ、たったコレだけで 2 番目のオーディオトラックが再生できた。
playbin2 は本当に何でも簡単にやってくれる、頼るのもどうかとは解っているけど。
とにかく私程度のサンデープログラマーなオッサンにはありがたい存在である。

後は切り替えを実際に行うユーザーインターフェイスをどうするかだ。
やっぱりメニュー項目に加えるのが一番迷わない方法だと思うけど。
トラック数を調べて一度選択メニューを全部削除してそれからえっと、実装は面倒くさい…