Hi there, (since it seems that Python GStreamer or even GStreamer don't seem to have mailing lists to ask for questions such as the following one, I hope the Python GStreamer maintainers are subscribed to this list or any kind person would help me with this.)
I'm a Python newbie (and I don't know other programming language). Using the script provided bellow to record sound to a WAV file. Everything works fine excepting that when recording is stopped, the resulting file is truncated. If I'm not wrong, here might be the cause: the GStreamer documentation describes the "Controlled shutdown of live sources in applications" (http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseSrc.html) and proposes the following solution: "Since GStreamer 0.10.16 an application may send an EOS event to a source element to make it perform the EOS logic (send EOS event downstream or post a GST_MESSAGE_SEGMENT_DONE on the bus). This can typically be done with the gst_element_send_event() function on the element or its parent bin." What I understand from the previous explanation is that I should replace the last line of code "self.player.set_state(gst.STATE_NULL)" with an EOS event. How could I do this? Thanks, Pablo def __init__(self): self.player = gst.Pipeline("player") self.clock = self.player.get_clock() self.source = gst.element_factory_make("alsasrc", "alsa-source") self.encoder = gst.element_factory_make("wavenc", "wavenc") self.fileout = gst.element_factory_make("filesink", "sink") self.fileout.set_property("location", self.filename + "-audio.wav") self.player.add(self.source, self.encoder, self.fileout) gst.element_link_many(self.source, self.encoder, self.fileout) bus = self.player.get_bus() bus.add_signal_watch() bus.enable_sync_message_emission() bus.connect('message', self.on_message) self.playing = False self.recording_time = self.player.get_last_stream_time() def on_message(self, bus, message): t = message.type if t == gst.MESSAGE_EOS: self.player.set_state(gst.STATE_NULL) elif t == gst.MESSAGE_ERROR: err, debug = message.parse_error() print "Error: %s" % err, debug self.player.set_state(gst.STATE_NULL) def on_key_press_event(self, widget, event): if (event.keyval == gtk.keysyms.space): if self.playing == False: self.playing = True self.player.set_state(gst.STATE_PLAYING) elif self.playing == True: self.player.set_state(gst.STATE_NULL) _______________________________________________ pygtk mailing list [email protected] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://faq.pygtk.org/
