歌词解析

需求:播放指定歌曲的时候,给一个时间,能够把这首歌在这个时间对应的词返回
面向对象: 找一个类,让它拥有解析歌词的功能
歌词文件:
[00:00.20]蓝莲花
[00:00.80]没有什么能够阻挡
[00:06.53]你对自由地向往
[00:11.59]天马行空的生涯
[00:16.53]你的心了无牵挂
[02:11.27][01:50.22][00:21.95]穿过幽暗地岁月
[02:16.51][01:55.46][00:26.83]也曾感到彷徨
[02:21.81][02:00.60][00:32.30]当你低头地瞬间
[02:26.79][02:05.72][00:37.16]才发觉脚下的路
[02:32.17][00:42.69]心中那自由地世界
[02:37.20][00:47.58]如此的清澈高远
[02:42.32][00:52.72]盛开着永不凋零
[02:47.83][00:57.47]蓝莲花

class Lyrics:
    """歌词类"""
    def __init__(self, time='', word=''):
        self._time = time
        self.word = word

    @property
    def time(self):
        return self._time
    @time.setter
    def time(self, value):
        fen = float(value[1:3])
        miao = float(value[4:])
        self._time = fen*60+miao

    def __gt__(self, other):
        return self._time > other._time


    def __repr__(self):
        return str(self.__dict__)


class LyricsAnalysis:
    """歌词解析类"""
    # name = ''
    def __init__(self, name):
        self.__name = name  # 歌名
        self.__all_lyric = []  # 保存当前歌名解析出来的歌词对象

    # 分离歌词和时间
    def __split_time_word(self, line):
        # 时间 <-> 歌词
        lines = line.split(']')
        # print(lines)
        # 获取每行的词
        word = lines[-1]
        # 遍历获取每一行的时间
        for time in lines[:-1]:
            # 根据时间和词创建歌词对象
            ly_obj = Lyrics(word=word)
            ly_obj.time = time
            self.__all_lyric.append(ly_obj)


    # 根据时间获取歌词
    def get_lyric(self, time: int):
        # 判断之前是否已经解析过
        if self.__all_lyric:
            print('~~~~~')
            # 解析过,根据时间取值
            for item in self.__all_lyric:
                if item.time < time:
                    return item.word

        # 没有解析过
        # 读文件内容
        try:
            print('======')
            with open('./files/'+self.__name+'.txt', 'r', encoding='utf-8') as f:
                line = f.readline()
                while line:
                    # print(line)
                    self.__split_time_word(line)
                    line = f.readline()

                # __all_lyric保存了所有的歌词对象
                self.__all_lyric.sort(reverse=True)
                # print(self.__all_lyric)

                # 根据时间取值
                for item in self.__all_lyric:
                    if item.time < time:
                        return item.word

        except FileNotFoundError:
            print('没有响应的歌词')


# 蓝莲花 --> 蓝莲花数据 -->
ly_lan = LyricsAnalysis('蓝莲花')
print(ly_lan.get_lyric(10))
print(ly_lan.get_lyric(12))
print(ly_lan.get_lyric(20))
print(ly_lan.get_lyric(30))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [{"reportDate": "2018-01-23 23:28:49","fluctuateCause": n...
    加勒比海带_4bbc阅读 785评论 1 2
  • 删掉重新来一次吧,记得改那个脚本修改 /home/ubuntu/eos/scripts/install_depen...
    卢衍泓阅读 1,208评论 0 1
  • 南宋的严羽在《沧浪诗话》中说,唐人的七言律诗,当以崔颢的《黄鹤楼》为第一。清人沈德潜也在其编的《唐诗别裁》中如此评...
    海的波文阅读 1,594评论 0 11
  • 或许最简单的幸福是做自己喜欢的事,爱自己最爱的人!在情侣心中流星雨带表浪漫,而在天文观测者眼中它就是一种实在的幸福...
    秋斋思阅读 214评论 1 3
  • 那只蓝鲸叫作昔拉,她五岁半了。 有一天乌云密布,电闪雷鸣紧接着暴雨倾泻,风浪一重大过一重,昔拉在海浪里欢畅的游着,...
    张明佛阅读 403评论 0 0