Example #1
0
    def __init__(self, codec):
        """Initialisation. Create a decoder for the specified codec.
           Codec is specified by file extension. Available codecs are
           listed in pymedia.audio.acodec.extensions.
        """
        super(AudioDecoder, self).__init__()

        if float(acodec.version) > 2:
            self.codecid = acodec.getCodecId(codec)
            self.decoder = acodec.Decoder({"id": self.codecid})
        else:
            self.decoder = acodec.Decoder(codec)
Example #2
0
def dumpWAV(name):
    import pymedia.audio.acodec as acodec
    import pymedia.muxer as muxer
    import time, wave, string, os
    name1 = str.split(name, '.')
    name2 = string.join(name1[:len(name1) - 1])
    # Open demuxer first
    dm = muxer.Demuxer(name1[-1].lower())
    dec = None
    f = open(name, 'rb')
    snd = None
    s = " "
    while len(s):
        s = f.read(20000)
        if len(s):
            frames = dm.parse(s)
            for fr in frames:
                if dec == None:
                    # Open decoder
                    dec = acodec.Decoder(dm.streams[0])
                r = dec.decode(fr[1])
                if r and r.data:
                    if snd == None:
                        snd = wave.open(name2 + '.wav', 'wb')
                        snd.setparams(
                            (r.channels, 2, r.sample_rate, 0, 'NONE', ''))

                    snd.writeframes(r.data)
Example #3
0
 def __init__(self, file_name):
     super(audio_decoder, self).__init__()
     self.file_name = file_name
     ext = file_name.strip().split('.')[-1].lower()
     dm = muxer.Demuxer(ext)
     fin = open(file_name, 'rb')
     if not fin:
         raise "cannot find file %s" % file_name
     s = fin.read(3000000)
     r = dm.parse(s)
     
     print dm.streams
     self.decoder = None
     for aindex in xrange( len( dm.streams )):
       if dm.streams[ aindex ] and dm.streams[ aindex ][ 'type' ]== muxer.CODEC_TYPE_AUDIO:
         self.decoder = acodec.Decoder( dm.streams[ aindex ] )
         self.aindex = aindex
         break
     if not self.decoder:
         raise "no audio track found in given media file!"
     
     self.resampler = sound.Resampler( (dm.streams[ aindex ][ 'sample_rate' ], dm.streams[ aindex ][ 'channels' ]), 
                                       (constants.AUDIO_SAMPLE_RATE , 1) )
     self.ostream = data_stream(constants.AUDIO_SAMPLE_RATE, data_format = {'dtype':np.int16})
     self.odtype = np.int16
     self.demuxer = dm
     self.frames = r
     self.fin = fin
Example #4
0
def play(file_path):

    #file_path = "test.mp3"
    root, ext = path.splitext(file_path)
    demuxer = muxer.Demuxer(ext[1:].lower())
    decoder = None
    output = None

    file = open(file_path, 'rb')
    data = ' '
    while data:
        data = file.read(90000)
        if len(data):
            frames = demuxer.parse(data)
            for frame in frames:
                if decoder == None:
                    decoder = acodec.Decoder(demuxer.streams[0])

                audio_frame = decoder.decode(frame[1])
                if audio_frame and audio_frame.data:
                    if output == None:
                        output = sound.Output(audio_frame.sample_rate,
                                              audio_frame.channels,
                                              sound.AFMT_S16_LE)

                    #while self.stop:
                    #time.sleep(1)

                    output.play(audio_frame.data)

            while output.isPlaying():
                time.sleep(0.05)
Example #5
0
def aplayer( name, card, rate, tt ):
  import pymedia.muxer as muxer
  import pymedia.audio.acodec as acodec
  #import pymedia.audio.sound as sound
  import time
  dm= muxer.Demuxer( str.split( name, '.' )[ -1 ].lower() )
  
  f= open( name, 'rb' )
  #snd= resampler= dec= None
  dec=None
  s= f.read( 32000 )
  t= 0
  while len( s ):
    frames= dm.parse( s )
    if frames:
      for fr in frames:
        # Assume for now only audio streams
        if dec== None:
          print dm.getInfo(), dm.streams
          dec= acodec.Decoder( dm.streams[ fr[ 0 ] ] )
        
        r= dec.decode( fr[ 1 ] )
        if r:
            pass
            #print repr(r)
    
    s= f.read( 512 )
