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