X-Git-Url: https://git.ao2.it/vidi-player.git/blobdiff_plain/2780f9db87ca6f82d325aabe88fa0e8ba14f3817..f74787f4bc5d288f0853000145e96d3a077c9c6a:/vidi-timeline.py?ds=inline diff --git a/vidi-timeline.py b/vidi-timeline.py index 1068545..07639e6 100755 --- a/vidi-timeline.py +++ b/vidi-timeline.py @@ -22,47 +22,35 @@ import sys import mido import vidi -# TODO: turn that into a command line option +# TODO: turn these into command line options ADD_REST_BACKGROUND = True +ADD_TITLE = True +TITLE_TEXT = None +TITLE_DURATION = 5 +TITLE_CREDITS = "Created with vidi-timeline\nhttps://git.ao2.it/vidi-player.git" -def is_note(msg): - return msg.type == 'note_on' or msg.type == 'note_off' - - -def is_note_on(msg): - return msg.type == 'note_on' and msg.velocity > 0 - - -def is_note_off(msg): - return ((msg.type == 'note_on' and msg.velocity == 0) or - (msg.type == 'note_off')) - - -def check_overlapping_notes(midi_file): - previous_note_on = False - for msg in midi_file: - if is_note_on(msg) and msg.channel == 0: - if previous_note_on: - return True - - previous_note_on = True - elif is_note_off(msg) and msg.channel == 0: - previous_note_on = False +def timeline_from_midi(midi_file, video_font_path): + timeline = vidi.Timeline() - return False + if ADD_TITLE: + title = TITLE_TEXT + if not title: + title = os.path.splitext(os.path.basename(midi_file.filename))[0] + title += "\n\n" + title += TITLE_CREDITS + timeline.add_title_clip(title, 0, TITLE_DURATION) -def timeline_from_midi(midi_file, video_font_path): - timeline = vidi.Timeline() + elapsed_time = start_time = TITLE_DURATION + else: + elapsed_time = start_time = 0 - elapsed_time = 0 - start_time = 0 for msg in midi_file: elapsed_time += msg.time - if is_note_on(msg) and msg.channel == 0: + if vidi.is_note_on(msg) and msg.channel == 0: start_time = elapsed_time - elif is_note_off(msg) and msg.channel == 0: + elif vidi.is_note_off(msg) and msg.channel == 0: note = vidi.MidiNote(msg.note) duration = elapsed_time - start_time print("Note name: %3s start_time: %f duration: %f" % @@ -104,7 +92,7 @@ def main(): midi_file = mido.MidiFile(sys.argv[1]) - overlapping_notes = check_overlapping_notes(midi_file) + overlapping_notes = vidi.check_overlapping_notes(midi_file) if overlapping_notes: sys.stderr.write("Sorry, supporting only midi file with no overlapping notes on channel 0\n") return 1