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)
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)
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
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)
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 )
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)
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)
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)
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
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
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)
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()
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() )
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)
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])
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 )
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()
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 )
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
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 )
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())
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
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
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
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
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()
# 建立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)
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