examples/fvumeter.py: condense code by using table and loop

Original commit message from CVS:
2005-09-23  Thomas Vander Stichele  <thomas at apestaart dot org>

* examples/fvumeter.py:
condense code by using table and loop
* examples/vumeter.py:
fix up example for new API for both bus and level element
This commit is contained in:
Thomas Vander Stichele 2005-09-23 21:10:36 +00:00
parent cfdc81b592
commit ea0f5ff24b
4 changed files with 52 additions and 100 deletions

View file

@ -1,3 +1,10 @@
2005-09-23 Thomas Vander Stichele <thomas at apestaart dot org>
* examples/fvumeter.py:
condense code by using table and loop
* examples/vumeter.py:
fix up example for new API for both bus and level element
2005-09-23 Thomas Vander Stichele <thomas at apestaart dot org>
* gst/gst.defs:

2
common

@ -1 +1 @@
Subproject commit 345fd9851051274dd758a19bbe33dbb561b4d303
Subproject commit 7caeee4b949b4388927fec7fcf25f767429bde30

View file

@ -194,89 +194,31 @@ class FVUMeter(gtk.DrawingArea):
self.topborder + vumeter_height)
# draw tick marks
# - 90.0 dB
self.window.draw_line(self.style.black_gc, self.leftborder,
h - self.bottomborder, self.leftborder,
h - self.bottomborder + 5)
layout = self.create_pango_layout("-90")
layout_width, layout_height = layout.get_pixel_size()
self.window.draw_layout(self.style.black_gc,
self.leftborder - int(layout_width/2),
h - self.bottomborder + 7, layout)
scalers = [
('-90', 0.0),
('-40', 0.15),
('-30', 0.30),
('-20', 0.50),
('-10', 0.75),
( '-5', 0.875),
( '0', 1.0),
]
for level, scale in scalers:
self.window.draw_line(self.style.black_gc,
self.leftborder + int (scale * vumeter_width),
h - self.bottomborder,
self.leftborder + int(scale * vumeter_width),
h - self.bottomborder + 5)
self.window.draw_line(self.style.black_gc,
self.leftborder, h - self.bottomborder,
self.leftborder, h - self.bottomborder + 5)
layout = self.create_pango_layout(level)
layout_width, layout_height = layout.get_pixel_size()
self.window.draw_layout(self.style.black_gc,
self.leftborder + int(scale * vumeter_width) - int(layout_width / 2),
h - self.bottomborder + 7, layout)
# -40.0 dB
self.window.draw_line(self.style.black_gc,
self.leftborder + int(0.15*vumeter_width),
h - self.bottomborder,
self.leftborder + int(0.15*vumeter_width),
h - self.bottomborder + 5)
layout = self.create_pango_layout("-40")
layout_width, layout_height = layout.get_pixel_size()
self.window.draw_layout(self.style.black_gc,
self.leftborder + int(0.15*vumeter_width) - int(layout_width/2),
h - self.bottomborder + 7, layout)
# -30.0 dB
self.window.draw_line(self.style.black_gc,
self.leftborder + int(0.30*vumeter_width),
h - self.bottomborder,
self.leftborder + int(0.30*vumeter_width),
h - self.bottomborder + 5)
layout = self.create_pango_layout("-30")
layout_width, layout_height = layout.get_pixel_size()
self.window.draw_layout(self.style.black_gc,
self.leftborder + int(0.30*vumeter_width) - int(layout_width/2),
h - self.bottomborder + 7, layout)
# -20.0 dB
self.window.draw_line(self.style.black_gc,
self.leftborder + int(0.50*vumeter_width),
h - self.bottomborder,
self.leftborder + int(0.50*vumeter_width),
h - self.bottomborder + 5)
layout = self.create_pango_layout("-20")
layout_width, layout_height = layout.get_pixel_size()
self.window.draw_layout(self.style.black_gc,
self.leftborder + int(0.50*vumeter_width) - int(layout_width/2),
h - self.bottomborder + 7, layout)
# -10.0dB
self.window.draw_line(self.style.black_gc,
self.leftborder + int(0.75*vumeter_width),
h - self.bottomborder,
self.leftborder + int(0.75*vumeter_width),
h - self.bottomborder + 5)
layout = self.create_pango_layout("-10")
layout_width, layout_height = layout.get_pixel_size()
self.window.draw_layout(self.style.black_gc,
self.leftborder + int(0.75*vumeter_width) - int(layout_width/2),
h - self.bottomborder + 7, layout)
# - 5.0dB
self.window.draw_line(self.style.black_gc,
self.leftborder + int(0.875*vumeter_width),
h - self.bottomborder,
self.leftborder + int(0.875*vumeter_width),
h - self.bottomborder + 5)
layout = self.create_pango_layout("-5")
layout_width, layout_height = layout.get_pixel_size()
self.window.draw_layout(self.style.black_gc,
self.leftborder + int(0.875*vumeter_width) - int(layout_width/2),
h - self.bottomborder + 7, layout)
# 0.0dB
self.window.draw_line(self.style.black_gc,
self.leftborder + vumeter_width,
h - self.bottomborder,
self.leftborder + vumeter_width,
h - self.bottomborder + 5)
layout = self.create_pango_layout("0")
layout_width, layout_height = layout.get_pixel_size()
self.window.draw_layout(self.style.black_gc,
self.leftborder + vumeter_width - int(layout_width/2),
h - self.bottomborder + 7, layout)
# draw the value to the right
# draw the peak level to the right
layout = self.create_pango_layout("%.2fdB" % self.peaklevel)
layout_width, layout_height = layout.get_pixel_size()
self.window.draw_layout(self.style.black_gc,

View file

@ -51,9 +51,13 @@ class Window(gtk.Dialog):
self.set_default_size(200,60)
self.set_title('Volume Level')
self.connect('delete-event', lambda *x: gtk.main_quit())
self.vu = fvumeter.FVUMeter()
self.vu.show()
self.vbox.pack_start(self.vu)
self.vus = []
self.vus.append(fvumeter.FVUMeter())
self.vus.append(fvumeter.FVUMeter())
self.vbox.add(self.vus[0])
self.vbox.add(self.vus[1])
self.vus[0].show()
self.vus[1].show()
def error(self, message, secondary=None):
m = gtk.MessageDialog(self,
@ -66,18 +70,13 @@ class Window(gtk.Dialog):
m.run()
def on_message(self, bus, message):
t = message.type
if t == gst.MESSAGE_STATE_CHANGED:
pass
if (t == gst.MESSAGE_APPLICATION and
message.structure.get_name() == 'level'):
if message.structure.get_name() == 'level':
s = message.structure
self.vu.set_property('peak', clamp(s['peak'][0], -90.0, 0.0))
self.vu.set_property('decay', clamp(s['decay'][0], -90.0, 0.0))
else:
print '%s: %s:' % (message.src.get_path_string(),
message.type.value_nicks[1])
print ' %s' % message.structure.to_string()
for i in range(0, len(s['peak'])):
self.vus[i].set_property('peak',
clamp(s['peak'][i], -90.0, 0.0))
self.vus[i].set_property('decay',
clamp(s['decay'][i], -90.0, 0.0))
return True
def run(self):
@ -86,8 +85,12 @@ class Window(gtk.Dialog):
s = 'alsasrc ! level message=true ! fakesink'
pipeline = gst.parse_launch(s)
self.set_sensitive(True)
watch_id = pipeline.get_bus().add_watch(self.on_message)
if pipeline.set_state(gst.STATE_PLAYING) == gst.STATE_SUCCESS:
# FIXME: using gst.MESSAGE_APPLICATION does not give me
# any messages at all
watch_id = pipeline.get_bus().add_watch(gst.MESSAGE_ANY,
self.on_message)
if pipeline.set_state(gst.STATE_PLAYING) == gst.STATE_CHANGE_SUCCESS:
print "going into main"
gtk.Dialog.run(self)
else:
self.error('Could not set state')
@ -99,5 +102,5 @@ class Window(gtk.Dialog):
if __name__ == '__main__':
w = Window()
w.show()
w.show_all()
w.run()