rendered paste bodyimport sysimport pygstpygst.require("0.10")import gstimport pygtkimport gtkclass Munger: def __init__(self, outfile, callback): #self.source_count = 0 self.complength = 0L self.finished = callback # make a pipeline self.pipeline = gst.Pipeline("mypipeline") self.bus = self.pipeline.get_bus() self.bus.add_signal_watch() self.bus.connect('message', self._on_eos) # creating a gnlcomposition self.comp = gst.element_factory_make("gnlcomposition", "mycomposition") self.pipeline.add(self.comp) self.comp.connect("pad-added", self._on_pad) # create an audioconvert self.compconvert = gst.element_factory_make("audioconvert", "compconvert") self.pipeline.add(self.compconvert) self.resample = gst.element_factory_make('audioresample') self.pipeline.add(self.resample) caps = gst.caps_from_string('audio/x-raw-int, rate=44100, channels=2, endianness=1234, width=16') self.capsfilter = gst.element_factory_make("capsfilter") self.pipeline.add(self.capsfilter) self.capsfilter.set_property("caps", caps) # create encoder and muxer self.queue = gst.element_factory_make('queue') self.pipeline.add(self.queue) self.enc = gst.element_factory_make('vorbisenc') self.mux = gst.element_factory_make('oggmux') self.pipeline.add(self.enc, self.mux) # create a filesink self.sink = gst.element_factory_make("filesink", "filesink") self.sink.set_property('location', outfile) self.pipeline.add(self.sink) # link up elements gst.element_link_many(self.compconvert, self.enc, self.queue, self.mux, self.sink) def add_source(self, file): # File must be an AudioFile instance!!! # create a gnlfilesource #sourcename = 'source' + str(self.source_count) source = gst.element_factory_make("gnlfilesource") # set the gnlfilesource properties source.set_property('location', file.path) source.set_property('start', self.complength) source.set_property('duration', file.duration) source.set_property('media-start', 0L) source.set_property('media-duration', file.duration) self.comp.add(source) # add to total composition length self.complength += file.duration print self.complength # increase source count #self.source_count += 1 def _on_pad(self, comp, pad): convpad = self.compconvert.get_compatible_pad(pad, pad.get_caps()) pad.link(convpad) def start(self): print 'Total length: %d' % self.complength self.pipeline.set_state(gst.STATE_PLAYING) def _on_eos(self, bus, message): if message.type == gst.MESSAGE_ERROR: gerror, debug = message.parse_error() print 'DEBUG: Error. Ouch.' print 'DEBUG: ' + gerror print 'DEBUG: ' + debug self.finished() elif message.type == gst.MESSAGE_EOS: self.finished() print message