前面我们讲到了可以自定义输入汉字,然后用点阵字来展现,接下来我们挖掘下更有趣的玩法。想法来自于听歌时桌面动态歌词,我们的点阵字既然可以自定义输入识别,何不读取歌词文件随着歌曲播放动态显示呢?

下面介绍设计思路,截图如下

歌词lrc文件

玩过mp3的话对此应该不陌生,就是配在歌曲mp3文件边上后缀为lrc的文件。lrc是英文lyric即歌词的缩写。lrc文件可以用文本编辑器直接打开,其内容分为标识标签和时间标签,如图

标识标签指 [ti:歌曲名]、[ar:歌手名]、[al:专辑名]、 [offset:时间补偿值]这类介绍信息。

时间标签指[mm:ss.ff]加对应歌词,mm:ss.ff是分钟和精确到百分位的秒数,当歌曲播放到特定的时间点,根据时间标签读取对应的歌词文本,实现歌词同步、动态显示。

搞清lrc的格式,思路也就清晰了:读取文件中的时间标签,解析出我们需要的时间和对应的歌词文本,定时按文本内容打印输出点阵字。

读取时间标签

涉及到lrc文件的编码格式,直接读取会报错,引入codecs来读取文件。

读取文本我采用了readlines(),读取整个文件所有行,每行作为一个元素保存到一个列表list中。

学python的新手朋友可以回顾下读取文件read()、readline()和这里的readlines()的区别,这里选用readlines() 是因为lrc本身不大,直接读到列表中也方便后续操作。

接下来都是Python入门的应用,拿到读取出的列表,遍历列表,也就是检查每一项,挑选出符合时间标签格式的字符串,把字符串分离成时间数字和歌词文本。

按时间打印歌词

以“[00:02.88]无条件“为例,在第2.88秒时将“无条件”打印输出,再到下一句的5.59秒,输出下一个文本,这里我采用了比较简单的方式:利用time模块中的time.sleep(t) 来推迟执行命令。

这样做忽略了执行代码的运行时间,但是好在代码简单、新手友好,而且忽略的影响并不明显。

代码概览

歌词转点阵字

通过导入定义点阵字打印方法的py文件名 import printPlay,在新的代码文件中直接调用printPlay.printPlay()来实现。

在之前printPlay.py文件基础上,我做了些改动,将运行printPlay.py时要执行的代码放入main中并对__name__先做个判断再执行。

__name__是标识模块名字的一个系统变量:假如当前模块是主模块来直接执行,那么此模块名字就是__main__,通过判断直接执行主函数内容;假如此模块是被import的,则此模块名字为文件名字,跳过if语句中的内容,再被import中的文件中,通过 文件名.函数 来执行被调用的函数。

歌曲播放

歌词问题解决,接下来是歌曲,我们选用pygame的mp3播放功能。这个需要安装pygame, 可以通过pip install pygame来直接操作。

装好后在py文件中import pygame ,接下来就是三行代码来初始化、读取、播放。

注意,要将mp3和lrc文件都放在和py文件同一个文件夹,如果改变路径,则需要在代码中lrc和mp3读取处添加对应路径。

