From 1ab2a7a983be90b515e387f530e7969f2642e704 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Magimel?= Date: Thu, 28 Dec 2017 15:06:29 +0100 Subject: [PATCH 1/5] Add a test for the midi.MidiInFile module Use drumtest tutorial notes as a test file. Ref #24 --- tests/midi/__init__.py | 0 tests/midi/drumtest_notes.mid | Bin 0 -> 1691 bytes tests/midi/test_midiinfile.py | 37 ++++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 tests/midi/__init__.py create mode 100644 tests/midi/drumtest_notes.mid create mode 100644 tests/midi/test_midiinfile.py diff --git a/tests/midi/__init__.py b/tests/midi/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/midi/drumtest_notes.mid b/tests/midi/drumtest_notes.mid new file mode 100644 index 0000000000000000000000000000000000000000..a7da58d6b2085c32712444529905ea031823c9cf GIT binary patch literal 1691 zcmbuAPixyi5XDCgcI`r9=(&YltwZW6&_XVCAy7NP(5CVqun(3cL!nNgzL$}2J?a}Z zA0^+!dGn;TXwbrYk(|Lc^d3)A* zhs29o>!rwRm0M4?Uyh#txtHx5$t&t#v7lCKHM>3hXw_QvPs<<6b+kGi^e_9eJ!*db zcoUvp-V6tFC%=DXJ(W;puD7ZCwfT_sRfZ}Hl?eGt0O?9)Y{#t>L)b!gN~6ZNwZ z)G<_R!ZbSiJ6kZ_NEezon}|2v0u^{HbXA~YusJTg$Ld9pa!awH+pKpzS3Bx{6_r~~ z%-E#DV_*7d`_m!ssp=Jwf>_T1!%UZ)%xnx>E@PIl#Lo<8Og0D$JQd+l1-knHS@xc0 zbM<;ij3I=2k{EbKw>{MC|eN|v7q9@sJdWt zVwhaCFYzuYfk!FPlF_jPPYf5$7z`3`q!avHAZu1_I+*t1#wNka8<;OYOKd7_vVvLRf5^mF1vYO@?x_RRwE5@u&Q_9 zJ4B3wjonAUh23+rm+pY|_in%ged~${f9ClRmp&}XT#;E|z7DniCg@Gg{u;lpJ zvWZS}b6$vO%tr` Date: Thu, 28 Dec 2017 15:46:13 +0100 Subject: [PATCH 2/5] Add a test for the midi.DataTypeConverters module --- tests/midi/test_datatypeconverters.py | 63 +++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 tests/midi/test_datatypeconverters.py diff --git a/tests/midi/test_datatypeconverters.py b/tests/midi/test_datatypeconverters.py new file mode 100644 index 0000000..16ded2b --- /dev/null +++ b/tests/midi/test_datatypeconverters.py @@ -0,0 +1,63 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# FoFiX +# Copyright (C) 2017 FoFiX team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +import sys +import unittest + +from fretwork.midi.DataTypeConverters import readBew +from fretwork.midi.DataTypeConverters import readVar +from fretwork.midi.DataTypeConverters import toBytes +from fretwork.midi.DataTypeConverters import varLen + + +class DataTypeConvertersTest(unittest.TestCase): + + def test_toBytes_type(self): + if sys.version_info.major == 2: + value = bytes('áâãa') + else: + value = bytes('áâãa', 'utf-8') + result = toBytes(value) + self.assertIs(type(result), tuple) + + def test_readBew_keyerror(self): + if sys.version_info.major == 2: + value = bytes('aà') + else: + value = bytes('aà', 'utf-8') + self.assertIs(readBew(value), 0) + + def test_readBew_type(self): + value = b'a' + result = readBew(value) + self.assertIs(type(result), int) + + def test_readVar(self): + if sys.version_info.major == 2: + value = bytes('áâãa') + else: + value = bytes('áâãa', 'utf-8') + self.assertEqual(readVar(value), 295821045191137) + + def test_varLen(self): + self.assertEqual(varLen(97), 1) + self.assertEqual(varLen(256), 2) + self.assertEqual(varLen(20000), 3) + self.assertEqual(varLen(2107151), 4) From 7ef8ae7caa46e9a55a344647cd633c156f290396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Magimel?= Date: Thu, 28 Dec 2017 16:34:18 +0100 Subject: [PATCH 3/5] Fix relative imports in the midi module --- fretwork/midi/EventDispatcher.py | 7 +++---- fretwork/midi/MidiFileParser.py | 6 ++---- fretwork/midi/MidiInFile.py | 6 ++---- fretwork/midi/MidiInStream.py | 3 ++- fretwork/midi/MidiOutFile.py | 9 +++++---- fretwork/midi/MidiToText.py | 4 +++- fretwork/midi/RawInstreamFile.py | 6 +++--- fretwork/midi/RawOutstreamFile.py | 6 +++--- fretwork/midi/__init__.py | 10 +++++----- 9 files changed, 28 insertions(+), 29 deletions(-) diff --git a/fretwork/midi/EventDispatcher.py b/fretwork/midi/EventDispatcher.py index cd15fb9..50bb881 100644 --- a/fretwork/midi/EventDispatcher.py +++ b/fretwork/midi/EventDispatcher.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- -from DataTypeConverters import readBew -from DataTypeConverters import toBytes - -from constants import * +from .DataTypeConverters import readBew +from .DataTypeConverters import toBytes +from .constants import * class EventDispatcher: diff --git a/fretwork/midi/MidiFileParser.py b/fretwork/midi/MidiFileParser.py index e546aef..1df64f9 100644 --- a/fretwork/midi/MidiFileParser.py +++ b/fretwork/midi/MidiFileParser.py @@ -1,10 +1,8 @@ # -*- coding: utf-8 -*- -# uhh I don't really like this, but there are so many constants to -# import otherwise -from constants import * +from .EventDispatcher import EventDispatcher +from .constants import * -from EventDispatcher import EventDispatcher class MidiFileParser(object): diff --git a/fretwork/midi/MidiInFile.py b/fretwork/midi/MidiInFile.py index ce48059..c5442b4 100644 --- a/fretwork/midi/MidiInFile.py +++ b/fretwork/midi/MidiInFile.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- -from RawInstreamFile import RawInstreamFile -from MidiFileParser import MidiFileParser +from .MidiFileParser import MidiFileParser +from .RawInstreamFile import RawInstreamFile class MidiInFile(object): @@ -38,14 +38,12 @@ def __init__(self, outStream, infile): self.raw_in = RawInstreamFile(infile) self.parser = MidiFileParser(self.raw_in, outStream) - def read(self): "Start parsing the file" p = self.parser p.parseMThdChunk() p.parseMTrkChunks() - def setData(self, data=''): "Sets the data from a plain string" self.raw_in.setData(data) diff --git a/fretwork/midi/MidiInStream.py b/fretwork/midi/MidiInStream.py index f9a6376..f3f5f44 100644 --- a/fretwork/midi/MidiInStream.py +++ b/fretwork/midi/MidiInStream.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- -from MidiOutStream import MidiOutStream +from .MidiOutStream import MidiOutStream + class MidiInStream(object): diff --git a/fretwork/midi/MidiOutFile.py b/fretwork/midi/MidiOutFile.py index 51db2bb..29fc139 100644 --- a/fretwork/midi/MidiOutFile.py +++ b/fretwork/midi/MidiOutFile.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- -from MidiOutStream import MidiOutStream -from RawOutstreamFile import RawOutstreamFile +from .DataTypeConverters import fromBytes +from .DataTypeConverters import writeVar +from .MidiOutStream import MidiOutStream +from .RawOutstreamFile import RawOutstreamFile +from .constants import * -from constants import * -from DataTypeConverters import fromBytes, writeVar class MidiOutFile(MidiOutStream): diff --git a/fretwork/midi/MidiToText.py b/fretwork/midi/MidiToText.py index 0fa19d3..23d9441 100644 --- a/fretwork/midi/MidiToText.py +++ b/fretwork/midi/MidiToText.py @@ -1,7 +1,9 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -from MidiOutStream import MidiOutStream +from .MidiOutStream import MidiOutStream + + class MidiToText(MidiOutStream): diff --git a/fretwork/midi/RawInstreamFile.py b/fretwork/midi/RawInstreamFile.py index 260d4a3..d1aa030 100644 --- a/fretwork/midi/RawInstreamFile.py +++ b/fretwork/midi/RawInstreamFile.py @@ -3,9 +3,9 @@ import os.path -from DataTypeConverters import readBew as readBew_ -from DataTypeConverters import readVar -from DataTypeConverters import varLen +from .DataTypeConverters import readBew as readBew_ +from .DataTypeConverters import readVar +from .DataTypeConverters import varLen class RawInstreamFile(object): diff --git a/fretwork/midi/RawOutstreamFile.py b/fretwork/midi/RawOutstreamFile.py index cfd8af8..ad87fb7 100644 --- a/fretwork/midi/RawOutstreamFile.py +++ b/fretwork/midi/RawOutstreamFile.py @@ -1,12 +1,12 @@ # -*- coding: utf-8 -*- -# standard library imports import sys from types import StringType from cStringIO import StringIO -# custom import -from DataTypeConverters import writeBew, writeVar +from .DataTypeConverters import writeVar +from .DataTypeConverters import writeBew + class RawOutstreamFile(object): diff --git a/fretwork/midi/__init__.py b/fretwork/midi/__init__.py index fd71283..362ca9b 100644 --- a/fretwork/midi/__init__.py +++ b/fretwork/midi/__init__.py @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- -from MidiOutStream import MidiOutStream -from MidiOutFile import MidiOutFile -from MidiInStream import MidiInStream -from MidiInFile import MidiInFile -from MidiToText import MidiToText +from .MidiInFile import MidiInFile +from .MidiInStream import MidiInStream +from .MidiOutFile import MidiOutFile +from .MidiOutStream import MidiOutStream +from .MidiToText import MidiToText __all__ = ['MidiOutStream', 'MidiOutFile', From 416154bf66a079323743fbc2ecfb2d29fd07e0a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Magimel?= Date: Thu, 28 Dec 2017 16:35:04 +0100 Subject: [PATCH 4/5] Use python3 imports for StringIO and StringType Replace: - cStringIO.StringIO by io - types.StringType by str --- fretwork/midi/RawOutstreamFile.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fretwork/midi/RawOutstreamFile.py b/fretwork/midi/RawOutstreamFile.py index ad87fb7..c28fc0d 100644 --- a/fretwork/midi/RawOutstreamFile.py +++ b/fretwork/midi/RawOutstreamFile.py @@ -1,8 +1,12 @@ # -*- coding: utf-8 -*- import sys -from types import StringType -from cStringIO import StringIO +try: + from cStringIO import StringIO + from types import StringType +except ImportError: + import io as StringIO + StringType = str from .DataTypeConverters import writeVar from .DataTypeConverters import writeBew From 28b30be16d716af9eb2e4b6aaa3d55eaa1f7d588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Magimel?= Date: Thu, 28 Dec 2017 16:37:16 +0100 Subject: [PATCH 5/5] Replace str by bytes in the midi module --- fretwork/midi/MidiFileParser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fretwork/midi/MidiFileParser.py b/fretwork/midi/MidiFileParser.py index 1df64f9..f5ce334 100644 --- a/fretwork/midi/MidiFileParser.py +++ b/fretwork/midi/MidiFileParser.py @@ -39,7 +39,7 @@ def parseMThdChunk(self): header_chunk_zise = raw_in.readBew(4) # check if it is a proper midi file - if header_chunk_type != 'MThd': + if header_chunk_type != b'MThd': raise TypeError("It is not a valid midi file!") # Header values are at fixed locations, so no reason to be clever