You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
15 years ago
|
# -*- coding: ISO-8859-1 -*-
|
||
|
|
||
|
# standard library imports
|
||
|
import sys
|
||
|
from types import StringType
|
||
|
from struct import unpack
|
||
|
from cStringIO import StringIO
|
||
|
|
||
|
# custom import
|
||
|
from DataTypeConverters import writeBew, writeVar, fromBytes
|
||
|
|
||
|
class RawOutstreamFile:
|
||
|
|
||
|
"""
|
||
|
|
||
|
Writes a midi file to disk.
|
||
|
|
||
|
"""
|
||
|
|
||
|
def __init__(self, outfile=''):
|
||
|
self.buffer = StringIO()
|
||
|
self.outfile = outfile
|
||
|
|
||
|
|
||
|
# native data reading functions
|
||
|
|
||
|
|
||
|
def writeSlice(self, str_slice):
|
||
|
"Writes the next text slice to the raw data"
|
||
|
self.buffer.write(str_slice)
|
||
|
|
||
|
|
||
|
def writeBew(self, value, length=1):
|
||
|
"Writes a value to the file as big endian word"
|
||
|
self.writeSlice(writeBew(value, length))
|
||
|
|
||
|
|
||
|
def writeVarLen(self, value):
|
||
|
"Writes a variable length word to the file"
|
||
|
var = self.writeSlice(writeVar(value))
|
||
|
|
||
|
|
||
|
def write(self):
|
||
|
"Writes to disc"
|
||
|
if self.outfile:
|
||
|
if isinstance(self.outfile, StringType):
|
||
|
outfile = open(self.outfile, 'wb')
|
||
|
outfile.write(self.getvalue())
|
||
|
outfile.close()
|
||
|
else:
|
||
|
self.outfile.write(self.getvalue())
|
||
|
else:
|
||
|
sys.stdout.write(self.getvalue())
|
||
|
|
||
|
def getvalue(self):
|
||
|
return self.buffer.getvalue()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
|
||
|
out_file = 'test/midifiles/midiout.mid'
|
||
|
out_file = ''
|
||
|
rawOut = RawOutstreamFile(out_file)
|
||
|
rawOut.writeSlice('MThd')
|
||
|
rawOut.writeBew(6, 4)
|
||
|
rawOut.writeBew(1, 2)
|
||
|
rawOut.writeBew(2, 2)
|
||
|
rawOut.writeBew(15360, 2)
|
||
|
rawOut.write()
|