主要思路,使用python播放音乐,监控鼠标操作得到每一句歌词对应的时间信息,最终得到带有时间轴信息的歌词文件。使用的工具有道云笔记,主要用于在一些不能选中正文复制内容的网站上快速获取歌词,这部分应该可以用爬虫替代

pygame

1. 获取音乐歌词文件

由于我是在oricon上得到歌词,比如乃木坂46的3专里的《スカイダイビング》,歌曲发售之后在该网站都可以查找到歌词。还是以这首歌为例,歌词地址満月が消えたの歌詞 | 乃木坂46,由于无法选择复制,所以我这里得到歌词比较快捷的方法是使用有道云笔记的网页版插件,生成网页剪报,剪报可以识别网页的正文并以文档的形式保存下来,这样,我们打开云笔记找到对应的网页剪报时,里面的内容就可以复制出来了。保存成lrc.txt以备用:

2. 使用python播放音乐并打上时间轴

这里使用python的pygame的库播放音乐,在播放音乐的时候,监控鼠标的点击,鼠标进行一次点击,则认为此时出现了一句新的歌词,打上时间轴。

具体代码如下,如要使用请替换对应的文件。

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

filename='skydiving.mp3'

bg1='ikoma.jpg'

bg2='reika.jpg'

bg3='mai.jpg'

b='C.jpg'

import sys

import os

import pygame

from pygame.locals import *

def formattime(t):

if t/10 == 0:

return '0'+str(t)

else:

return str(t)

def ms2time(t):

m = t/60000

t = t%60000

s = t/1000

t = t%1000

minsec = formattime(m)+':'+formattime(s)+'.'+str(t)

return minsec

def playmusic():

rect=(0,0)

n=0

m=3

pygame.init()

screen = pygame.display.set_mode((300, 360), 0, 32)

#创建了一个窗口

pygame.display.set_caption("Nogizaka46")#设置窗口标题

background = pygame.transform.scale(pygame.image.load(bg1), (300, 360))

icon = pygame.image.load(b)

pygame.display.set_icon(icon)

#pygame.mixer.init()

pygame.mixer.music.load(filename)

pygame.mixer.music.play()

while True:#主循环 sds

for event in pygame.event.get():

if event.type ==QUIT:

pygame.quit()

sys.exit()

pressed_keys = pygame.key.get_pressed()

if event.type == pygame.MOUSEBUTTONDOWN:

n+=1

if n%m==0:

background = pygame.transform.scale(pygame.image.load(bg1), (300, 360))

rect = background.get_rect()

screen = pygame.display.set_mode((rect.width, rect.height))

if n%m==1:

background = pygame.transform.scale(pygame.image.load(bg2), (300, 360))

rect = background.get_rect()

screen = pygame.display.set_mode((rect.width, rect.height))

if n%m==2:

background = pygame.transform.scale(pygame.image.load(bg3), (300, 360))

rect = background.get_rect()

screen = pygame.display.set_mode((rect.width, rect.height))

t = pygame.mixer.music.get_pos() #return ms

minsec = ms2time(t)

with open('time.txt', 'a+') as f:

f.write('['+minsec+']'+'\n')

screen.blit(background,rect)

pygame.display.update()

if __name__ == "__main__":

playmusic()

运行时,播放的窗口会显示图片,图片对应代码中的bg1、bg2、bg3变量指向的图片。播放的界面如下所示,此时音乐开始播放。

在界面中进行鼠标点击操作,代码中的

if event.type == pygame.MOUSEBUTTONDOWN

会监控到并记录下点击的时刻对应音乐的播放时间,记录到time.txt文件中。每次点击之后,播放界面的小姐姐的图片都会更换哦~

音乐播放完毕,每句歌词对应的时间也记录了下来。根据歌词的分段对time.txt进行简单的修改,修改完两个文件如下所示,左右每行是一一对应的。3. 对歌词和时间文件进行合并

这个就比较简单了,按行分别读取两个txt文件并写入新的文件。由于文件的行数未知,这里使用的方法是先获取行数,然后按行依次读取。当然由于这部分比较简单,也可以不用这种方式实现。

f1 = open('lrc.txt','r')

linenum = len(f1.readlines())

f1.close()

f1 = open('lrc.txt','r')

f2 = open('time.txt','r')

for i in range(linenum):

try:

lrc = f1.readline()

time = f2.readline()

line = time.strip()+' '+lrc

with open('final.txt','a+') as f:

f.write(line)

except:

break

f1.close()

f2.close()

f.close()最后就可以得到带时间轴的歌词文件了

虽然应该是有一些播放器好像是自带类似功能的,但是自己没事写点python实现这些小功能感觉还是挺有意思的。

4. 一点疑问

在制作完歌词后校对的时候发现存在一个问题:比如3分20秒处有一句歌词A,从头开始播放,3分20秒该句歌词在音乐中出现,但是如果播放的时候不从头开始,而是跳转到3分10秒,那么歌词A会在3分25秒出现,不知道是什么原因,如有大神知道,还望赐教。

