home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import os
- import sys
- import gobject
- import pygst
- pygst.require('0.10')
- import gst
- from pygobject import gsignal
- EOS = 'EOS'
- ERROR = 'ERROR'
- WRONG_TYPE = 'WRONG_TYPE'
- UNKNOWN_TYPE = 'UNKNOWN_TYPE'
-
- class AudioSource(gst.Bin):
- '''A bin for audio sources with proper audio converters'''
- gsignal('done', str)
- gsignal('prerolled')
-
- def __init__(self, filename, caps = 'audio/x-raw-int,channels=2,rate=44100'):
- gst.Bin.__init__(self)
- self.filename = filename
- self.outcaps = caps
- self.filesrc = gst.element_factory_make('filesrc')
- self.filesrc.set_property('location', self.filename)
- self.dbin = gst.element_factory_make('decodebin')
- self.audioconvert = gst.element_factory_make('audioconvert')
- self.audioresample = gst.element_factory_make('audioresample')
- self.volume = gst.element_factory_make('volume')
- self.add(self.filesrc, self.dbin, self.audioconvert, self.audioresample, self.volume)
- self.filesrc.link(self.dbin)
- self.audioconvert.link(self.audioresample)
- self.audioresample.link(self.volume, caps)
- self.dbin.connect('new-decoded-pad', self._new_decoded_pad_cb)
- self.dbin.connect('unknown-type', self._unknown_type_cb)
- self._srcpad = None
-
-
- def __repr__(self):
- return '<AudioSource for %s>' % self.filename
-
-
- def set_volume(self, volume):
- gst.debug('setting volume to %f' % volume)
- self.volume.set_property('volume', volume)
-
-
- def _new_decoded_pad_cb(self, dbin, pad, is_last):
- gst.debug('new decoded pad: pad %r [%s]' % (pad, pad.get_caps().to_string()))
- if 'audio' not in pad.get_caps().to_string() or self._srcpad:
- return None
- gst.debug('linking pad %r to audioconvert' % pad)
- pad.link(self.audioconvert.get_pad('sink'))
- self._srcpad = gst.GhostPad('src', self.volume.get_pad('src'))
- self._srcpad.set_active(True)
- self.add_pad(self._srcpad)
-
-
- def _unknown_type_cb(self, pad, caps):
- self.emit('done', UNKNOWN_TYPE)
-
-
- def stop(self):
- self.set_state(gst.STATE_NULL)
-
-
- def clean(self):
- self.stop()
- self.remove(self.filesrc)
- self.remove(self.dbin)
- self.remove(self.audioconvert)
- self.remove(self.audioresample)
- self.remove(self.volume)
- self.filesrc = None
- self.dbin = None
- self.audioconvert = None
- self.volume = None
-
-
- gobject.type_register(AudioSource)
- if __name__ == '__main__':
- main = gobject.MainLoop()
-
- def _done_cb(source, reason):
- print 'Done'
- sys.stdout.flush()
- if reason != EOS:
- print 'Some error happened: %s' % reason
-
- main.quit()
-
-
- def _error_cb(source, element, gerror, message):
- print 'Error: %s' % gerror
- main.quit()
-
-
- try:
- source = AudioSource(sys.argv[1])
- except IndexError:
- sys.stderr.write('Please give a filename to play\n')
- sys.exit(1)
-
- pipeline = gst.Pipeline('playing')
- source.connect('done', _done_cb)
- pipeline.connect('error', _error_cb)
- p = 'osssink'
- if len(sys.argv) > 2:
- p = ' '.join(sys.argv[2:])
-
- pipeline.add(source)
- sink = gst.parse_launch(p)
- pipeline.add(sink)
- source.link(sink)
-
- def _start(pipeline):
- print 'setting pipeline to PLAYING'
- pipeline.set_state(gst.STATE_PLAYING)
- print 'set pipeline to PLAYING'
-
- gobject.timeout_add(0, _start, pipeline)
- gobject.idle_add(pipeline.iterate)
- print 'Going into main loop'
- main.run()
- print 'Left main loop'
- pipeline.set_state(gst.STATE_NULL)
- pipeline.remove(source)
- pipeline.remove(sink)
- utils.gc_collect('cleaned out pipeline')
- source.clean()
- utils.gc_collect('cleaned up source')
- source = None
- utils.gc_collect('set source to None')
-
-