linux音乐播放 桌面歌词,linux终端播放音乐歌词同步显示

Author : Colben

Platform : Linux

Dependence : mplayer

1.[代码]只能加载本地同目录同名歌词

#!/usr/bin/python

# -*- coding: utf-8 -*-

#=========================================

# Filename : music.py

# Filetype : Python

# Author : Colben

# Create : 2015-06-30 22:17:15

#=========================================

import sys, os, time, subprocess, re, chardet

def load_lrc(lrc_file):

try:

lrc_contains = open(lrc_file, 'rb').read()

encoding = chardet.detect(lrc_contains)['encoding']

if 'utf-8' != encoding:

lrc_contains = lrc_contains.decode(encoding).encode('utf-8')

except Exception, e:

print '\033[4;0H\033[K\tNo lrc or in encoding found'

return {}

lrc = {}

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:

#print '\033[4;0H\033[K\tLrc fromat error'

#lrc_fp.close()

#return {}

pass

#lrc_fp.close()

return lrc

def main(song):

print '\033[2J\033[2;0H\tPlaying %s ...'%song[:60]

p = subprocess.Popen('mplayer %s 2>/dev/null'%song, stdout = subprocess.PIPE, shell = True)

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'

lrc = load_lrc(os.path.splitext(song)[0] + '.lrc')

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])

2.[图片] a.png

25141211_nahD.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值