Y901x 0.3.5 公開。
Y901x はシークバーを弄くるのに gst.SEEK_FLAG_KEY_UNIT 指定で軽くしている。
けどたまに動かしたピチッとした位置で止めたい場合が多々ある。
面倒くさいので放置していたけどそろそろやろうかと。
def set_play_position(self, location):
"""
Media Seeking
SEEK_FLAG_KEY_UNIT -> LightWaight
"""
if self.seekinfo.button == 1:
seek = gst.SEEK_FLAG_KEY_UNIT
else:
seek = gst.SEEK_FLAG_ACCURATE
event = gst.event_new_seek(
1.0,
gst.FORMAT_TIME,
gst.SEEK_FLAG_FLUSH | seek,
gst.SEEK_TYPE_SET,
location,
gst.SEEK_TYPE_NONE,
0)
self.player.send_event(event)
とシークバー上で押されたマウスボタンを記憶しておいて振り分けにしてみた。
GtkHScale はホイールクリックだと正確な位置に移動できるので合わせてみたんだが。
つーてもホイールクリックでシークはやりにくいので右ボタンでもオケにと。
こんなに簡単に振り分けできるならもっと早くやればよかった、我ながら。
それと一時間以上のファイルの場合は自動で
00:05/85:45 → 00:00:05/01:23:45
なんて切り替わるように表示したくなった。
こんな処理にしたけど、今見るともしかしてジャスト一時間だとアウト…
まぁ手持ちのは問題無いし次で直せばいいか。
def put_time_status(self, location):
"""
self.player is PlayBin2
"""
sec = location / 1000000000
allsec = self.player.query_duration(gst.FORMAT_TIME)[0] / 1000000000
if allsec > 3600:
s = time.strftime("%H:%M:%S", time.gmtime(sec))
t = time.strftime("%H:%M:%S", time.gmtime(allsec))
else:
s = time.strftime("%M:%S", time.gmtime(sec))
t = time.strftime("%M:%S", time.gmtime(allsec))
self.statusbar.label[0].set_text("{0}/{1}".format(s, t))
"""
今までの処理
secv = "%02d:%02d/%02d:%02d" % ((sec / 60), (sec % 60), (allsec / 60), (allsec % 60))
self.statusbar.label[0].set_text(secv)"""
自分で計算しなくても time モジュールを使えばいいと今頃気がついた私って…
そういえば新しいフォーマッタで %02d みたくゼロ詰めするのはどうやるのだ?
どうせ V2 を使いつづけるのでほとんど気にしていなかった。
7.1. string ? Common string operations ? Python v2.7.1 documentation
# old
print "%02d:%02d" % (1, 2)
# new
print("{0:02d}:{1:02d}".format(1, 2))
スゲェ分かり辛いと思うんですけど…
せっかく C 言語とほぼ同じで覚えやすかったのに今後はこうなるんだよなぁ…