Example #6
0
def dumpPCM(name):
    import pymedia.audio.acodec as acodec
    import pymedia.muxer as muxer
    import time, wave, string, os
    name1 = str.split(name, '.')
    name2 = string.join(name1[:len(name1) - 1])
    # Open demuxer first
    dm = muxer.Demuxer(name1[-1].lower())
    dec = None
    f = open(name, 'rb')
    snd = None
    s = " "
    while len(s):
        s = f.read(20000)
        if len(s):
            frames = dm.parse(s)
            for fr in frames:
                if dec == None:
                    # Open decoder
                    dec = acodec.Decoder(dm.streams[0])
                r = dec.decode(fr[1])
                if r and r.data:
                    if snd == None:
                        snd = open(name2 + '.pcm', 'wb')

                    snd.write(r.data)
Example #7
0
 def run(self):
     dm = muxer.Demuxer(str.split(self.mfile, '.')[-1].lower())
     self.snd = dec = None
     s = self.getbuff()
     while len(s) and not self.stop:
         frames = dm.parse(s)
         if frames:
             for fr in frames:
                 if dec == None:
                     dec = acodec.Decoder(dm.streams[fr[0]])
                 r = dec.decode(fr[1])
                 if r and r.data:
                     if self.snd == None:
                         self.snd = sound.Output(int(r.sample_rate),
                                                 r.channels,
                                                 sound.AFMT_S16_LE)
                     data = r.data
                     self.snd.play(data)
         s = self.getbuff()
     # 淡出
     fade_out(self.snd)
     # 停止
     self.snd.stop()
     # 设置音量正常
     self.snd.setVolume(65535)
Example #8
0
def aplayer(name):
    import pymedia.muxer as muxer, pymedia.audio.acodec as acodec, pymedia.audio.sound as sound
    import time
    dm = muxer.Demuxer(str.split(name, '.')[-1].lower())
    f = open(name, 'rb')
    f.seek(0, 2)
    size = f.tell()
    f.seek(0, 0)
    snd = resampler = dec = None
    s = f.read(32000)
    t = time.time()
    while len(s):
        frames = dm.parse(s)
        if frames:
            for fr in frames:
                # Assume for now only audio streams
                if dec == None:
                    print dm.getInfo(), dm.streams
                    dec = acodec.Decoder(dm.streams[fr[0]])

                r = dec.decode(fr[1])
        if time.time() - t > SEEK_INTERVAL:
            newPos = random.randint(0, size / 2)
            print 'Seek to', newPos
            dec.reset()
            dm.reset()
            f.seek(newPos, 0)
            t = time.time()

        s = f.read(512)
def get_audio_analysis(audio):
    dm = muxer.Demuxer('ogg')
    frames = dm.parse(audio)
    print len(frames)
    #return dm
    #get_audio_decoder
    dec = acodec.Decoder(dm.streams[0])
def playAudio(filename):
    import pymedia.audio.acodec as acodec
    import pymedia.muxer as muxer
    import pymedia.audio.sound as sound
    import time

    name1 = str.split(filename, '.')
    # Open demuxer first
    dm = muxer.Demuxer(name1[-1].lower())
    dec = None
    snd = None
    s = " "
    f = open(filename, 'rb')

    while len(s):
        s = f.read(20000)
        if len(s):
            # 解析出最初的几帧音频数据
            frames = dm.parse(s)
            for fr in frames:
                if dec == None:
                    # Open decoder
                    dec = acodec.Decoder(dm.streams[0])
                #音频数据在 frame 数组的第二个元素中
                r = dec.decode(fr[1])
                if r and r.data:
                    if snd == None:
                        snd = sound.Output(r.sample_rate, r.channels,
                                           sound.AFMT_S16_LE)
                    snd.play(r.data)
    #8.延时,直到播放完毕
    while snd.isPlaying():
        time.sleep(0.5)
Example #11
0
 def _getStreamParams( self, vindex, aindex, vparams, aparams, r ):
   # Decode one video frame and 1 audio frame to get stream data
   vDec= aDec= None
   for d in r:
     try:
       # Demux file into streams
       if d[ 0 ]== vindex:
         if not vDec:
           vDec= vcodec.Decoder( vparams )
         vfr= vDec.decode( d[ 1 ] )
         if vfr and vfr.data:
           if vfr.aspect_ratio> .0:
             self.pictureSize= ( int( vfr.size[ 1 ]* vfr.aspect_ratio ), vfr.size[ 1 ] )
           else:
             self.pictureSize= vfr.size
           
           self.vBitRate= vfr.bitrate
           if aindex== -1 or aDec:
             break
       elif d[ 0 ]== aindex:
         if not aDec:
           aDec= acodec.Decoder( aparams )
         afr= aDec.decode( d[ 1 ] )
         if afr and afr.data:
           self.aBitRate= afr.bitrate
           self.aSampleRate= afr.sample_rate
           self.aChannels= afr.channels
           if vindex== -1 or vDec:
             break
     except:
       self.err.append( sys.exc_info() )
       break
