整合了网易云的一些API,想写一个terminal版的音乐播放器,但是还没有想好写成什么样子。

  暂时写了一个必须又的功能:带歌词滚动的播放器,用了pygame里的mixer来播放音乐。

  准备有时间的时候实现一下其他的功能。

 # -*- coding:utf-8 -*-
import re
import os
import time
import copy
import threading
import pygame
from pygame import mixer
import itertools def read_file(path):
if not os.path.exists(path):
print 'path : \'' + path + '\' not find.'
return []
content = ''
try:
with open(path, 'r') as fp:
content += reduce(lambda x, y: x + y, fp)
finally:
fp.close()
return content.split('\n') class Lyrics:
TIME_AXIS_REGEXP = re.compile('\[(\d+)\:(\d+)\.(\d+)\]')
DEL_TIME_AXIS_REGEXP = re.compile('\[\d+\:\d+\.\d+\](.*)') def __init__(self, path):
self.path = path def _get_time_diff(self, line):
tm = map(lambda each: map(int, each), self.TIME_AXIS_REGEXP.findall(line))
tm = map(lambda each: each[0] * 60 * 1000 + each[1] * 1000 + each[2], tm)
return (tm[0], line) def _show_lyric(self, line):
print line def static_lyric(self, lyrics):
for line in lyrics:
self._show_lyric(line) def dynamic_lyric(self, lyrics):
for line in lyrics:
try:
time.sleep(float(line[0]) / 1000.0)
self._show_lyric(line[1])
except:
pass
while mixer.music.get_busy() == True:
time.sleep(5) def get_lyric(self):
lyrics = read_file(self.path)
tmp_lyric = lyrics
lyrics = filter(lambda line: len(self.TIME_AXIS_REGEXP.findall(line))!=0, lyrics)
if len(lyrics) == 0:
return False, tmp_lyric
lyrics = map(self._get_time_diff, lyrics)
tmp_lyric = copy.deepcopy(lyrics[:-1])
tmp_lyric.insert(0, (0, ''))
lyrics = map(lambda x: (x[0][0]-x[1][0], x[0][1]), zip(lyrics, tmp_lyric))
lyrics = map(lambda x: (x[0], self.DEL_TIME_AXIS_REGEXP.findall(x[1])[0]), lyrics)
return True, lyrics def show_lyric(self):
play_option, lyrics = self.get_lyric()
if play_option == True:
self.dynamic_lyric(lyrics)
else:
self.static_lyric(lyrics) def play(mp3_path, lrc_path):
lyrics = Lyrics(lrc_path)
mixer.init()
track = mixer.music.load(mp3_path)
mixer.music.play(1)
t_lyric = threading.Thread(target=lyrics.show_lyric)
t_lyric.start()
t_lyric.join() def __main__():
play_list = [['./test1.mp3','./test1.lrc'], ['./test2.mp3','./test2,lrc'], ['./test3.mp3','./test3.lrc']]
play_list = itertools.cycle(play_list)
while True:
tmp = play_list.next()
play(tmp[0], tmp[1]) if __name__ == '__main__':
__main__()

