#!/usr/bin/env python
# this script converts old (before 0.5.0) FreqTweak presets into
# the new format in place. (the original preset files are left for backward
# compatibility
import sys,os,shutil,string
def write_channel_node(wfile, info, pos):
# writes out entire channel node with
# known fixed modules and order
wfile.write(' \n' % \
(pos, info['input_gain'], info['mix_ratio'], info['bypassed'], info['muted']))
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n' % \
(info['freq_bypassed'], info['freq_linked']))
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n' % \
(info['scale_bypassed'], info['scale_linked']))
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n' % \
(info['inverse_gate_bypassed'], info['inverse_gate_linked']))
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n' % \
(info['gate_bypassed'], info['gate_linked']))
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n' % \
(info['delay_bypassed'], info['delay_linked']))
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n' % \
(info['feedback_bypassed'], info['feedback_linked']))
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n')
wfile.write(' \n')
for port in string.split(info['input_ports'], ','):
wfile.write(' \n' % port)
wfile.write(' \n')
wfile.write(' \n')
for port in string.split(info['output_ports'], ','):
wfile.write(' \n' % port)
wfile.write(' \n')
wfile.write(' \n')
# the main script follows
preset_dir = os.path.join(os.getenv('HOME', '.'), '.freqtweak', 'presets')
if len(sys.argv) > 1:
preset_dir = sys.argv[1]
try:
os.chdir(preset_dir)
except OSError, ex:
print 'Error accessing preset directory %s' % preset_dir
sys.exit(2)
# each directory in the presets dir is a preset
preset_names = os.listdir(preset_dir)
for pname in preset_names:
dirname = os.path.join(preset_dir, pname)
if not os.path.isdir(dirname):
continue
os.chdir(dirname)
if os.path.exists('config.xml'):
print 'Already converted: %s' % pname
continue
elif not os.path.exists('config.0'):
print 'No old preset in %s' % dirname
continue
orig_info = []
wfile = None
try:
wfile = open('config.xml', 'w+')
except IOError:
print 'error opening new %s/config.xml' % pname
continue
# write xml initial stuff
wfile.write('\n')
wfile.write('\n')
for chan in range(4):
if not os.path.exists('config.%d' % chan):
break
# copy filter files to new names
shutil.copy('freq.%d.filter' % chan, '%d_0_freq.filter' % chan)
shutil.copy('scale.%d.filter' % chan, '%d_1_scale.filter' % chan)
shutil.copy('gate.%d.filter' % chan, '%d_2_gate.filter' % chan)
shutil.copy('inverse_gate.%d.filter' % chan, '%d_2_inverse_gate.filter' % chan)
shutil.copy('delay.%d.filter' % chan, '%d_3_delay.filter' % chan)
shutil.copy('feedback.%d.filter' % chan, '%d_3_feedback.filter' % chan)
# now parse config
info = {}
cfile = None
try:
cfile = open('config.%d' % chan, 'r')
except IOError,ex:
print "error opening config.%d" % chan
continue
lines = cfile.readlines()
for line in lines:
line = string.strip(line)
if not line or line[0] == '#':
continue
try:
key,val = string.split(line, '=', 1)
except:
continue
info[key] = val
if chan==0:
# write params
wfile.write(' \n' % \
(info['fft_size'], info['windowing'], info['update_speed'], info['oversamp'], info['tempo'], info['max_delay']))
wfile.write(' \n')
# write Channel node
write_channel_node(wfile, info, chan)
wfile.write(' \n')
wfile.write('\n')
wfile.close()
print 'Converted: %s' % pname