Example #12
0
    def decompressWAV(fname):
        snd = None
        fname1 = str.split(fname, '.')
        fname2 = string.join(fname1[:len(fname1) - 1])
        # Open demuxer first

        dm = muxer.Demuxer(fname1[-1].lower())
        dec = None
        f = open(fname, 'rb')
        s = " "
        while len(s):
            s = f.read(20000)
            if len(s):
                frames = dm.parse(s)
                for fr in frames:
                    if dec == None:
                        # Open decoder

                        dec = acodec.Decoder(dm.streams[0])
                    r = dec.decode(fr[1])
                    if r and r.data:
                        if snd == None:
                            snd = wave.open(fname2 + '.wav', 'wb')
                            snd.setparams(
                                (r.channels, 2, r.sample_rate, 0, 'NONE', ''))

                        snd.writeframes(r.data)
        return snd
Example #13
0
    def play(self):
        self.stopFlag = True
        self.mp3 = []
        self.i = 0
        #dm = muxer.Demuxer(str.split(self.file_name, '.')[-1].lower())
        dm = muxer.Demuxer('mp3')
        #f = open(self.file_name, 'rb')
        snd = dec = None
        header = {
            #'Referer': 'http://www.xiami.com/',
            'User-Agent':
            'User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36',
        }
        request = urllib2.Request(self.file_name, headers=header)
        self.f = urllib2.urlopen(request)

        print 'Player Init Time:%s' % (time.time() - TIME)
        #s = self.f.read(32000)
        s = self.f.read(10000)
        #thread.start_new_thread(self.download,())

        self.tcpFlag = True

        #self.TcpThread = tcpThread(self)
        #self.TcpThread.start()

        #self.downloadthread = downloadThread(self.f, self.mp3)
        #self.downloadthread.start()

        while self.stopFlag:
            pass

        print 'first read long:%s' % (len(s))
        while len(s) and self.tcpFlag:
            frames = dm.parse(s)
            if frames:
                for fr in frames:
                    if dec == None:
                        dec = acodec.Decoder(dm.streams[fr[0]])

                    r = dec.decode(fr[1])
                    if r and r.data:
                        if snd == None:
                            snd = sound.Output(int(r.sample_rate), r.channels,
                                               sound.AFMT_S16_LE)
                        data = r.data
                        try:
                            snd.play(data)
                        except Exception, e:
                            print e
                            #sys.exit(0)
            '''
            if self.i<len(self.mp3):
                s = self.mp3[self.i]
            else:
                s = []
            self.i = self.i + 1
            '''
            s = self.f.read(2000)
Example #14
0
def recodeAudio(fName, fOutput, type, bitrate=None):
    # ------------------------------------
    import pymedia.audio.acodec as acodec
    import pymedia.muxer as muxer
    # Open demuxer
    dm = muxer.Demuxer(fName.split('.')[-1].lower())
    f = open(fName, 'rb')
    s = f.read(90000)
    dec = enc = mx = None
    print 'Recoding %s into %s' % (fName, fOutput)
    while len(s):
        frames = dm.parse(s)
        if frames:
            for fr in frames:
                # Assume for now only audio streams
                if dec == None:
                    # Open decoder
                    dec = acodec.Decoder(dm.streams[fr[0]])
                    print 'Decoder params:', dm.streams[fr[0]]

                # Decode audio frame
                r = dec.decode(fr[1])
                if r:
                    if bitrate == None:
                        bitrate = r.bitrate

                    # Open muxer and encoder
                    if enc == None:
                        params = {
                            'id': acodec.getCodecID(type),
                            'bitrate': bitrate,
                            'sample_rate': r.sample_rate,
                            'channels': r.channels
                        }
                        print 'Encoder params:', params
                        mx = muxer.Muxer(type)
                        stId = mx.addStream(muxer.CODEC_TYPE_AUDIO, params)
                        enc = acodec.Encoder(params)
                        fw = open(fOutput, 'wb')
                        ss = mx.start()
                        fw.write(ss)

                    enc_frames = enc.encode(r.data)
                    if enc_frames:
                        for efr in enc_frames:
                            ss = mx.write(stId, efr)
                            if ss:
                                fw.write(ss)

        s = f.read(100000)

    f.close()

    if fw:
        if mx:
            ss = mx.end()
            if ss:
                fw.write(ss)
        fw.close()
