歌詞解析

需求:播放指定歌曲的時候,給一個時間,能夠把這首歌在這個時間對應(yīng)的詞返回
面向?qū)ο? 找一個類,讓它擁有解析歌詞的功能
歌詞文件:
[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]當(dāng)你低頭地瞬間
[02:26.79][02:05.72][00:37.16]才發(fā)覺腳下的路
[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 = []  # 保存當(dāng)前歌名解析出來的歌詞對象

    # 分離歌詞和時間
    def __split_time_word(self, line):
        # 時間 <-> 歌詞
        lines = line.split(']')
        # print(lines)
        # 獲取每行的詞
        word = lines[-1]
        # 遍歷獲取每一行的時間
        for time in lines[:-1]:
            # 根據(jù)時間和詞創(chuàng)建歌詞對象
            ly_obj = Lyrics(word=word)
            ly_obj.time = time
            self.__all_lyric.append(ly_obj)


    # 根據(jù)時間獲取歌詞
    def get_lyric(self, time: int):
        # 判斷之前是否已經(jīng)解析過
        if self.__all_lyric:
            print('~~~~~')
            # 解析過,根據(jù)時間取值
            for item in self.__all_lyric:
                if item.time < time:
                    return item.word

        # 沒有解析過
        # 讀文件內(nèi)容
        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)

                # 根據(jù)時間取值
                for item in self.__all_lyric:
                    if item.time < time:
                        return item.word

        except FileNotFoundError:
            print('沒有響應(yīng)的歌詞')


# 藍蓮花 --> 藍蓮花數(shù)據(jù) -->
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))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • [{"reportDate": "2018-01-23 23:28:49","fluctuateCause": n...
    加勒比海帶_4bbc閱讀 903評論 1 2
  • 刪掉重新來一次吧,記得改那個腳本修改 /home/ubuntu/eos/scripts/install_depen...
    盧衍泓閱讀 1,394評論 0 1
  • 南宋的嚴(yán)羽在《滄浪詩話》中說,唐人的七言律詩,當(dāng)以崔顥的《黃鶴樓》為第一。清人沈德潛也在其編的《唐詩別裁》中如此評...
    海的波文閱讀 1,703評論 0 11
  • 或許最簡單的幸福是做自己喜歡的事,愛自己最愛的人!在情侶心中流星雨帶表浪漫,而在天文觀測者眼中它就是一種實在的幸福...
    秋齋思閱讀 249評論 1 3
  • 那只藍鯨叫作昔拉,她五歲半了。 有一天烏云密布,電閃雷鳴緊接著暴雨傾瀉,風(fēng)浪一重大過一重,昔拉在海浪里歡暢的游著,...
    張明佛閱讀 442評論 0 0

友情鏈接更多精彩內(nèi)容