Python实现简单的歌词解析与播放

歌词解析与播放

利用python中的pygame与time包,来实现歌词解析与音乐播放;其中pygame是用来加载音乐文件与播放音乐;time是用来设定指定的睡眠时间,我们知道音乐的播放是在后台进行,如果不给指定的睡眠时间,音乐播放在程序运行结束后就关闭,因此在播放音乐的过程务必根据需要指定一个睡眠时间,在这里的睡眠时间是根据歌词时间列表的前后两段的时间差而定。
在实现歌词解析的过程中最重要的是对歌词字符串的处理,采用字典的方式存储时间列表与歌词可以方便在歌词解析时候快速查找与匹配。
以下为传奇的歌词与时间列表信息:

musicLrcString = '''
[00:03.50]传奇
[00:19.10]作词:刘兵 作曲:李健
[00:20.60]演唱:王菲
[00:26.60]    
[04:40.75][02:39.90][00:36.25]只是因为在人群中多看了你一眼
[04:49.00]
[02:47.44][00:43.69]再也没能忘掉你容颜
[02:54.83][00:51.24]梦想着偶然能有一天再相见
[03:02.32][00:58.75]从此我开始孤单思念
[03:08.15][01:04.30]
[03:09.35][01:05.50]想你时你在天边
[03:16.90][01:13.13]想你时你在眼前
[03:24.42][01:20.92]想你时你在脑海
[03:31.85][01:28.44]想你时你在心田
[03:38.67][01:35.05]
[04:09.96][03:39.87][01:36.25]宁愿相信我们前世有约
[04:16.37][03:46.38][01:42.47]今生的爱情故事 不会再改变
[04:24.82][03:54.83][01:51.18]宁愿用这一生等你发现
[04:31.38][04:01.40][01:57.43]我一直在你身旁 从未走远
[04:39.55][04:09.00][02:07.85]
'''

实现代码如下

#/usr/bin/env python
#-*- coding: utf-8 -*-
#-*- author:linjunfan -*-
import pygame
import time

def musicAnalysis(musicLrc):
    musicDict={}  #用字典来保存该时刻对应的歌词
    musicL=[]
    #对歌词列表进行切割
    musicList=musicLrc.strip().splitlines()
    for i in musicList:
        musicTime=i.split("]")
        for j in musicTime[:-1]:
            musicTime1=j[1:].split(":")
            musicTL=float(musicTime1[0])*60+float(musicTime1[1])
            musicDict[musicTL]=musicTime[-1]
    for i in musicDict:
        musicL.append(i)#将时间存到列表中
    musicL.sort()#对时间进行排序
    #按时间顺序循环输出歌词
    for i in range(len(musicL)):
        if i==0:
            pygame.mixer.init()
            pygame.mixer.music.load("chuanqi.mp3")#引用音乐路径名
            pygame.mixer.music.play()
            time.sleep(musicL[0])
            pygame.mixer.music.pause()
        else :
            pygame.mixer.music.unpause()
            time.sleep(musicL[i]-musicL[i-1])
            pygame.mixer.music.pause()
        print(musicDict.get(musicL[i]))

if __name__ == '__main__':
    musicAnalysis(musicLrcString)

利用到音乐文件(MP3):chuanqi.mp3

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值