Example #15
0
 def _initAudio( self, params ):
   try:
     # Reset audio stream
     self._resetAudio()
     # Initializing audio codec
     self.ac= acodec.Decoder( params )
     self.aindex= -1
   except:
     self.err.append( sys.exc_info() )
Example #16
0
def aplayer(name, card, rate, tt):
    import pymedia.muxer as muxer, pymedia.audio.acodec as acodec, pymedia.audio.sound as sound
    import time
    dm = muxer.Demuxer(str.split(name, '.')[-1].lower())
    snds = sound.getODevices()
    if card not in range(len(snds)):
        raise 'Cannot play sound to non existent device %d out of %d' % (
            card + 1, len(snds))
    f = open(name, 'rb')
    snd = resampler = dec = None
    s = f.read(32000)
    t = 0
    while len(s):
        frames = dm.parse(s)
        if frames:
            for fr in frames:
                # Assume for now only audio streams

                if dec == None:
                    print dm.getInfo(), dm.streams
                    dec = acodec.Decoder(dm.streams[fr[0]])

                r = dec.decode(fr[1])
                if r and r.data:
                    if snd == None:
                        print 'Opening sound with %d channels -> %s' % (
                            r.channels, snds[card]['name'])
                        snd = sound.Output(int(r.sample_rate * rate),
                                           r.channels, sound.AFMT_S16_LE, card)
                        if rate < 1 or rate > 1:
                            resampler = sound.Resampler(
                                (r.sample_rate, r.channels),
                                (int(r.sample_rate / rate), r.channels))
                            print 'Sound resampling %d->%d' % (
                                r.sample_rate, r.sample_rate / rate)

                    data = r.data
                    if resampler:
                        data = resampler.resample(data)
                    if EMULATE:
                        # Calc delay we should wait to emulate snd.play()

                        d = len(data) / float(r.sample_rate * r.channels * 2)
                        time.sleep(d)
                        if int(t + d) != int(t):
                            print 'playing: %d sec\r' % (t + d),
                        t += d
                    else:
                        snd.play(data)
        if tt > 0:
            if snd and snd.getPosition() > tt:
                break

        s = f.read(512)

    while snd.isPlaying():
        time.sleep(.05)
Example #17
0
 def initAudio(self, params):
     try:
         # Reset audio stream
         self.resetAudio()
         # Initializing audio codec
         self.ac = acodec.Decoder(params)
     except:
         traceback.print_exc()
         self.err.append(sys.exc_info()[1])
Example #18
0
def videoDecodeBenchmark( inFile, opt ):
  dm= muxer.Demuxer( inFile.split( '.' )[ -1 ] )
  f= open( inFile, 'rb' )
  s= f.read( 400000 )
  r= dm.parse( s )
  v= filter( lambda x: x[ 'type' ]== muxer.CODEC_TYPE_VIDEO, dm.streams )
  if len( v )== 0:
    raise 'There is no video stream in a file %s' % inFile
  
  v_id= v[ 0 ][ 'index' ]
  print 'Assume video stream at %d index: ' % v_id
  
  a= filter( lambda x: x[ 'type' ]== muxer.CODEC_TYPE_AUDIO, dm.streams )
  if len( a )== 0:
    print 'There is no audio stream in a file %s. Ignoring audio.' % inFile
    opt= 'noaudio'
  else:
    a_id= a[ 0 ][ 'index' ]
  
  t= time.time()
  
  vc= vcodec.Decoder( dm.streams[ v_id ] )
  print dm.streams[ v_id ]
  if opt!= 'noaudio':
    import pymedia.audio.acodec as acodec
    import pymedia.audio.sound as sound
    ac= acodec.Decoder( dm.streams[ a_id ] )
  resampler= None
  frames= 0
  while len( s )> 0:
    for fr in r:
      if fr[ 0 ]== v_id:
        d= vc.decode( fr[ 1 ] )
        if fr[ 3 ]> 0:
          print 'Video PTS', fr[ 3 ]
        if d and d.data:
          frames+= 1
          #ff= open( 'c:\\test', 'wb' )
          #ff.write( d.data[ 0 ] )
          #ff.close()
      elif opt!= 'noaudio' and fr[ 0 ]== a_id:
        d= ac.decode( fr[ 1 ] )
        if resampler== None:
          if d and d.channels> 2:
            resampler= sound.Resampler( (d.sample_rate,d.channels), (d.sample_rate,2) )
        else:
          data= resampler.resample( d.data )

    s= f.read( 400000 )
    r= dm.parse( s )
    
    tt= time.time()- t
    print '%d frames in %d secs( %.02f fps )' % ( frames, tt, float(frames)/tt )
