home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / gst-python / 0.10 / examples / audioconcat.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  5.2 KB  |  131 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import gobject
  6. gobject.threads_init()
  7. import pygst
  8. pygst.require('0.10')
  9. import gst
  10. from gst.extend.discoverer import Discoverer
  11.  
  12. class AudioDec(gst.Bin):
  13.     '''Decodes audio file, outputs at specified caps'''
  14.     
  15.     def __init__(self, location, caps):
  16.         gst.Bin.__init__(self)
  17.         src = gst.element_factory_make('filesrc')
  18.         dec = gst.element_factory_make('decodebin')
  19.         conv = gst.element_factory_make('audioconvert')
  20.         rsmpl = gst.element_factory_make('audioresample')
  21.         ident = gst.element_factory_make('identity')
  22.         src.set_property('location', location)
  23.         dec.connect('new-decoded-pad', self._AudioDec__on_new_decoded_pad)
  24.         self.add(src, dec, conv, rsmpl, ident)
  25.         src.link(dec)
  26.         conv.link(rsmpl)
  27.         rsmpl.link(ident, caps)
  28.         self._AudioDec__apad = conv.get_pad('sink')
  29.         self.add_pad(gst.GhostPad('src', ident.get_pad('src')))
  30.  
  31.     
  32.     def __on_new_decoded_pad(self, element, pad, last):
  33.         caps = pad.get_caps()
  34.         name = caps[0].get_name()
  35.         print '\n__on_new_decoded_pad:', name
  36.         if 'audio' in name:
  37.             if not self._AudioDec__apad.is_linked():
  38.                 pad.link(self._AudioDec__apad)
  39.             
  40.         
  41.  
  42.  
  43.  
  44. class AudioConcat:
  45.     '''Concatenates multiple audio files to single ogg/vorbis file'''
  46.     caps = gst.caps_from_string('audio/x-raw-float, rate=44100, channels=2, endianness=1234, width=32')
  47.     
  48.     def __init__(self, infiles, outfile):
  49.         self.infiles = infiles
  50.         self.i = 0
  51.         self.start = 0x0L
  52.         self.pipeline = gst.Pipeline()
  53.         self.bus = self.pipeline.get_bus()
  54.         self.bus.add_signal_watch()
  55.         self.bus.connect('message::eos', self.on_eos)
  56.         self.bus.connect('message::error', self.on_error)
  57.         self.comp = gst.element_factory_make('gnlcomposition')
  58.         self.enc = gst.element_factory_make('vorbisenc')
  59.         self.mux = gst.element_factory_make('oggmux')
  60.         self.sink = gst.element_factory_make('filesink')
  61.         self.comp.connect('pad-added', self.on_pad_added)
  62.         self.sink.set_property('location', outfile)
  63.         self.pipeline.add(self.comp, self.enc, self.mux, self.sink)
  64.         gst.element_link_many(self.enc, self.mux, self.sink)
  65.         self.apad = self.enc.get_pad('sink')
  66.         self.mainloop = gobject.MainLoop()
  67.         gobject.idle_add(self.discover)
  68.         self.mainloop.run()
  69.  
  70.     
  71.     def discover(self):
  72.         infile = self.infiles[self.i]
  73.         discoverer = Discoverer(infile)
  74.         discoverer.connect('discovered', self.on_discovered, infile)
  75.         discoverer.discover()
  76.         return False
  77.  
  78.     
  79.     def on_discovered(self, discoverer, ismedia, infile):
  80.         print '\non_discovered:', infile
  81.         discoverer.print_info()
  82.         if discoverer.is_audio:
  83.             dec = AudioDec(infile, self.caps)
  84.             src = gst.element_factory_make('gnlsource')
  85.             src.add(dec)
  86.             src.set_property('media-start', 0x0L)
  87.             src.set_property('media-duration', discoverer.audiolength)
  88.             src.set_property('start', self.start)
  89.             src.set_property('duration', discoverer.audiolength)
  90.             self.comp.add(src)
  91.             self.start += discoverer.audiolength
  92.         
  93.         self.i += 1
  94.         if self.i < len(self.infiles):
  95.             gobject.idle_add(self.discover)
  96.         elif self.start > 0:
  97.             self.pipeline.set_state(gst.STATE_PLAYING)
  98.         else:
  99.             self.mainloop.quit()
  100.  
  101.     
  102.     def on_pad_added(self, element, pad):
  103.         caps = pad.get_caps()
  104.         name = caps[0].get_name()
  105.         print '\non_pad_added:', name
  106.         if name == 'audio/x-raw-float':
  107.             if not self.apad.is_linked():
  108.                 pad.link(self.apad)
  109.             
  110.         
  111.  
  112.     
  113.     def on_eos(self, bus, msg):
  114.         print '\non_eos'
  115.         self.mainloop.quit()
  116.  
  117.     
  118.     def on_error(self, bus, msg):
  119.         error = msg.parse_error()
  120.         print '\non_error:', error[1]
  121.         self.mainloop.quit()
  122.  
  123.  
  124. if __name__ == '__main__':
  125.     if len(sys.argv) >= 3:
  126.         AudioConcat(sys.argv[1:-1], sys.argv[-1])
  127.     else:
  128.         print 'Usage: %s <input_file(s)> <output_file>' % sys.argv[0]
  129.         print 'Example: %s song1.mp3 song2.ogg output.ogg' % sys.argv[0]
  130.  
  131.