代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Python
】
终端播放音乐同步显示本地或网络歌词
作者:
Colben
/ 发布于
2015/8/10
/
972
在前面播放的基础上添加了网络歌词api
#!/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, threading def 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 return def 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 0 if '__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])
试试其它关键字
终端播放音乐
同步显示
本地或网络歌词
同语言下
.
比较两个图片的相似度
.
过urllib2获取带有中文参数的url内容
.
不下载获取远程图片的宽度和高度及文件大小
.
通过qrcode库生成二维码
.
通过httplib发送GET和POST请求
.
Django下解决小文件下载
.
遍历windows的所有窗口并输出窗口标题
.
根据窗口标题调用窗口
.
python 抓取搜狗指定公众号
.
pandas读取指定列
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
Colben
贡献的其它代码
(
2
)
.
播放歌曲,同步显示本地歌词
.
终端播放音乐同步显示本地或网络歌词
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3