Example #19
0
    def run(self):
        logging.info('play started on ' + self.filename)
        dm = muxer.Demuxer(str.split(self.filename, '.')[-1].lower())
        snds = sound.getODevices()
        if 0 not in range(len(snds)):
            print 'Cannot play sound to non existent device %d out of %d' % (
                1, len(snds))
            self.endfunc()
            return
        f = open(self.filename, 'rb')
        snd = resampler = dec = None
        s = f.read(32000)
        t = 0
        while len(s):
            frames = dm.parse(s)
            if frames:
                for fr in frames:
                    # Assume for now only audio streams

                    if dec == None:
                        print dm.getInfo(), dm.streams
                        dec = acodec.Decoder(dm.streams[fr[0]])

                    r = dec.decode(fr[1])
                    if r and r.data:
                        if snd == None:
                            print 'Opening sound with %d channels -> %s' % (
                                r.channels, snds[0]['name'])
                            snd = sound.Output(int(r.sample_rate), r.channels,
                                               sound.AFMT_S16_LE, 0)

                        data = r.data
                        while (self.state == PAUSE):
                            time.sleep(.05)
                        if (self.state == STOP):
                            self.endfunc()
                            return
                        snd.play(data)

            s = f.read(BUFFER_SIZE)

        count = 0
        while snd.isPlaying():
            count = count + 1
            print "playing: ", str(count)
            time.sleep(.05)
            while (self.state == PAUSE):
                time.sleep(.05)
            if (self.state == STOP):
                self.endfunc()
                return

        self.endfunc()
Example #20
0
def play_by_pymedia(sound_file):
    file_type = str.split( sound_file, '.' )[ -1 ].lower()
    #1.二进制方法读取前 10000 个字节,保证能读到第一帧音频数据
    f = open( sound_file, 'rb' )
    data= f.read(4096)
    #data= f.read()

    #2.创建合成器对象,解析出最初的几帧音频数据
    import pymedia.muxer as muxer
    dm = muxer.Demuxer(file_type)
    frames = dm.parse( data )
    #print len(frames)

    #3.根据解析出来的 Mp3 编码信息,创建解码器对象
    import pymedia.audio.acodec as acodec
    #dec = acodec.Decoder( dm.streams[ 0 ] )
    #像下面这样也行
    params = {'id': acodec.getCodecID(file_type), 'bitrate': 128000, 'sample_rate': 44100, 'ext': 'mp3', 'channels': 2}
    dec= acodec.Decoder(params)

    if len(frames) > 1:
        #4.解码第一帧音频数据
        frame = frames[0]
        #音频数据在 frame 数组的第二个元素中
        r= dec.decode( frame[ 1 ] )
        print "sample_rate:%s , channels:%s " % (r.sample_rate,r.channels)
        #注意:这一步可以直接解码 r=dec.decode( data),而不用读出第一帧音频数据
        #但是开始会有一下噪音,如果是网络流纯音频数据,不包含标签信息,则不会出现杂音
    else:
        r=dec.decode(data)

    #5.创建音频输出对象
    import pymedia.audio.sound as sound
    snd = sound.Output( r.sample_rate, r.channels, sound.AFMT_S16_LE )

    #6.播放
    if r: snd.play_all(r.data)

    #7.继续读取、解码、播放
    while True:
        data = f.read(512)
        if len(data)>0:
            r = dec.decode( data )
            if r: snd.play_all(r.data)
        else:
            break

    #8.延时,直到播放完毕
    import time
    while snd.isPlaying(): time.sleep( .5 )
Example #21
0
    def main(self):

        dm = muxer.Demuxer(self.extension)

        shutdown = False
        decoder = None
        while self.anyReady() or not shutdown:
            while self.dataReady("inbox"):
                data = self.recv("inbox")

                frames = dm.parse(data)

                for frame in frames:

                    if not decoder:
                        # first time we get data from the demuxer
                        # we create the decoder
                        stream_index = frame[0]
                        decoder = acodec.Decoder(dm.streams[stream_index])

                        # decode our first frame
                        decoded = decoder.decode(frame[1])
                        # output the format of the audio
                        format = {
                            'channels': decoded.channels,
                            'sample_rate': decoded.sample_rate,
                            'format': pyMediaFormat2format[sound.AFMT_S16_LE],
                        }
                        self.send(format, "format")
                    else:
                        # otherwise we just decode a frame
                        decoded = decoder.decode(frame[1])

                    self.send(str(decoded.data), "outbox")

            self.send(4096, "needData")

            while self.dataReady("control"):
                msg = self.recv("control")
                if isinstance(msg, (producerFinished, shutdownMicroprocess)):
                    shutdown = True
                self.send(msg, "signal")

            if not shutdown:
                self.pause()
            yield 1
