def get_timings(input_filename):
    # Avoid needing this during venusian scan
    import pykar
    def errback(msg):
        print msg
    kardata = open(input_filename, 'rb').read()
    midifile = pykar.midiParseData(
        kardata,
        errback,
        ''
        )
    lyrics_list = midifile.lyrics.list
    timings = []
    last_line = lyrics_list[0].line
    first_ms = lyrics_list[0].ms
    current_line = []
    for i, lyric in enumerate(lyrics_list):
        current_line.append([float(lyric.ms-first_ms)/1000, lyric.text])
        try:
            next_lyric = lyrics_list[i+1]
        except IndexError:
            next_lyric = None
        if lyric.line != last_line:
            last_ms = lyric.ms
            timings.append(
                (
                    float(first_ms)/1000,
                    float(last_ms)/1000,
                    current_line,
                )
            )
            last_line = lyric.line
            current_line = []
            if next_lyric:
                first_ms = next_lyric.ms
            else:
                first_ms = last_ms
    timings.append(
        (
            float(first_ms)/1000,
            float(lyrics_list[-1].ms)/1000,
            current_line,
            )
        )
    return json.dumps(timings, indent=2)
Example #2
0
def parse_midi(filename):
    with open(filename) as f:
        fdata = f.read()
        midifile = pykar.midiParseData(fdata, None, 'cp1252')
        return midifile.lyrics.list