点阵字python_Python点阵字玩转动态歌词相关推荐

  1. python 桌面歌词_Python点阵字玩转动态歌词

    原标题:Python点阵字玩转动态歌词 前面我们讲到了可以自定义输入汉字,然后用点阵字来展现,接下来我们挖掘下更有趣的玩法.想法来自于听歌时桌面动态歌词,我们的点阵字既然可以自定义输入识别,何不读取歌 ...

  2. python设置桌面歌词_Python点阵字玩转动态歌词

    前面我们讲到了可以自定义输入汉字,然后用点阵字来展现,接下来我们挖掘下更有趣的玩法.想法来自于听歌时桌面动态歌词,我们的点阵字既然可以自定义输入识别,何不读取歌词文件随着歌曲播放动态显示呢? 下面介绍 ...

  3. python获取中文字体点阵坐标_点阵汉字显示 - freecamel的个人空间 - OSCHINA - 中文开源技术交流社区...

    目录: DOS下的点阵汉字 汉字的内码 汉字字模 汉字库文件 打印字库文件和HZK12 main() { unsigned char *s,*e="ABcd",*c="你 ...

  4. 计算机表格嵌套,Excel中轻松玩转“动态”表格嵌套EXCEL基本教程 -电脑资料

    使用Excel做表格,真是好处多多,也可以说是"地球人都知道",但是如何有效提高办公效率,做出即美观效率又高的表格就不是每个人都知道的了, 应用场合:某表格中有一部分内容是需要经常 ...

  5. 关于我喜欢计算机的作文600字,关于我喜欢的字作文600字5篇

    关于我喜欢的字作文600字5篇 无论是身处学校还是步入社会,大家都经常接触到作文吧,根据写作命题的特点,作文可以分为命题作文和非命题作文.你所见过的作文是什么样的呢?下面是小编帮大家整理的我喜欢的字作 ...

  6. 5000字、12字 连环炮、一张图快速解决线程池

    5000字.12字 连环炮.一张图快速搞定线程池 2021-04-19 15:41·java互联网架构 今天我给大家总结了线程池的12连环炮. 1.为什么要创建线程池? 2.创建线程池有哪些方式? 3 ...

  7. smartfroms word编辑_请教Microsoft Office Word 2007 SmartArt图形文本如何直接在里面添加字,修改字。如图。...

    展开全部 观型外观 Office PowerPoint 2007 具有一个称为 Microsoft Office Fluent 用户界面 的全新直观用户界面:与早期版本的 PowerPoint 相比, ...

  8. 汉字编码新尝试:字理组字编码方案v0.0

    综述 众所周知,汉字中的大多数是由偏旁部首(统称为部件)组合出来的. 字理组字,就是按照汉字字理,组合构造出来的字,可以用表里的部件组出任何"讲道理"的字. "这字是啥加 ...

  9. 2020-12-7(字节,半字,字,双字总结)

    文章目录 一.对于嵌入式底层开发人员 二.对于应用程序开发人员 总结: 一.对于嵌入式底层开发人员 字(Word):在ARM体系结构中,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般 ...

最新文章

  1. vue2.0 配置 选项 属性 方法 事件 ——速查
  2. Javascript操作table,tr,td和表格CSS样式设置小常识
  3. 算法笔记(一)——简述时间、空间复杂度分析
  4. 关于MFC的CString 访问越界问题
  5. idea在java文件中查找_Java开发工具IntelliJ IDEA使用源代码系列教程(四):在文件中搜索目标...
  6. 数字换算成万单位_烘焙达人必收干货!各种模具的单位换算都在这里,再也不蒙了...
  7. ROS学习笔记3(创建一个ROS Package)
  8. LAMP+Zabbix课程总结
  9. 集合框架之ArrayList集合
  10. You don’t have permission to access / on this server
  11. 黑苹果相关驱动介绍及其使用方法
  12. java手机号码加密_用户名-手机号加密特殊处理
  13. win10计算机怎么拨号上网,win10系统怎么设置拨号上网 设置拨号上网的方法
  14. Android传感器、语音识别、定位系统、Google Map API、快捷方式、widget编程总结及示例...
  15. verilog读入txt文件
  16. 10060 mysql_连接MySQL错误:Can't connect to MySQL server (10060)
  17. [Neuronal Dynamics 笔记] I Foundations of Neuronal Dynamics - 2 The Hodgkin-Huxley Model
  18. 常用的软件测试工具大全
  19. 机器学习实战:车牌识别系统
  20. 用Python演奏《太阳照常升起》

热门文章

  1. visibility
  2. 【CentOS 7 Web服务器配置】
  3. 音乐翻唱软件测试初学者,~~经典歌曲的国语粤语版本对照~~
  4. Ubuntu与Windows之间设置共享文件夹
  5. 对已过去三年来大学生活的总结与建议
  6. JAVA实现MD5带盐加密_MD5加盐加密
  7. 中国工程院院士高文ICTC演讲《国家新一代人工智能发展规划》
  8. 研究生考试又来到,网上确认证件照怎么拍?
  9. Karatsuba-Ofman乘法器
  10. 如何解决 vue 初始化页面闪动问题