Example #22
0
def aplayer( name ):
	import pymedia.audio.acodec as acodec
	import pymedia.audio.sound as sound
        import pymedia.muxer as muxer
	import time
        dm= muxer.Demuxer( name.split( '.' )[ -1 ].lower() )
	f= open( name, 'rb' )
        s= f.read( 90000 )
        frames= dm.parse( s )
        dec= acodec.Decoder( dm.streams[ frames[ 0 ] [ 0 ] ] )
	# dec= acodec.Decoder( str.split( name, '.' )[ -1 ].lower() )
	br= None
	snd= None
	f.seek(0)
	s= f.read( 50000 )
	while len( s ):
		r= dec.decode( s )
		if snd== None:
			print 'Opening sound with %d channels( %d bitrate )' % ( r.channels, r.bitrate )
			snd= sound.Output( r.sample_rate, r.channels, sound.AFMT_S16_LE )
			br= r.bitrate
		if r:
			snd.play( r.data )
		ev= pygame.event.get() 
		s= f.read( 512 )
		for e in ev:
			if e.type== pygame.KEYDOWN: 
				if e.key== pygame.K_RIGHT:
					# Seek forward
					f.seek( SEEK_SEC* br/ 8, 1 )
					dec.reset()
				if e.key== pygame.K_LEFT:
					# Seek forward
					if f.tell()> SEEK_SEC* br/ 8: 
						f.seek( -SEEK_SEC* br/ 8, 1 )
					dec.reset()
				
				if e.key== pygame.K_ESCAPE:
					s= ''
					break
	
	while snd.isPlaying():
	  time.sleep( .05 )
Example #23
0
 def playCash(self, temp):
     try:
         d = None
         dns = 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=ikmdb;Data Source=%s;Persist Security Info=False;Jet OLEDB:System database=%s' % (self._insiderdb, self._sysdb)
         sql = 'SELECT TOP 1 iif ( IsNull(SCardType), "", SCardType ) AS SCardType, iif ( IsNull(InsiderMoney), "", InsiderMoney ) AS InsiderMoney FROM [InsiderInfo] WHERE InsiderNumber = "%s"' % temp['InsiderNumber']
         conn = win32com.client.Dispatch(r'ADODB.Connection')
         conn.Open(dns)
         rs = win32com.client.Dispatch('ADODB.Recordset')
         rs.Open(sql, conn, 1, 3)
         while not rs.EOF:
             d = { }
             d['InsiderMoney'] = string.atof(str(rs('InsiderMoney')).strip())
             d['SCardType'] = string.atoi(str(rs('SCardType')).strip())
             rs.MoveNext()
         rs.Close()
         conn.Close()
         if d:
             d['type'] = 'cash'
             d['level'] = config.memtype[d['SCardType']] + 'CASH'
             temp = d
         else:
             return None
         tt = []
         if self.queue.qsize() == 0:
             tt.append(temp['level'])
         if int(temp['InsiderMoney']) > config.switch_money:
             tt.append(str(int(temp['InsiderMoney'])))
         suffix = '.mp3'
         prefix = config.src
         for tem in tt:
             f = open((prefix + tem + suffix).encode('gbk'), 'rb')
             data = f.read()
             dm = muxer.Demuxer('mp3')
             frames = dm.parse(data)
             dec = acodec.Decoder(dm.streams[0])
             r = dec.decode(data)
             snd = sound.Output(r.sample_rate, r.channels, 32, config.cashSpeaker)
             snd.play(r.data)
             while snd.isPlaying():
                 time.sleep(0.1)
     except BaseException:
         config.logger.error(traceback.format_exc())
Example #24
0
 def run(self):
     f = open(self.addr, 'rb')
     data = f.read(10000)
     dm = muxer.Demuxer(self.codec)
     frames = dm.parse(data)
     print len(frames)
     dec = acodec.Decoder(dm.streams[0])
     frame = frames[0]
     r = dec.decode(frame[1])  #音频数据在 frame 数组的第二个元素中
     print "sample_rate:%s , channels:%s " % (r.sample_rate, r.channels)
     snd = sound.Output(r.sample_rate, r.channels, sound.AFMT_S16_LE)
     if r: snd.play(r.data)
     while True:
         if not self.playing: break
         data = f.read(512)
         if len(data) > 0:
             r = dec.decode(data)
             if r: snd.play(r.data)
         else:
             while snd.isPlaying():
                 time.sleep(.5)
             break