python播放音乐同步歌词_使用python播放音乐并制作LRC歌词文件相关推荐

  1. LRC歌词制作LRC歌词制作

    所谓LRC歌词是指与播放的MP3歌曲同步显示的歌词,对于音文秀VT3100还包括与外语语音同步播放的文字.LRC歌词制作实质上是把歌词或文字,与歌曲或语音建立起一种时间对应关系.为叙述方便以下无论是与 ...

  2. python播放音乐同步歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码

    使用python扫描本地音乐并下载歌词 这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀.... 先简单的说下吧,百度提供了一个音乐搜索的a ...

  3. python音乐同步歌词_使用python扫描本地音乐并下载歌词

    这次这个真的是干货哦,昨晚弄了半晚上,从8点吃完饭就开始写,一直到了快12点才弄好,新手伤不起呀. 先简单的说下吧,百度提供了一个音乐搜索的api,你想百度请求类似于 http://box.zhang ...

  4. python soup歌词_【python】 爬取网易云音乐 专辑图片+歌词

    要求 下载一百首歌曲,相关图片以及相关文字信息 存储方式分别为: .mp3 .txt .png 比如第一首歌曲相关信息为001.mp3\001.txt\001.png 觉得像是小朋友的抄写作业有没有- ...

  5. python下载网页歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码

    使用python扫描本地音乐并下载歌词这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀.... 先简单的说下吧,百度提供了一个音乐搜索的ap ...

  6. python爬虫qq音乐教学视频_爬取QQ音乐(讲解爬虫思路)

    一.问题描述: 本次爬取的对象是QQmusic,为自己后面做django音乐网站的开发获取一些资源. 二.问题分析: 由于QQmusic和网易音乐的方式差不多,都是讲歌曲信息放入到播放界面播放,在其他 ...

  7. python做审计底稿视频_最新Python教学视频,每天自学俩小时,让你offer拿到手软...

    2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...

  8. python怎么做软件程序_看 Python 超级程序员使用什么开发工具

    Python超级程序员使用的开发工具 我以个人的身份采访了几个顶尖的Python程序员,问了他们以下5个简单的问题: 当前你的主要开发任务是什么? 你在项目中使用的电脑是怎样的? 你使用什么IDE开发 ...

  9. python判断题题库_《Python程序设计》判断题1-240题

    1.Python是一种跨平台.开源.免费的高级动态编程语言.(对) 2.Python 3.x完全兼容Python 2.x.(错) 3.Python 3.x和Python 2.x唯一的区别就是:prin ...

  10. python学起来好难受_学习 Python 很吃力,我是不是可以放弃编程了?

    从0到1,是最艰难吃力的一步. 我15年的时候,在其它论坛发过一篇帖子,也是零基础开始学Python的.阅读量挺高的. 希望对题主有帮助. 使用前说明: 本人大学专业是CS,大学的时候编程很差,毕业后 ...

最新文章

  1. 对下载的包进行修改--python
  2. VB.Net to C Sharp Converter有用吗?
  3. 报告软件测试错误的规范
  4. Uninstall Office 2016 for Mac
  5. 对不起!今天我们的活动在朋友圈刷屏了……(多图预警)
  6. git撤销某文件被添加到暂存区的修改,且回到文件未修改前的原样
  7. 《Spark大数据分析:核心概念、技术及实践》一3.5 API
  8. 使用 HP 3PAR Peer Persistence 实现 vSphere Metro Storage Cluster (vMSC)
  9. php怎么分割页面,用html如何把页面分割成多个文件,由多个文件拼接而成?
  10. docker容器构建_我如何容器化构建系统
  11. 新年第一份“欧气”,“中国开发者大调查”第五批中奖名单出炉啦
  12. URL跳转与webview安全浅谈
  13. dhcp select global与interface配置过程
  14. Kinect开发学习笔记之(一)Kinect介绍和应用
  15. Eclipse Android开发环境搭建
  16. CentOS 7.x 内核kernel版本升级实操
  17. 2011年戴尔服务器型号,PowerEdge 11G R310机架式服务器
  18. 3Q大战多年后,互联网圈再没有仗义执言的优秀屌丝了
  19. 技术团队绩效考核怎么搞?详解OKR、MBO、KPI、BSC
  20. 谈谈人们常说的“一时糊涂,鬼迷心窍”!

热门文章

  1. 绿坝十年,儿童网络安全保护问题仍未解决
  2. android 情景模式来电铃声分析(一)
  3. 2020爱站网突然关闭,站长们现在用啥工具分析数据了?
  4. WinForm BackgroundWorker笔记
  5. FireMonkey TListView的用法二:ItemAppearance为客制化外观Custom
  6. [游戏开发]网络同步方式
  7. Linux 查询和文件名加引号,Linux下vim查看文件名
  8. 杨振宁100岁了,诺奖都不算他的人生巅峰
  9. 前端系列教程之JS(自认为有用代码)
  10. 网络编程-在线英英词典项目