pyMedia
中文例子,我试了,狗屁不通 http://www.cnblogs.com/myqiao/archive/2011/08/07/2129777.html
此库较老,官方版本不支持 python 2.7 帮助
http://pymedia.org/docs/pymedia.audio.sound.html#Input-getPosition
例子
#! /bin/env python import sys EMULATE=0 def myplayer( name ) : aplayer( name , 0 , 1 , -1 ) 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 ) # ---------------------------------------------------------------------------------- # Play any compressed audio file with adjustable pitch # http://pymedia.org/ #if len( sys.argv )< 2 or len( sys.argv )> 5: #print "Usage: aplayer <filename> [ sound_card_index, rate( 0..1- slower, 1..4 faster ) ]" #else: #i= 0 #r= 1 #t= -1 #if len( sys.argv )> 2 : #i= int( sys.argv[ 2 ] ) #if len( sys.argv )> 3 : #r= float( sys.argv[ 3 ] ) #if len( sys.argv )> 4 : #t= int( sys.argv[ 4 ] ) #aplayer( sys.argv[ 1 ], i, r, t ) if __name__ == '__main__' : '''''' myplayer("he's a pirate.mp3")