Example #25
0
    def main(self):

        dm = muxer.Demuxer(self.extension)

        shutdown = False
        decoder = None
        while self.anyReady() or not shutdown:
            while self.dataReady("inbox"):
                data = self.recv("inbox")

                frames = dm.parse(data)

                for frame in frames:

                    if not decoder:
                        stream_index = frame[0]
                        decoder = acodec.Decoder(dm.streams[stream_index])

                    raw = decoder.decode(frame[1])

                    data = {}
                    data['type'] = 'audio'
                    data['audio'] = str(raw.data)
                    data['channels'] = raw.channels
                    data['sample_rate'] = raw.sample_rate
                    data['format'] = mapping_format_from_pymedia[
                        sound.AFMT_S16_LE]
                    self.send(data, "outbox")

            while self.dataReady("control"):
                msg = self.recv("control")
                if isinstance(msg, (producerFinished, shutdownMicroprocess)):
                    shutdown = True
                self.send(msg, "signal")

            if not shutdown:
                self.pause()
            yield 1
Example #26
0
def aPlayer( name ):
  global sampleFreqs, exit, snd
  # Open analyzer for a mono signal
  analyzer= sound.SpectrAnalyzer( 1, SAMPLES, NUM_FREQS )
  resampler= None
  
  dec= acodec.Decoder( str.split( name, '.' )[ -1 ].lower() )
  f= open( name, 'rb' )
  snd= None
  s= f.read( 20000 )
  while len( s ) and exit== 0:
    r= dec.decode( s )
    if snd== None:
      print 'Opening sound with sample rate %d and channels %d' % ( r.sample_rate, r.channels )
      snd= sound.Output( r.sample_rate, r.channels, sound.AFMT_S16_LE )
      resampler= sound.Resampler( (r.sample_rate,r.channels), (r.sample_rate,1) )
    
    if r and len( r.data ):
      s1= resampler.resample( r.data )
      fTmp= analyzer.asBands( BANDS, s1 )
      sampleFreqs.append( ( snd.getPosition()+ snd.getLeft(), fTmp ) )
      snd.play( r.data )
      pp= snd.getPosition()
      x= 0
      while x< len( sampleFreqs ) and pp> sampleFreqs[ x ][ 0 ]:
        x+= 1
      
      for i in range( 0, x- 1 ):
        del( sampleFreqs[ i ] )
      
    s= f.read( 512 )
  
  # Wait until complete all sounds
  while snd.isPlaying():
    time.sleep( .05 )
  
  exit= 1
Example #27
0
    def mp3Thread(self, s_name):
        import pymedia.audio.acodec as acodec
        import pymedia.muxer as muxer
        import pymedia.audio.sound as sound

        dm  = muxer.Demuxer( str.split( str(sName), '.' )[ -1 ].lower() )
        f   = open( sName, 'rb' )
        s   = f.read(8192)
        fr  = dm.parse(s)
        dec = acodec.Decoder(dm.streams[0])
        r   = dec.decode(s)
        snd= sound.Output(r.sample_rate, r.channels, sound.AFMT_S16_LE)
        while len(s) > 0:
            if self.stop_mp3:
                break
            if r: snd.play(r.data)
            s = f.read(512)
            try:
                r = dec.decode(s)
            except:
                break

        while snd.is_playing(): time.sleep(.05)
        self.is_playing = False
