From 0cf3c6721456258219f627657c04982c7d49d159 Mon Sep 17 00:00:00 2001 From: Graham Northup Date: Wed, 10 Oct 2018 19:31:05 -0400 Subject: added compressions for IV files --- .gitignore | 2 ++ broadcast.py | 10 +++++++++- mkiv.py | 36 +++++++++++++++++++++++++++++++++--- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 7df3784..5d78b4d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ client *.iv +*.ivz +*.ivb *.xml *.swp *.swo diff --git a/broadcast.py b/broadcast.py index bd607ca..d554e97 100644 --- a/broadcast.py +++ b/broadcast.py @@ -456,7 +456,15 @@ for fname in args: print 'PCM: exit' continue try: - iv = ET.parse(fname).getroot() + if fname.endswith('.ivz'): + import gzip + ivf = gzip.open(fname, 'rb') + elif fname.endswith('.ivb'): + import bz2 + ivf = bz2.BZ2File(fname, 'r') + else: + ivf = open(fname, 'rb') + iv = ET.parse(ivf).getroot() except IOError: import traceback traceback.print_exc() diff --git a/mkiv.py b/mkiv.py index 51eb103..f409024 100644 --- a/mkiv.py +++ b/mkiv.py @@ -55,7 +55,9 @@ parser.add_option('--wav-window', dest='wav_window', type='int', help='Size of t parser.add_option('--wav-streams', dest='wav_streams', type='int', help='Number of output streams to generate for the interval file') parser.add_option('--wav-log-width', dest='wav_log_width', type='float', help='Width of the correcting exponent--positive prefers high frequencies, negative prefers lower') parser.add_option('--wav-log-base', dest='wav_log_base', type='float', help='Base of the logarithm used to scale low frequencies') -parser.set_defaults(tracks=[], perc='GM', deviation=2, tempo='global', modres=0.005, modfdev=2.0, modffreq=8.0, modadev=0.5, modafreq=8.0, stringres=0, stringmax=1024, stringrateon=0.7, stringrateoff=0.4, stringthres=0.02, epsilon=1e-12, slack=0.0, real_slack=0.001, vol_pow=2, wav_winf='ones', wav_frames=512, wav_window=2048, wav_streams=16, wav_log_width=0.0, wav_log_base=2.0) +parser.add_option('--compression', dest='compression', help='Type of compression to use') +parser.add_option('--compressions', dest='compressions', action='store_true', help='List compressions that are supported') +parser.set_defaults(tracks=[], perc='GM', deviation=2, tempo='global', modres=0.005, modfdev=2.0, modffreq=8.0, modadev=0.5, modafreq=8.0, stringres=0, stringmax=1024, stringrateon=0.7, stringrateoff=0.4, stringthres=0.02, epsilon=1e-12, slack=0.0, real_slack=0.001, vol_pow=2, wav_winf='ones', wav_frames=512, wav_window=2048, wav_streams=16, wav_log_width=0.0, wav_log_base=2.0, compression='gzip') options, args = parser.parse_args() if options.tempo == 'f1': options.tempo == 'global' @@ -111,6 +113,34 @@ if not args: parser.print_usage() exit() +COMPRESSIONS = {} +def compression(name, desc='Not described.'): + def inner(f): + COMPRESSIONS[name] = (f, desc) + return inner + +@compression('none', 'No compression (default .iv format)') +def comp_none(bn): + return open(bn + '.iv', 'wb') + +@compression('gzip', 'GZip compression') +def comp_gzip(bn): + import gzip + return gzip.open(bn + '.ivz', 'wb') + +@compression('bz2', 'BZip2 compression') +def comp_bz2(bn): + import bz2 + return bz2.BZ2File(bn + '.ivb', 'w') + +if options.compressions: + for nm, tp in COMPRESSIONS.iteritems(): + f, desc = tp + print(nm, ':', desc) + exit() + +opener = COMPRESSIONS[options.compression][0] + if options.fuckit: import fuckit midi.read_midifile = fuckit(midi.read_midifile) @@ -818,6 +848,6 @@ for fname in args: ivapp = ET.SubElement(ivmeta, 'app') ivapp.text = 'mkiv' - print 'Done.' + print 'Done; writing with', options.compression, 'compression...' txt = ET.tostring(iv, 'UTF-8') - open(os.path.splitext(os.path.basename(fname))[0]+'.iv', 'wb').write(txt) + opener(os.path.splitext(os.path.basename(fname))[0]).write(txt) -- cgit v1.2.3-70-g09d2