[Python]简易terminal歌词滚动播放器的更多相关文章

  1. HTML5实践之歌词同步播放器

    歌曲播放我们会发现他的兼容性不是很好,譬如IE上能播放的flash播放器,再firfox或者chrome上就不是很好的应用了,因为有插件的阻碍!HTML5的出现让这一切成为了可能,但是播放器虽然播放了 ...

  2. 用JavaScript实现歌词滚动播放

    各种音乐播放器上都有一个自动滚动播放歌词的功能,那么这个功能用JavaScript怎么实现呢?请看下文. 一般音乐播放器使用的歌词格式都是lrc,为了方便处理,我们这里使用XML格式的歌词.介绍一个网 ...

  3. 基于Basys2开发板的简易电子琴和音乐播放器设计

    背景:华中科技大学 电测综合实验 主要功能:Basys2开发板外接一个扬声器(或无源蜂鸣器也可)实现电子琴和音乐播放器的功能.其中由于开发板上只有4个按键,所以电子琴功能只做了4个音调,分别对应于4个 ...

  4. 使用python打造一款音乐播放器

    作者qq:64761294 编程/考试交流群:834531270 欢迎交流 核心播放模块(pygame内核) import time import pygame import easygui as g ...

  5. python基础===基于cv2的播放器

    import cv2 import threading import win32gui,win32con class Producer(threading.Thread): ""& ...

  6. Lily_music 网页音乐播放器 -可搜索(附歌词联动播放效果解说)

    博客地址:https://ainyi.com/59 写在前面 这是我今年(2018)年初的小项目,当时也是手贱,不想用别的播放器,想着做一个自己的网页播放器,有个歌曲列表.可关键词搜索.歌词滚动播放的 ...

  7. C#winfrom播放器动态加载歌词

    上周我们进行了结业项目答辩,是播放器项目.有一个关于播放器变唱歌边加载歌词的方法特别有意思,像酷狗那样子歌词和歌曲同步滚播的样子. 这里的工具是Visual Studio 2013,使用语言是C#和. ...

  8. (jsp/html)网页上嵌入播放器(常用播放器代码整理) http://www.jb51.net/article/37267.htm

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助   这个其实很简单,只要在HTML上添加以上代码就O ...

  9. Qt开发Gif播放器

    一.资源下载地址 https://www.aliyundrive.com/s/jBU2wBS8poH 本项目路径:项目->免费->Gif播放器(包含整个工程源码,vs2019打开即可编译运 ...

随机推荐

  1. Issue 2:Introduction 方法论

    1 清晰的思路 论文投稿完毕,彻底完事儿后,原本很反感的论文书写过程也有了些许心得:论文就是科研工作的文字总结,知识再提炼的过程. 想要写好Introduction,脑子里的一条主线必须清楚. 1.1 ...

  2. CentOS6.6安装及配置vsftpd文件服务器

    1.安装vsftpd和db4-utils,后者用来生成密码库文件,命令如下: # yum install -y vsftpd db4* 2.修改SELINUX,命令如下: # vim /etc/sys ...

  3. http 登录Digest认证相关知识

    Digest access authentication https://en.wikipedia.org/wiki/Digest_access_authentication Digest acces ...

  4. Fatal error: Call to undefined function curl_init()问题

    最近分别在win7和Win8.win10 上分别安装php 高版本!都遇到了这个问题! 一.win7系统, apache2.2/apache2.4, php5.2升级到5.4. 这个比较容易: 1. ...

  5. spring Date JPA的主要编程接口

    Repository:最顶层的接口,是一个空接口,主要目的是为了同一所有Repository的类型,并且让组件扫描的时候自动识别. CrudRepository:是Repository的子接口,提供增 ...

  6. HDU 5063 Operation the Sequence(仔细审题)

    http://acm.hdu.edu.cn/showproblem.php?pid=5063 题目大意: 题目意思还是比较简单.所以就不多少了.注意这句话,对解题有帮助. Type4: Q i que ...

  7. IOS关于不同字体和不同颜色的选择

    在项目中,用到一个功能,就是不同文字和不同颜色字体选择, 界面如下:,效果如下: 这个功能主要用到了textview的几个代理办法,其中一个重要的问题就是,在英文下和英文下的不同判断方式,以及是否有追 ...

  8. Python 的安装与配置(Windows)

    Python2.7安装配置 python的官网地址:https://www.python.org/ 我这里下载的是python2.7.12版本的 下载后点击安装文件,直接点击下一步知道finally完 ...

  9. 学习IO流

    学习IO流,不得不提到的就是JavaIO流.流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接受端就是流,流机制是Java及C++中的一个重要机制,通过流我们可以自由得控制文件, ...

  10. app推送中的通知和消息区别

    最近在做mqtt及其他消息推送的功能,推送服务挺多的,小米推,极光推,华为推,个推等,当然还有苹果的apns.感觉都差不多,尝试了apns,小米推和个推,各个厂家都提供的有sdk,demo. 关于通知 ...