Example #28
0
def voiceRecorderPlayer(secs, delay, interval, name):
    # Turn on the microphone input
    open(name, 'wb').close()
    mixer = sound.Mixer()
    controls = mixer.getControls()
    micControls= filter( lambda x: \
        x[ 'connection' ]== 'Microphone' and \
        x[ 'destination' ]== 'Recording Control' and \
        x[ 'name' ].count( 'Volume' )> 0, controls )
    if len(micControls):
        micControls[0]['control'].setActive()
        print 'Setting microphone input as active'

    # Minimum set of parameters we need to create Encoder
    cparams = {
        'id': acodec.getCodecID('mp3'),
        'bitrate': 128000,
        'sample_rate': 44100,
        'channels': 2
    }
    ac = acodec.Encoder(cparams)
    dm = muxer.Demuxer('mp3')
    dc = acodec.Decoder(cparams)
    sndIn = sound.Input(44100, 2, sound.AFMT_S16_LE)
    sndOut = sound.Output(44100, 2, sound.AFMT_S16_LE)
    sndIn.start()
    bytesWritten = 0
    bytesRead = 0
    t = time.time()
    paused = False

    # Loop until recorded position greater than the limit specified
    while sndIn.getPosition() <= secs:
        s = sndIn.getData()
        if s and len(s):
            f = open(name, 'ab')
            for fr in ac.encode(s):
                # We definitely should use mux first, but for
                # simplicity reasons this way it'll work also
                f.write(fr)
                bytesWritten += len(fr)

            f.close()
        else:
            # 1/10 of the second buffer for playback
            if sndOut.getLeft() < 0.1 and not paused:
                if bytesRead < bytesWritten + READ_CHUNK:
                    f = open(name, 'rb')
                    f.seek(bytesRead)
                    s = f.read(READ_CHUNK)
                    f.close()
                    bytesRead += len(s)
                    frames = dm.parse(s)
                    if frames:
                        for fr in frames:
                            r = dc.decode(fr[1])
                            if r and r.data:
                                sndOut.play(r.data)
            else:
                time.sleep(.01)

            # See if pause should be working
            i = int((time.time() - t) % (interval + delay))
            paused = i > interval

    # Stop listening the incoming sound from the microphone or line in
    sndIn.stop()
Example #29
0
# 建立Demuxer
demuxer = muxer.Demuxer(str.split(name, '.')[-1].lower())

# 讀取MP3檔案
f = open(name, 'rb')
stream = f.read(32000)

# 持續的播放stream
while len(stream):
   frames = demuxer.parse(stream)
   if frames:
      for fr in frames:
         
         if dec == None:
            # 輸出MP3資料
            print demuxer.getHeaderInfo()
            print demuxer.streams
            dec = acodec.Decoder(demuxer.streams[fr[0]])
        
         r = dec.decode(fr[1])
         if r and r.data:
            if mysound == None:
               mysound = sound.Output(r.sample_rate, r.channels, sound.AFMT_S16_LE)
          
            data = r.data
	    # 播放
            mysound.play(data)
    
   stream = f.read(512)
Example #30
0
def videoDecodeBenchmark(inFile, opt):
    pygame.init()
    pygame.display.set_mode((800, 600), 0)
    ovl = None

    dm = muxer.Demuxer(inFile.split('.')[-1])
    f = open(inFile, 'rb')
    s = f.read(400000)
    r = dm.parse(s)
    v = filter(lambda x: x['type'] == muxer.CODEC_TYPE_VIDEO, dm.streams)
    if len(v) == 0:
        raise 'There is no video stream in a file %s' % inFile

    v_id = v[0]['index']
    print 'Assume video stream at %d index: ' % v_id

    a = filter(lambda x: x['type'] == muxer.CODEC_TYPE_AUDIO, dm.streams)
    if len(a) == 0:
        print 'There is no audio stream in a file %s. Ignoring audio.' % inFile
        opt = 'noaudio'
    else:
        a_id = a[0]['index']

    t = time.time()

    vc = vcodec.Decoder(dm.streams[v_id])
    print dm.streams[v_id]
    if opt != 'noaudio':
        ac = acodec.Decoder(dm.streams[a_id])
    resampler = None
    frames = 0
    q = []
    while len(s) > 0:
        for fr in r:
            if fr[0] == v_id:
                d = vc.decode(fr[1])
                if d and d.data:
                    frames += 1
                    #ff= open( 'c:\\test', 'wb' )
                    #ff.write( d.data[ 0 ] )
                    #ff.close()
                    if not ovl:
                        ovl = pygame.Overlay(YV12, d.size)
                    q.append(d)
                    if len(q) > 4:
                        try:
                            ovl.set_data(q[0].data)
                            ovl.display()
                        except:
                            ovl.display(q[0].data)

                        del (q[0])
            elif opt != 'noaudio' and fr[0] == a_id:
                d = ac.decode(fr[1])
                if resampler == None:
                    if d and d.channels > 2:
                        resampler = sound.Resampler(
                            (d.sample_rate, d.channels), (d.sample_rate, 2))
                else:
                    data = resampler.resample(d.data)

        s = f.read(400000)
        r = dm.parse(s)

        tt = time.time() - t
        print '%d frames in %d secs( %.02f fps )' % (frames, tt,
                                                     float(frames) / tt)

        ev = pygame.event.get()
        for e in ev:
            if e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE:
                s = ''
                break