Mercurial > hg > syncopation-dataset
comparison Syncopation models/readmidi.py @ 10:a3ed7d2b57d8
updating main py files to point at new
file names
author | christopherh <christopher.harte@eecs.qmul.ac.uk> |
---|---|
date | Fri, 03 Apr 2015 16:02:10 +0100 |
parents | ac882f5e6a11 |
children | 08c298f47917 |
comparison
equal
deleted
inserted
replaced
9:c2843ef4de2c | 10:a3ed7d2b57d8 |
---|---|
6 """ | 6 """ |
7 | 7 |
8 from midiparser import MidiFile, MidiTrack, DeltaTime, MidiEvent | 8 from midiparser import MidiFile, MidiTrack, DeltaTime, MidiEvent |
9 #from RhythmParser import Bar | 9 #from RhythmParser import Bar |
10 | 10 |
11 from MusicObjects import * | 11 from music_objects import * |
12 | 12 |
13 | 13 |
14 | 14 |
15 | 15 |
16 | 16 |
17 def readMidiFile(filename): | 17 def read_midi_file(filename): |
18 """ open and read a MIDI file, return a MidiFile object """ | 18 """ open and read a MIDI file, return a MidiFile object """ |
19 | 19 |
20 #create a midifile object, open and read a midi file | 20 #create a midifile object, open and read a midi file |
21 midiFile = MidiFile() | 21 midiFile = MidiFile() |
22 midiFile.open(filename, 'rb') | 22 midiFile.open(filename, 'rb') |
23 midiFile.read() | 23 midiFile.read() |
24 midiFile.close() | 24 midiFile.close() |
25 | 25 |
26 return midiFile | 26 return midiFile |
27 | 27 |
28 def getBars(midiFile, trackindex=1): | 28 # def get_bars(midiFile, trackindex=1): |
29 # """ returns a list of bar objects from a MidiFile object """ | |
29 | 30 |
30 track = midiFile.tracks[trackindex] # ignore dummy track 0 | 31 # # select a track to extract (default = 1, ignoring dummy track 0) |
31 eventIdx = 0 | 32 # track = midiFile.tracks[trackindex] |
32 numNotes = 0 | 33 # eventIndex = 0 |
34 # numNotes = 0 | |
33 | 35 |
34 noteonlist = [] | 36 # noteonlist = [] |
35 noteOnFound==True | 37 # noteOnFound==True |
36 | 38 |
37 while noteOnFound==True: | 39 # while noteOnFound==True: |
38 (noteOnIdx, noteOnDelta, noteOnFound) = self.findEvent(track, eventIdx, lambda e: e.type == 'NOTE_ON') | 40 # (noteOnIndex, noteOnDelta, noteOnFound) = self.find_event(track, eventIndex, lambda e: e.type == 'NOTE_ON') |
39 noteEvent = track.events[noteOnIdx] | 41 # noteEvent = track.events[noteOnIndex] |
40 eventIdx = noteOnIdx + 1 | 42 # eventIndex = noteOnIndex + 1 |
41 | 43 |
42 | 44 |
43 | 45 |
44 | 46 |
45 | 47 |
46 | 48 |
47 def findEvent(track, eventStartIdx, lambdaExpr): | 49 def find_event(track, eventStartIndex, lambdaExpr): |
48 ''' | 50 ''' |
49 From code by Csaba Sulyok: | 51 From code by Csaba Sulyok: |
50 Finds MIDI event based on lambda expression, starting from a given index. | 52 Finds MIDI event based on lambda expression, starting from a given index. |
51 Returns a tuple of the following 3 elements: | 53 Returns a tuple of the following 3 elements: |
52 1. event index where the lambda expression is true | 54 1. event index where the lambda expression is true |
53 2. aggregate delta time from event start index until the found event | 55 2. aggregate delta time from event start index until the found event |
54 3. flag whether or not any value was found, or we've reached the end of the event queue | 56 3. flag whether or not any value was found, or we've reached the end of the event queue |
55 ''' | 57 ''' |
56 | 58 |
57 eventIdx = eventStartIdx | 59 eventIndex = eventStartIndex |
58 deltaTime = 0 | 60 deltaTime = 0 |
59 while eventIdx < len(track.events) and not lambdaExpr(track.events[eventIdx]): | 61 while eventIndex < len(track.events) and not lambdaExpr(track.events[eventIndex]): |
60 if track.events[eventIdx].type == 'DeltaTime': | 62 if track.events[eventIndex].type == 'DeltaTime': |
61 deltaTime += track.events[eventIdx].time | 63 deltaTime += track.events[eventIndex].time |
62 eventIdx += 1 | 64 eventIndex += 1 |
63 | 65 |
64 success = eventIdx < len(track.events) | 66 success = eventIndex < len(track.events) |
65 return (eventIdx, deltaTime, success) | 67 return (eventIndex, deltaTime, success) |
66 | 68 |
67 | 69 |