[SCM] python-midiutil/master: Imported Upstream version 0.89

umlaeute at users.alioth.debian.org umlaeute at users.alioth.debian.org
Thu Mar 31 14:16:37 UTC 2016


The following commit has been merged in the master branch:
commit ed7e163dd24b41e3fbb47ab9cb7522a30787de66
Author: IOhannes m zmölnig <zmoelnig at umlautQ.umlaeute.mur.at>
Date:   Thu Mar 31 15:24:23 2016 +0200

    Imported Upstream version 0.89

diff --git a/CHANGELOG b/CHANGELOG
index c2611c3..679e052 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,10 @@
+Date:       1 December 2013
+Version:    0.89
+    * Updated MIDIFile to support non-integral note values better.
+    * Changed default temporal resolution to 960 ticks per beat.
+    * Updated Python3 support. It is still somewhat experimental.
+    * Misc. Bug Fixes.
+
 Date:       20 October 2009
 Version:    0.87
 
diff --git a/MANIFEST b/MANIFEST
index b62a96b..d062e4c 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -5,8 +5,10 @@ CHANGELOG
 VERSION
 MANIFEST
 src/midiutil/MidiFile.py
+src/midiutil/MidiFile3.py
 src/midiutil/__init__.py
 examples/single-note-example.py
 documentation/Extending.txt
 documentation/ClassReference.txt
 src/unittests/miditest.py
+src/unittests/miditest.py3
diff --git a/PKG-INFO b/PKG-INFO
index fb9beea..3cb019d 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,8 +1,8 @@
 Metadata-Version: 1.0
 Name: MIDIUtil
-Version: 0.87
+Version: 0.89
 Summary: MIDIUtil, a MIDI Interface for Python
