python终端播放音乐同步显示本地或网络歌词,python播放音乐,
<python终端播放音乐同步显示本地或网络歌词>

1.[python终端播放音乐同步显示本地或网络歌词代码][Python]代码

#!/usr/bin/python# -*- encoding:utf-8 -*-#=========================================# Filename : music.py# Filetype : Python# Author   : Colben# Create   : 2015-08-04 20:50:17#=========================================import sys, os, time, subprocess, re, chardet, urllib2, json, threadingdef load_lrc(lrc_basename):    try:        lrc_contains = open(lrc_basename+'.lrc',  'rb').read()    except:        print '\033[4;0H\033[K\t Local lrc not found, checking internet ...'        try:            lrc_contains = urllib2.urlopen(json.loads(urllib2.urlopen('http://geci.me/api/lyric/'+os.path.split(lrc_basename)[1]).read())['result'][0]['lrc']).read()        except Exception, e:            print '\033[4;0H\033[K\t Lrc not found ...'            return    try:        lrc_fp.close()    except:        pass    encoding = chardet.detect(lrc_contains)['encoding']    if 'utf-8' != encoding:        lrc_contains = lrc_contains.decode(encoding).encode('utf-8')    for eachline in re.split(r'\n', lrc_contains):        line = re.split(r']', eachline)        if 1 < len(line):            for tm in line[0:-1]:                try:                    time = re.match(r'(\d\d)\s*:\s*(\d\d)',tm.strip(' [')).groups()                    pos = 60*int(time[0]) + int(time[1])                    lrc[pos] = line[-1]                except Exception, e:                    pass    returndef main(song):    global lrc    lrc = {}    print '\033[2J\033[2;0H\tPlaying %s ...'%song[:60]    try:        p = subprocess.Popen('mplayer %s 2>&1'%song, stdout = subprocess.PIPE, shell = True)    except Exception, e:        print '\033[9;0H\t%s'%e        p.kill()        return 1    while True:        match = re.match(r'A:.*[\d:.()]* of (\d+)', p.stdout.read(30))        if None != p.poll():            print '\033[9;0H\tFailed to recognize file format .'            return 1        if not match:            output = p.stdout.readline()        else:            tot_time = int(match.group(1)) - 1            for jump in range(1, 10):                if 70 >= tot_time/jump:                    break            #print '\033[15;0H\ttotal time: %d'%tot_time            break    print '\033[?25l'    thread_load_lrc = threading.Thread(target = load_lrc, args = (os.path.splitext(song)[0], ))    thread_load_lrc.start()    while True:        cur_char = p.stdout.read(1)        if 'A' == cur_char:            try:                cur_time = int(p.stdout.read(5)[1:])                print '\033[6;0H\033[K\tCurrent %d / Total %d'%(cur_time, tot_time)                print '\033[1;0H', '-'*(tot_time/jump)                print '\033[1;0H', '='*(cur_time/jump)                print '\033[7;0H', '-'*(tot_time/jump)                print '\033[7;0H', '='*(cur_time/jump)                if tot_time <= cur_time:                    print '\033[8;0H\033[K\tquit'                    break                print '\033[4;0H\033[K\t%s'%lrc[cur_time]            except Exception, e:                #print '\033[17;0H\tERROR:', e                pass        elif 'E' == cur_char:            print '\033[8;0H\033[K\tquit'            break    p.wait()    print '\033[10;0H\033[?25h'    return 0if '__main__' == __name__:    if 2 != len(sys.argv) or not os.path.isfile(sys.argv[1]):        print '\nUsage:', sys.argv[0], '{exist music filename}\n'    else:        main(sys.argv[1])

2.[图片] a.png


编橙之家文章,

评论关闭