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
def GetLyrics(self): return timedtext.load(self.get('0.0', tk.END).replace('[]', ''))