-Home-page: http://www.emergentmusics.org/midiutil/
+Home-page: www.emergentmusics.org
 Author: Mark Conway Wirt
 Author-email: emergentmusics) at (gmail . com
 License: Copyright (C) 2009, Mark Conway Wirt. See License.txt for details.
diff --git a/README.txt b/README.txt
index 3518483..2b9972a 100644
--- a/README.txt
+++ b/README.txt
@@ -25,8 +25,16 @@ is provided.
 
 This software was originally developed with Python 2.5.2 and it makes use
 of some features that were introduced in 2.5. I have used it extensively
-in Python 2.6, so it should work in this or any later versions (but I
-have not tested it on Python 3).
+in Python 2.6.
+
+Included in this version is an intitial port to Python 3 (but which should
+work in 2.6.X also). The file is called MidiFile3.py. To use it, use
+the following import line in your code:
+
+        from midiutil.MidiFile3 import MIDIFile
+
+(This assumes that the code has been installed into your system path or that
+the midiutil directory is copied into your script's working directory.)
 
 This software is distributed under an Open Source license and you are
 free to use it as you see fit, provided that attribution is maintained.
@@ -116,3 +124,15 @@ the library is provided in the documentation directory.
 
 Have fun!
 
+---------
+Thank You
+---------
+
+I'd like to mention the following people who have given feedback, but
+fixes,  and suggestions on the library:
+
+    Bram de Jong
+    Mike Reeves-McMillan
+    Egg Syntax
+    Nils Gey
+    Francis G.
diff --git a/VERSION b/VERSION
index c58d90b..ff59572 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-This is version 0.87.
+This is version 0.89.
 
diff --git a/setup.py b/setup.py
index fa505f8..ad3d380 100644
--- a/setup.py
+++ b/setup.py
@@ -1,12 +1,12 @@
 from distutils.core import setup
 
 setup(name='MIDIUtil',
-      version='0.87',
+      version='0.89',
       description='MIDIUtil, a MIDI Interface for Python',
       author='Mark Conway Wirt',
       author_email='emergentmusics) at (gmail . com',
       license='Copyright (C) 2009, Mark Conway Wirt. See License.txt for details.',
-      url='http://www.emergentmusics.org/midiutil/',
+      url='www.emergentmusics.org',
       packages=["midiutil"],
       package_dir = {'midiutil': 'src/midiutil'},
       package_data={'midiutil' : ['../../documentation/*']},
diff --git a/src/midiutil/MidiFile.py b/src/midiutil/MidiFile.py
index 3a65846..d349e9b 100644
--- a/src/midiutil/MidiFile.py
+++ b/src/midiutil/MidiFile.py
@@ -16,7 +16,7 @@ import struct,  sys,  math
 # corresponds to one beat. This number is somewhat arbitrary, but should be chosen
 # to provide adequate temporal resolution.
 
-TICKSPERBEAT = 128
+TICKSPERBEAT = 960
 
 controllerEventTypes = {
                         'pan' : 0x0a
@@ -89,7 +89,6 @@ class GenericEvent():
                 return False
         if self.type == 'controllerEvent':
             if self.parameter1 != other.parameter1 or \
-                self.parameter2 != other.parameter2 or \
                 self.channel != other.channel or \
                 self.eventType != other.eventType:
                 return False
@@ -453,6 +452,36 @@ class MIDITrack:
         '''
         Write the events in MIDIEvents to the MIDI stream.
         '''
+        preciseTime = 0.0                   # Actual time of event, ignoring round-off
+        actualTime = 0.0                    # Time as written to midi stream, include round-off
+        for event in self.MIDIEventList:
+
+            preciseTime = preciseTime + event.time
+
+            # Convert the time to variable length and back, to see how much
+            # error is introduced
+
+            testBuffer = ""
+            varTime = writeVarLength(event.time)
+            for timeByte in varTime:
+                testBuffer = testBuffer + struct.pack('>B',timeByte)
+            (roundedVal,discard) = readVarLength(0,testBuffer)
+            roundedTime = actualTime + roundedVal
+            # print "Rounded, Precise: %15.10f %15.10f" % (roundedTime, preciseTime)
+
+            # Calculate the delta between the two and apply it to the event time.
+
+            delta = preciseTime - roundedTime
+            event.time = event.time + delta
+
+            # Now update the actualTime value, using the updated event time.
+
+            testBuffer = ""
+            varTime = writeVarLength(event.time)
+            for timeByte in varTime:
+                testBuffer = testBuffer + struct.pack('>B',timeByte)
+            (roundedVal,discard) = readVarLength(0,testBuffer)
+            actualTime = actualTime + roundedVal
         
         for event in self.MIDIEventList:
             if event.type == "NoteOn":
@@ -940,7 +969,7 @@ def writeVarLength(i):
     significant bit is 1, then more bytes follow. If it is zero, then the
     byte in question is the last in the stream
     '''
-    input = int(i)
+    input = int(i+0.5)
     output = [0,0,0,0]
     reversed = [0,0,0,0]
     count = 0
@@ -961,6 +990,27 @@ def writeVarLength(i):
     reversed[3] = output[0]
     return reversed[4-count:4]
 
+# readVarLength is taken from the MidiFile class.
+
+def readVarLength(offset, buffer):
+    '''A function to read a MIDI variable length variable.
+
+    It returns a tuple of the value read and the number of bytes processed. The
+    input is an offset into the buffer, and the buffer itself.
+    '''
+    toffset = offset
+    output = 0
+    bytesRead = 0
+    while True:
+        output = output << 7
+        byte = struct.unpack_from('>B',buffer,toffset)[0]
+        toffset = toffset + 1
+        bytesRead = bytesRead + 1
+        output = output + (byte & 127)
+        if (byte & 128) == 0:
+            break
+    return (output, bytesRead)
+
 def frequencyTransform(freq):
     '''Returns a three-byte transform of a frequencyTransform
     '''
diff --git a/src/midiutil/MidiFile.py b/src/midiutil/MidiFile3.py
similarity index 92%
copy from src/midiutil/MidiFile.py
copy to src/midiutil/MidiFile3.py
index 3a65846..8645792 100644
--- a/src/midiutil/MidiFile.py
+++ b/src/midiutil/MidiFile3.py
@@ -16,7 +16,7 @@ import struct,  sys,  math
 # corresponds to one beat. This number is somewhat arbitrary, but should be chosen
 # to provide adequate temporal resolution.
 
-TICKSPERBEAT = 128
+TICKSPERBEAT = 960
 
 controllerEventTypes = {
                         'pan' : 0x0a
@@ -30,6 +30,20 @@ class MIDIEvent:
         self.time=0
         self.ord = 0
         
+    def __lt__(self, other):
+        ''' Sorting function for events.'''
+        if self.time < other.time:
+            return True
+        elif self.time > other.time:
+            return False
+        else:
+            if self.ord < other.ord:
+                return True
+            elif self.ord > other.ord:
+                return False
+            else:
+                return False
+
     def __cmp__(self, other):
         ''' Sorting function for events.'''
         if self.time < other.time:
@@ -89,7 +103,6 @@ class GenericEvent():
                 return False
         if self.type == 'controllerEvent':
             if self.parameter1 != other.parameter1 or \
-                self.parameter2 != other.parameter2 or \
                 self.channel != other.channel or \
                 self.eventType != other.eventType:
                 return False
@@ -221,9 +234,9 @@ class MIDITrack:
     def __init__(self, removeDuplicates,  deinterleave):
         '''Initialize the MIDITrack object.
         '''
-        self.headerString = struct.pack('cccc','M','T','r','k')
+        self.headerString = struct.pack('cccc',b'M',b'T',b'r',b'k')
         self.dataLength = 0 # Is calculated after the data is in place
-        self.MIDIdata = ""
+        self.MIDIdata = b""
         self.closed = False
         self.eventList = []
         self.MIDIEventList = []
@@ -377,13 +390,13 @@ class MIDITrack:
                 self.MIDIEventList.append(event)
 
             else:
-                print "Error in MIDITrack: Unknown event type"
+                print ("Error in MIDITrack: Unknown event type")
                 sys.exit(2)
             
         # Assumptions in the code expect the list to be time-sorted.
         # self.MIDIEventList.sort(lambda x, y: x.time - y.time)
 
-        self.MIDIEventList.sort(lambda x, y: int( 1000 * (x.time - y.time)))
+        self.MIDIEventList.sort(key=lambda x: (x.time))
 
         if self.deinterleave:    
             self.deInterleaveNotes()
@@ -403,13 +416,13 @@ class MIDITrack:
         for item in self.eventList:
             tempDict[item] = 1
             
-        self.eventList = tempDict.keys()
+        self.eventList = list(tempDict.keys())
         
         # Sort on type, them on time. Necessary because keys() has no requirement to return
         # things in any order.
         
-        self.eventList.sort(lambda x, y: cmp(x.type ,  y.type))
-        self.eventList.sort(lambda x, y: int( 1000 * (x.time - y.time))) #A bit of a hack.
+        self.eventList.sort(key=lambda x: (x.type))
+        self.eventList.sort(key=lambda x: (x.time)) #A bit of a hack.
 
     def closeTrack(self):
         '''Called to close a track before writing
@@ -453,6 +466,36 @@ class MIDITrack:
         '''
         Write the events in MIDIEvents to the MIDI stream.
         '''
+        preciseTime = 0.0                   # Actual time of event, ignoring round-off
+        actualTime = 0.0                    # Time as written to midi stream, include round-off
+        for event in self.MIDIEventList:
+
+            preciseTime = preciseTime + event.time
+
+            # Convert the time to variable length and back, to see how much
+            # error is introduced
+
+            testBuffer = bytes()
+            varTime = writeVarLength(event.time)
+            for timeByte in varTime:
+                testBuffer = testBuffer + struct.pack('>B',timeByte)
+            (roundedVal,discard) = readVarLength(0,testBuffer)
+            roundedTime = actualTime + roundedVal
+            # print "Rounded, Precise: %15.10f %15.10f" % (roundedTime, preciseTime)
+
+            # Calculate the delta between the two and apply it to the event time.
+
+            delta = preciseTime - roundedTime
+            event.time = event.time + delta
+
+            # Now update the actualTime value, using the updated event time.
+
+            testBuffer = bytes()
+            varTime = writeVarLength(event.time)
+            for timeByte in varTime:
+                testBuffer = testBuffer + struct.pack('>B',timeByte)
+            (roundedVal,discard) = readVarLength(0,testBuffer)
+            actualTime = actualTime + roundedVal
         
         for event in self.MIDIEventList:
             if event.type == "NoteOn":
@@ -500,7 +543,7 @@ class MIDITrack:
                 dataLenghtVar = writeVarLength(dataLength)
                 for i in range(0,len(dataLenghtVar)):
                     self.MIDIdata = self.MIDIdata + struct.pack("b",dataLenghtVar[i])
-                self.MIDIdata = self.MIDIdata + event.trackName
+                self.MIDIdata = self.MIDIdata + event.trackName.encode()
             elif event.type == "ControllerEvent":
                 code = 0xB << 4 | event.channel
                 varTime = writeVarLength(event.time)
@@ -561,7 +604,7 @@ class MIDITrack:
         for event in self.MIDIEventList:
             
             if event.type == 'NoteOn':
-                if stack.has_key(str(event.pitch)+str(event.channel)):
+                if str(event.pitch)+str(event.channel) in stack:
                     stack[str(event.pitch)+str(event.channel)].append(event.time)
                 else:
                     stack[str(event.pitch)+str(event.channel)] = [event.time]
@@ -584,8 +627,8 @@ class MIDITrack:
         # the internal sort works, and is in essence creating a sort on a primary 
         # and secondary key.
         
-        self.MIDIEventList.sort(lambda x, y: cmp(x.type ,  y.type))
-        self.MIDIEventList.sort(lambda x, y: int( 1000 * (x.time - y.time)))
+        self.MIDIEventList.sort(key=lambda x: (x.type))
+        self.MIDIEventList.sort(key=lambda x: (x.time))
 
     def adjustTime(self,origin):
         '''
@@ -632,7 +675,7 @@ class MIDIHeader:
     def __init__(self,numTracks):
         ''' Initialize the data structures
         '''
-        self.headerString = struct.pack('cccc','M','T','h','d')
+        self.headerString = struct.pack('cccc',b'M',b'T',b'h',b'd')
         self.headerSize = struct.pack('>L',6)
         # Format 1 = multi-track file
         self.format = struct.pack('>H',1)
@@ -940,7 +983,7 @@ def writeVarLength(i):
     significant bit is 1, then more bytes follow. If it is zero, then the
     byte in question is the last in the stream
     '''
-    input = int(i)
+    input = int(i+0.5)
     output = [0,0,0,0]
     reversed = [0,0,0,0]
     count = 0
@@ -960,6 +1003,25 @@ def writeVarLength(i):
     reversed[2] = output[1]
     reversed[3] = output[0]
     return reversed[4-count:4]
+    
+def readVarLength(offset, buffer):
+    '''A function to read a MIDI variable length variable.
+
+    It returns a tuple of the value read and the number of bytes processed. The
+    input is an offset into the buffer, and the buffer itself.
+    '''
+    toffset = offset
+    output = 0
+    bytesRead = 0
+    while True:
+        output = output << 7
+        byte = struct.unpack_from('>B',buffer,toffset)[0]
+        toffset = toffset + 1
+        bytesRead = bytesRead + 1
+        output = output + (byte & 127)
+        if (byte & 128) == 0:
+            break
+    return (output, bytesRead)
 
 def frequencyTransform(freq):
     '''Returns a three-byte transform of a frequencyTransform
diff --git a/src/unittests/miditest.py b/src/unittests/miditest.py
index 2ccc81a..3f11643 100644
--- a/src/unittests/miditest.py
+++ b/src/unittests/miditest.py
@@ -48,11 +48,11 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[2].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[2].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].time,  256)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].time,  1920)
         
     def testTimeShift(self):
         
@@ -63,7 +63,7 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         
         # With two tracks
         MyMIDI = MIDIFile(2)
@@ -73,11 +73,11 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].type, 'NoteOn')
-        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  128)
+        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  960)
         self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  960)
         
         # Negative Time
         MyMIDI = MIDIFile(1)
@@ -86,7 +86,7 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         
         # Negative time, two tracks
         
@@ -97,11 +97,11 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].type, 'NoteOn')
-        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  128)
+        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  960)
         self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  960)
  
     def testFrequency(self):
         freq = frequencyTransform(8.1758)
diff --git a/src/unittests/miditest.py b/src/unittests/miditest.py3
similarity index 74%
copy from src/unittests/miditest.py
copy to src/unittests/miditest.py3
index 2ccc81a..639f81c 100644
--- a/src/unittests/miditest.py
+++ b/src/unittests/miditest.py3
@@ -19,7 +19,7 @@ import sys,  struct
 sys.path.append('..')
 
 import unittest
-from midiutil.MidiFile import MIDIFile, MIDIHeader, MIDITrack, writeVarLength,  \
+from midiutil.MidiFile3 import MIDIFile, MIDIHeader, MIDITrack, writeVarLength,  \
     frequencyTransform,  returnFrequency
 import sys
 
@@ -48,11 +48,11 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[2].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[2].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].time,  256)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].time,  1920)
         
     def testTimeShift(self):
         
@@ -63,7 +63,7 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         
         # With two tracks
         MyMIDI = MIDIFile(2)
@@ -73,11 +73,11 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].type, 'NoteOn')
-        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  128)
+        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  960)
         self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  960)
         
         # Negative Time
         MyMIDI = MIDIFile(1)
@@ -86,7 +86,7 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         
         # Negative time, two tracks
         
@@ -97,11 +97,11 @@ class TestMIDIUtils(unittest.TestCase):
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  960)
         self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].type, 'NoteOn')
-        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  128)
+        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  960)
         self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].type, 'NoteOff')
-        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  128)
+        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  960)
  
     def testFrequency(self):
         freq = frequencyTransform(8.1758)
@@ -182,51 +182,52 @@ class TestMIDIUtils(unittest.TestCase):
         MyMIDI.addSysEx(0,0, 0, struct.pack('>B', 0x01))
         MyMIDI.close()
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'SysEx')
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[0])[0], 0x00)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[1])[0], 0xf0)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[2])[0], 3)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[3])[0], 0x00)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[4])[0], 0x01)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[5])[0], 0xf7)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[0], 0x00)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[1], 0xf0)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[2], 3)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[3], 0x00)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[4], 0x01)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[5], 0xf7)
         
     def testUniversalSysEx(self):
         MyMIDI = MIDIFile(1)
         MyMIDI.addUniversalSysEx(0,0, 1, 2, struct.pack('>B', 0x01))
         MyMIDI.close()
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'UniversalSysEx')
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[0])[0], 0x00)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[1])[0], 0xf0)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[2])[0], 6)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[3])[0], 0x7E)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[4])[0], 0x7F)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[5])[0], 0x01)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[6])[0], 0x02)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[7])[0], 0x01)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[8])[0], 0xf7)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[0], 0x00)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[1], 0xf0)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[2], 6)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[3], 0x7E)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[4], 0x7F)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[5], 0x01)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[6], 0x02)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[7], 0x01)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[8], 0xf7)
         
     def testTuning(self):
         MyMIDI = MIDIFile(1)
         MyMIDI.changeNoteTuning(0, [(1, 440), (2, 880)])
         MyMIDI.close()
         self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'UniversalSysEx')
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[0])[0], 0x00)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[1])[0], 0xf0)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[2])[0], 15)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[3])[0], 0x7E)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[4])[0], 0x7F)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[5])[0], 0x08)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[6])[0], 0x02)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[7])[0], 0x00)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[8])[0], 0x2)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[9])[0], 0x1)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[10])[0], 69)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[11])[0], 0)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[12])[0], 0)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[13])[0], 0x2)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[14])[0], 81)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[15])[0], 0)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[16])[0], 0)
-        self.assertEquals(struct.unpack('>B', MyMIDI.tracks[0].MIDIdata[17])[0], 0xf7)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[0], 0x00)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[1], 0xf0)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[2], 15)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[3], 0x7E)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[4], 0x7F)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[5], 0x08)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[6], 0x02)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[7], 0x00)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[8], 0x2)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[9], 0x1)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[10], 69)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[11], 0x00)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[12], 0x00)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[13], 0x02)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[14], 81)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[15], 0x00)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[16], 0x00)
+        self.assertEquals(MyMIDI.tracks[0].MIDIdata[17], 0xf7)
+
     
 MIDISuite = unittest.TestLoader().loadTestsFromTestCase(TestMIDIUtils)
     

-- 
python-midiutil packaging



More information about the pkg-multimedia-commits mailing list