-# -*- coding: ISO-8859-1 -*-\r
-\r
-# standard library imports\r
-import sys\r
-from types import StringType\r
-from struct import unpack\r
-from cStringIO import StringIO\r
-\r
-# custom import\r
-from DataTypeConverters import writeBew, writeVar, fromBytes\r
-\r
-class RawOutstreamFile:\r
- \r
- """\r
- \r
- Writes a midi file to disk.\r
- \r
- """\r
-\r
- def __init__(self, outfile=''):\r
- self.buffer = StringIO()\r
- self.outfile = outfile\r
-\r
-\r
- # native data reading functions\r
-\r
-\r
- def writeSlice(self, str_slice):\r
- "Writes the next text slice to the raw data"\r
- self.buffer.write(str_slice)\r
- \r
- \r
- def writeBew(self, value, length=1):\r
- "Writes a value to the file as big endian word"\r
- self.writeSlice(writeBew(value, length))\r
-\r
-\r
- def writeVarLen(self, value):\r
- "Writes a variable length word to the file"\r
- var = self.writeSlice(writeVar(value))\r
-\r
-\r
- def write(self):\r
- "Writes to disc"\r
- if self.outfile:\r
- if isinstance(self.outfile, StringType):\r
- outfile = open(self.outfile, 'wb')\r
- outfile.write(self.getvalue())\r
- outfile.close()\r
- else:\r
- self.outfile.write(self.getvalue())\r
- else:\r
- sys.stdout.write(self.getvalue())\r
- \r
- def getvalue(self):\r
- return self.buffer.getvalue()\r
-\r
-\r
-if __name__ == '__main__':\r
-\r
- out_file = 'test/midifiles/midiout.mid'\r
- out_file = ''\r
- rawOut = RawOutstreamFile(out_file)\r
- rawOut.writeSlice('MThd')\r
- rawOut.writeBew(6, 4)\r
- rawOut.writeBew(1, 2)\r
- rawOut.writeBew(2, 2)\r
- rawOut.writeBew(15360, 2)\r
- rawOut.write()\r