コード例 #1
0
ファイル: lyrics3v2.py プロジェクト: sdukhovni/karaoke-chan
def load(lyricsData, kcl=True):
    """Parse Lyrics3 v2.00 data

    Args:
        lyricsData (str): Lyrics3 v2.00 data, including "LYRICSBEGIN"
            but not including size descriptor and "LYRICS200" string.

    Kwargs:
        kcl (bool): Use KCL lyrics data if available. KCL is an ad-hoc
        format invented for this program; it's a Lyrics3 tag identical
        to LYR, except that the timestamps have 0.01-second precision
        and it uses unix line endings.

    Returns:
        New Lyrics instance containing the lyrics data

    Raises:
        ValueError: data isn't valid Lyrics3 v2.00 data or doesn't contain any
            LYR field
    """
    if not lyricsData.startswith(START_TAG):
        raise ValueError, "Not valid Lyrics3 v2.00 data"

    lyricsData = lyricsData[len(START_TAG):]

    lyrLyrics = None
    kclLyrics = None
    metadata = {}

    while lyricsData:
        fieldId = lyricsData[:FIELD_ID_LENGTH]
        lyricsData = lyricsData[FIELD_ID_LENGTH:]

        fieldSize = int(lyricsData[:FIELD_SIZE_LENGTH])
        lyricsData = lyricsData[FIELD_SIZE_LENGTH:]

        fieldData = lyricsData[:fieldSize]
        lyricsData = lyricsData[fieldSize:]

        if fieldId == "LYR":
            lyrLyrics = timedtext.load(fieldData)
        elif fieldId == "KCL":
            kclLyrics = timedtext.load(fieldData)
        elif fieldId == "EAL":
            metadata["album"] = fieldData
        elif fieldId == "EAR":
            metadata["artist"] = fieldData
        elif fieldId == "ETT":
            metadata["title"] = fieldData
        else:
            pass

    lyrics = (kclLyrics if kcl else None) or lyrLyrics
    if lyrics is None:
        raise ValueError, "Lyrics not found"

    lyrics.setMetadata(**metadata)
    return lyrics
コード例 #2
0
ファイル: widgets.py プロジェクト: sdukhovni/karaoke-chan
 def GetLyrics(self):
     return timedtext.load(self.get('0.0', tk.END).replace('[]', ''))