README.md: fix a couple of typos
[vidi-player.git] / vidi / MidiUtils.py
1 #!/usr/bin/env python3
2 #
3 # MidiUtils - misc utilities to analyze midi files opened with python-mido
4 #
5 # Copyright (C) 2016  Antonio Ospite <ao2@ao2.it>
6 #
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
20
21 def is_note(msg):
22     return msg.type == 'note_on' or msg.type == 'note_off'
23
24
25 def is_note_on(msg):
26     return msg.type == 'note_on' and msg.velocity > 0
27
28
29 def is_note_off(msg):
30     return ((msg.type == 'note_on' and msg.velocity == 0) or
31             (msg.type == 'note_off'))
32
33
34 def check_overlapping_notes(midi_file):
35     previous_note_on = False
36     for msg in midi_file:
37         if is_note_on(msg) and msg.channel == 0:
38             if previous_note_on:
39                 return True
40
41             previous_note_on = True
42         elif is_note_off(msg) and msg.channel == 0:
43             previous_note_on = False
44
45     return False