diff options
Diffstat (limited to 'attic/muse2-oom/muse2/utils')
-rw-r--r-- | attic/muse2-oom/muse2/utils/CMakeLists.txt | 28 | ||||
-rwxr-xr-x | attic/muse2-oom/muse2/utils/muse-find-unused-wavs | 64 | ||||
-rwxr-xr-x | attic/muse2-oom/muse2/utils/muse-song-convert.py | 740 |
3 files changed, 832 insertions, 0 deletions
diff --git a/attic/muse2-oom/muse2/utils/CMakeLists.txt b/attic/muse2-oom/muse2/utils/CMakeLists.txt new file mode 100644 index 00000000..20ae35cd --- /dev/null +++ b/attic/muse2-oom/muse2/utils/CMakeLists.txt @@ -0,0 +1,28 @@ +#============================================================================= +# MusE +# Linux Music Editor +# $Id:$ +# +# Copyright (C) 2002-2006 by Werner Schweer and others +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2. +# +# 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., 675 Mass Ave, Cambridge, MA 02139, USA. +#============================================================================= + +file(GLOB utils_files + muse-find-unused-wavs + muse-song-convert.py + ) + +install (PROGRAMS ${utils_files} + DESTINATION ${MusE_SHARE_DIR}/utils/ + ) diff --git a/attic/muse2-oom/muse2/utils/muse-find-unused-wavs b/attic/muse2-oom/muse2/utils/muse-find-unused-wavs new file mode 100755 index 00000000..a325e1e0 --- /dev/null +++ b/attic/muse2-oom/muse2/utils/muse-find-unused-wavs @@ -0,0 +1,64 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +import os +import string +import shutil + +dirlist = os.listdir(".") + +wavs=[] + +print "muse-find-unused-wavs - check wav file usage in all *.med files in current dir." +print "" +print "This utility scans all med files in the current dir, maps their" +print "wave file usage to what is currently available in current dir." +print "The output is printed." +print "Files no longer used are moved to the subdir 'unused'" +print "Press enter to continue." +print "" +raw_input() + +for line in dirlist: + if (line.endswith( ".wav")): + #print "HA!", line + wavs.append(line) +print "====================================================" +print "====================================================" +print " These wave files were found in current directory:\n" +if wavs == []: + print "No files were found." + sys.exit(0) +else: + for f in wavs: + print f + +for line in dirlist: + if (line.endswith( ".med") ): + #print "HO!", line + med = file(line) + for line in med: + for wav in wavs: + if line.find(wav) != -1: + #print "found %s removing %s"%(line, wav) + wavs.remove(wav) + +print "====================================================" +print " These wave files were unused:\n" +if wavs == []: + print "None" +else: + for f in wavs: + print f + + print "moving to new subdir unused, press Enter to continue" + raw_input() + + try: + os.mkdir('unused') + except: + pass + for f in wavs: + shutil.move(f,'unused') +print "====================================================" +print "====================================================" + diff --git a/attic/muse2-oom/muse2/utils/muse-song-convert.py b/attic/muse2-oom/muse2/utils/muse-song-convert.py new file mode 100755 index 00000000..ff2f81b0 --- /dev/null +++ b/attic/muse2-oom/muse2/utils/muse-song-convert.py @@ -0,0 +1,740 @@ +#!/usr/bin/python +import sys +import os +import string + +version = "0.6" +########################################## +########################################## +# +# MusE song format converter +# +######################################### +######################################### + +# blocks to remove: +blocks = [ +["<segmentsize>","</segmentsize>"], +["<rtcTicks>","</rtcTicks>"], +["<useAlsa>", "</useAlsa>"], +["<useJack>", "</useJack>"], +["<extendedMidi>", "</extendedMidi>"], +["<midiExportDivision>", "</midiExportDivision>"], +["<font", "</font"], +["<theme>", "</theme>"], +["_font", "/>"], +["<show_page_no>","</show_page_no>"], +["<show_measure_no>","</show_measure_no>"], +["<paper_width>","</paper_width>"], +["<paper_height>","</paper_height>"], +["<top_margin>","</top_margin>"], +["<bottom_margin>","</bottom_margin>"], +["<left_margin>","</left_margin>"], +["<right_margin>","</right_margin>"], +["<bars_page>","</bars_page>"], +["<print_scale>","</print_scale>"], +["<show_track_name>","</show_track_name>"], +["<activityColor","</activityColor>"], +["<activityMode>","</activityMode>"], +["<score>","</score>"], +["<image>","</image>"], +["<part_type>","</part_type>"], +["<show_events>","</show_events>"], +["<grid>","</grid>"], +["<printer type","</printer>"], +["<bigtime visible","</bigtime>"], +["<transport visible","</transport>"], +["<audioInput>","</audioInput>"], +["<audioOutput","</audioOutput>"], +["<AudioInRoute>","</AudioInRoute>"], +["<track type=", "<track type="], +["</track", "</track"], +["<staff","</staff"], +["<noteQuant>","</noteQuant"], +["<restQuant>","</restQuant"], +["<midiThru>","</midiThru"], +["<splitpoint>","</splitpoint"], +] + +# To store array of audio groups +# input, group1,2,3,4 + master +AudioGroupTags = [ +"<channels>","<connect>","<volume>","<pan>", +"<mute>","<solo>","<prefader>","<off>"] +adata=[] +synths=[] +clips=[] +midiports=[] + +class MusEConvert: + def __init__(self): + self.insidePart = False + self.insideWaveTrack=False + self.currWaveTrackName="" + + # parse string and look for blocks to remove + def findAndSkipBlock(self, theFile, currLine): + for line in blocks: + if string.find(currLine , line[0]) > -1: + #print "Skipping %s"%line[0] + self.loopUntil(theFile, currLine, line[1]) + return True + return False + + # when a block has been found, loop until the end-tag. + def loopUntil(self, theFile, currLine, tagToFind): + loopEnd = False + if string.find(currLine , tagToFind) > -1: + loopEnd = True + while loopEnd == False: + line = inFile.readline() + if string.find(line, tagToFind) > -1: + loopEnd = True + + def fixComma(self, theFile, currLine): + newStr = string.replace(currLine , ",",".") + return newStr + + + def getSynth(self, theFile, currLine): + line = theFile.readline() # <class> + clas = self.getSimpleValue(line) + line = theFile.readline() # <name> + name = self.getSimpleValue(line) + line = theFile.readline() # <port> + port = self.getSimpleValue(line) + line = theFile.readline() # <guiVisible> + guiVisible = self.getSimpleValue(line) + + stateInfo = [] + line = theFile.readline() + notFoundStateEnd= True + if string.find(line , "<midistate") > -1: + notFoundStateEnd = True + line = theFile.readline() + + while notFoundStateEnd: + if string.find(line , "<event") > -1: + event = [] + event.append(line) + notFoundEventEnd = True + if string.find(line , "/>") > -1: + notFoundEventEnd = False + line = theFile.readline() + while notFoundEventEnd: + if string.find(line , "</event") > -1: + notFoundEventEnd = False + event.append(line) + line = theFile.readline() + stateInfo.append(event) + if string.find(line , "</midistate") > -1: + notFoundStateEnd = False + + # got all events + theFile.readline() # <audionode + # 0 1 2 3 4 + return ([clas,name,port,guiVisible,stateInfo]) + + def getAudio(self,theFile,currLine, atype, name, idx): + line = theFile.readline() # <channels> + ch = self.getSimpleValue(line) + + conn = "" + if atype == "audiomaster": # don't read any lines + pass + else: + line = theFile.readline() # <connect> + conn = self.getSimpleValue(line) + + line = theFile.readline() # <volume> + vol = self.getSimpleValue(line) + line = theFile.readline() # <pan> + pan = self.getSimpleValue(line) + + line = theFile.readline() # <mute> + mute = self.getSimpleValue(line) + line = theFile.readline() # <solo> + solo = self.getSimpleValue(line) + + line = theFile.readline() # <prefader> + pre = self.getSimpleValue(line) + + line = theFile.readline() # <off> + off = self.getSimpleValue(line) + + line = theFile.readline() # <plugin 1 + p1=[] + p2=[] + p3=[] + p4=[] + if string.find(line , "<plugin") > -1: + notFoundPlugEnd = True + while notFoundPlugEnd: + p1.append(line) + line = theFile.readline() # <plugin 1 + if string.find(line , "</plugin") > -1: + p1.append(line) + notFoundPlugEnd = False + + line = theFile.readline() # <plugin 2 + if string.find(line , "<plugin") > -1: + notFoundPlugEnd = True + while notFoundPlugEnd: + p2.append(line) + line = theFile.readline() # <plugin 2 + if string.find(line , "</plugin") > -1: + p2.append(line) + notFoundPlugEnd = False + + line = theFile.readline() # <plugin 3 + if string.find(line , "<plugin") > -1: + notFoundPlugEnd = True + while notFoundPlugEnd: + p3.append(line) + line = theFile.readline() # <plugin 3 + if string.find(line , "</plugin") > -1: + p3.append(line) + notFoundPlugEnd = False + + line = theFile.readline() # <plugin 4 + if string.find(line , "<plugin") > -1: + notFoundPlugEnd = True + while notFoundPlugEnd: + p4.append(line) + line = theFile.readline() # <plugin 4 + if string.find(line , "</plugin") > -1: + p3.append(line) + notFoundPlugEnd = False + + print "atype=", atype + print "p1=", p1 + print "p2=", p2 + print "p3=", p3 + print "p4=", p4 + + return([atype,name,idx,ch,conn,vol,pan,mute,solo,pre,off, p1,p2,p3,p4]) # add them together + + def checkAGroup(self, theFile, currLine): + if string.find(currLine , "<audiogroup") > -1: + print "AUDIOGROUP" + theFile.readline() # <audiogroup> + idx = self.getProperty(currLine, "idx") + print "idx=",idx + data = self.getAudio(theFile,currLine,"audiogroup", "Group %s"%(chr(int(idx)+65)),idx) + adata.append(data) + theFile.readline() # </audiogroup> + return True + else: + return False + + def checkSynth(self, theFile, currLine): + if string.find(currLine , "<synth") > -1: + print "SYNTH" + synt = self.getSynth(theFile,currLine) + data = self.getAudio(theFile,currLine,"synth", synt[1], 0) + print "got synth, name=%s route=%s",synt[1], data[5] + + theFile.readline() # </synth> + synths.append(synt) + adata.append(data) + + return True + else: + return False + + def checkAMaster(self, theFile, currLine): + if string.find(currLine , "<audiomaster") > -1: + print "AUDIOMASTER" + theFile.readline() # <audiomaster> + data = self.getAudio(theFile,currLine,"audiomaster", "Master",-1) + adata.append(data) + theFile.readline() # </audiomaster> + return True + else: + return False + + def checkAInput(self, theFile, currLine): + if string.find(currLine , "<audioinput") > -1: + print "AUDIOINPUT" + theFile.readline() # <audioinput> + idx = self.getProperty(currLine, "idx") + data = self.getAudio(theFile,currLine,"audioinput", "In 1",idx) + adata.append(data) + theFile.readline() # </audioinput> + return True + else: + return False + + # returns the property + def getProperty(self, currLine, tag): + prePtr = string.find(currLine , tag) + if prePtr == -1: + return -1 + firstPtr = string.find(currLine[prePtr:] , "\"") + lastPtr = string.find(currLine[firstPtr+prePtr+1:] , "\"") + return currLine[firstPtr+prePtr+1:firstPtr+prePtr+lastPtr+1] + + def checkMGroup(self, theFile, currLine): + if string.find(currLine , "<midiport") > -1: + print "MIDIPORT" + idx = self.getProperty(currLine, "idx") + line = theFile.readline() # <instrument> + inst = self.getSimpleValue(line) + line = theFile.readline() # <name> + name = self.getSimpleValue(line) + line = theFile.readline() # <record> + rec = self.getSimpleValue(line) + midiports.append([idx, inst, name,rec]) # add them together + line = theFile.readline() # </midiport> + return True + else: + return False + + + # retrieve the value of a simple XML tag + # format is important, must be: + # <tag>value</tag> + def getSimpleValue(self, line): + firstPtr = string.find(line, ">") # find end of first tag + lastPtr = string.find(line, "</") + outStr = line[firstPtr+1:lastPtr] + return outStr + + def checkClip(self, theFile, currLine): + if string.find(currLine , "<clip>") > -1: + if self.insidePart == False: + print "CLIP" + line = theFile.readline() # <file> + fil = self.getSimpleValue(line) + line = theFile.readline() # <name> + nam = self.getSimpleValue(line) + line = theFile.readline() # <name> + tick = self.getSimpleValue(line) + clips.append([nam, fil, tick]) # add them together + line = theFile.readline() # <len> + line = theFile.readline() # </clip> + else: + print "insertClip" + clipname = self.getSimpleValue(currLine) + for clip in clips: + if clip[0] == clipname: + outFile.write(" <frame>%s</frame>\n"%(clip[2])) + outFile.write(" <file>%s</file>\n"%(clip[1])) + return True + else: + return False + + + + def checkPart(self, theFile, currLine): + if string.find(currLine , "<part>") > -1: + print "PART" + self.insidePart = True + elif string.find(currLine , "</part>") > -1: + print "/PART" + self.insidePart = False + + def checkWaveTrack(self, theFile, currLine): + if string.find(currLine , "</wavetrack>") > -1: + print "/WAVETRACK" + self.insideWaveTrack = False + return False + elif string.find(currLine , "<wavetrack>") > -1: + print "WAVETRACK" + self.insideWaveTrack = True + return False + + if self.insideWaveTrack: # create dummy adata for the routing + if string.find(currLine , "<connect>") > -1: + con = self.getSimpleValue(currLine) + + #adata.append([atype,name,idx,ch,conn,vol,pan,mute,solo,pre,off, p1,p2,p3,p4]) + print ["wavetrack", self.currWaveTrackName,0,0,con,0,0,0,0,0,0,0,0,0,0] + adata.append(["wavetrack", self.currWaveTrackName,0,0,con,0,0,0,0,0,0,0,0,0,0]) + + return True + + elif string.find(currLine , "<audionode") > -1: + print "AUDIONODE - in wave track" + return True + elif string.find(currLine , "</audionode") > -1: + print "AUDIONODE - in wave track" + return True + elif string.find(currLine , "<volume>") > -1: + vol = self.getSimpleValue(currLine) + outFile.write(" <controller id=\"0\" cur=\"%s\">\n"%vol) + outFile.write(" </controller>\n") + return True + elif string.find(currLine , "<pan>") > -1: + pan = self.getSimpleValue(currLine) + outFile.write(" <controller id=\"1\" cur=\"%s\">\n"%pan) + outFile.write(" </controller>\n") + return True + return False + + def getWaveTrackName(self, theFile, currLine): + if self.insideWaveTrack and not self.insidePart: + if string.find(currLine , "<name>") > -1: + print "WAVETRACK - NAME" + self.currWaveTrackName = self.getSimpleValue(currLine) + print "self.currWaveTrackName =", self.currWaveTrackName + elif self.insideWaveTrack and self.insidePart: + pass + else: + self.currWaveTrackName = "" + + def checkTriggerForAdd(self, theFile, currLine): + if string.find(currLine , "<tempolist") > -1: + # we're in business, add ALL stored info: + # 1. AudioOutput + # 2. AudioInput + # 3. AudioGroup + # 4. SynthI + # 5. Routes + # + # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + # adata.append([atype,name,idx,ch,conn,vol,pan,mute,solo,pre,off,p1,p2,p3,p4]) + + # 1. + for line in adata: + if line[0] == "audiomaster": + #print "amaster" + #print line + outFile.write(" <AudioOutput>\n") + outFile.write(" <name>%s</name>\n"%line[1]) + outFile.write(" <record>0</record>\n") + outFile.write(" <mute>%s</mute>\n"%line[7]) + outFile.write(" <solo>%s</solo>\n"%line[8]) + outFile.write(" <off>%s</off>\n"%line[10]) + outFile.write(" <channels>%s</channels>\n"%line[3]) + outFile.write(" <height>20</height>\n") + outFile.write(" <locked>0</locked>\n") + outFile.write(" <prefader>%s</prefader>\n"%line[9]) + outFile.write(" <automation>1</automation>\n") + outFile.write(" <controller id=\"0\" cur=\"%s\">\n"%line[5]) + outFile.write(" </controller>\n") + outFile.write(" <controller id=\"1\" cur=\"%s\">\n"%line[6]) + outFile.write(" </controller>\n") + if line[11] !=[]: + print "%s line[11] %s"%(line[1],line[11]) + for pl in line[11]: + outFile.write(pl) + if line[12] !=[]: + print "%s line[12] %s"%(line[1],line[12]) + for pl in line[12]: + outFile.write(pl) + if line[13] !=[]: + print "%s line[13] %s"%(line[1],line[13]) + for pl in line[13]: + outFile.write(pl) + if line[14] !=[]: + print "%s line[14] %s"%(line[1],line[14]) + for pl in line[14]: + outFile.write(pl) + outFile.write(" </AudioOutput>\n") + + # 2. + for line in adata: + if line[0] == "audioinput": + outFile.write(" <AudioInput>\n") + outFile.write(" <name>%s</name>\n"%line[1]) + outFile.write(" <record>0</record>\n") + outFile.write(" <mute>%s</mute>\n"%line[7]) + outFile.write(" <solo>%s</solo>\n"%line[8]) + outFile.write(" <off>%s</off>\n"%line[10]) + outFile.write(" <channels>%s</channels>\n"%line[3]) + outFile.write(" <height>20</height>\n") + outFile.write(" <locked>0</locked>\n") + outFile.write(" <prefader>%s</prefader>\n"%line[9]) + outFile.write(" <automation>1</automation>\n") + outFile.write(" <controller id=\"0\" cur=\"%s\">\n"%line[5]) + outFile.write(" </controller>\n") + outFile.write(" <controller id=\"1\" cur=\"%s\">\n"%line[6]) + outFile.write(" </controller>\n") + if line[11] !=[]: + print "%s line[11] %s"%(line[1],line[11]) + for pl in line[11]: + outFile.write(pl) + if line[12] !=[]: + print "%s line[12] %s"%(line[1],line[12]) + for pl in line[12]: + outFile.write(pl) + if line[13] !=[]: + print "%s line[13] %s"%(line[1],line[13]) + for pl in line[13]: + outFile.write(pl) + if line[14] !=[]: + print "%s line[14] %s"%(line[1],line[14]) + for pl in line[14]: + outFile.write(pl) + outFile.write(" </AudioInput>\n") + + # 3. + for line in adata: + if line[0] == "audiogroup": + outFile.write(" <AudioGroup>\n") + outFile.write(" <name>%s</name>\n"%line[1]) + outFile.write(" <record>0</record>\n") + outFile.write(" <mute>%s</mute>\n"%line[7]) + outFile.write(" <solo>%s</solo>\n"%line[8]) + outFile.write(" <off>%s</off>\n"%line[10]) + outFile.write(" <channels>%s</channels>\n"%line[3]) + outFile.write(" <height>20</height>\n") + outFile.write(" <locked>0</locked>\n") + outFile.write(" <prefader>%s</prefader>\n"%line[9]) + outFile.write(" <automation>1</automation>\n") + outFile.write(" <controller id=\"0\" cur=\"%s\">\n"%line[5]) + outFile.write(" </controller>\n") + outFile.write(" <controller id=\"1\" cur=\"%s\">\n"%line[6]) + outFile.write(" </controller>\n") + if line[11] !=[]: + print "%s line[11] %s"%(line[1],line[11]) + for pl in line[11]: + outFile.write(pl) + if line[12] !=[]: + print "%s line[12] %s"%(line[1],line[12]) + for pl in line[12]: + outFile.write(pl) + if line[13] !=[]: + print "%s line[13] %s"%(line[1],line[13]) + for pl in line[13]: + outFile.write(pl) + if line[14] !=[]: + print "%s line[14] %s"%(line[1],line[14]) + for pl in line[14]: + outFile.write(pl) + outFile.write(" </AudioGroup>\n") + + # 4. + for line in adata: + if line[0] == "synth": + outFile.write(" <SynthI>\n") + outFile.write(" <name>%s</name>\n"%line[1]) + outFile.write(" <record>0</record>\n") + outFile.write(" <mute>%s</mute>\n"%line[7]) + outFile.write(" <solo>%s</solo>\n"%line[8]) + outFile.write(" <off>%s</off>\n"%line[10]) + outFile.write(" <channels>%s</channels>\n"%line[3]) + outFile.write(" <height>20</height>\n") + outFile.write(" <locked>0</locked>\n") + outFile.write(" <prefader>%s</prefader>\n"%line[9]) + outFile.write(" <automation>1</automation>\n") + outFile.write(" <controller id=\"0\" cur=\"%s\">\n"%line[5]) + outFile.write(" </controller>\n") + outFile.write(" <controller id=\"1\" cur=\"%s\">\n"%line[6]) + outFile.write(" </controller>\n") + +# event data + for synt in synths: + if synt[1] == line[1]: + # we found this synth, proceed + outFile.write(" <class>%s</class>\n"%synt[0]) + outFile.write(" <port>%s</port>\n"%synt[2]) + outFile.write(" <guiVisible>%s</guiVisible>\n"%synt[3]) + outFile.write(" <midistate>\n") + + if synt[0] == "fluidsynth": + # Woaaahh, special treatment, do I have something for you!!!! + self.processFluid(synt) + else: + # Other synth + for state in synt[4]: + for evl in state: + outFile.write(evl) + + outFile.write(" </midistate>\n") + + + + #return ([clas,name,port,guiVisible,stateInfo]) + + outFile.write(" </SynthI>\n") + + # 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + # adata.append([atype,name,idx,ch,conn,vol,pan,mute,solo,pre,off,p1,p2,p3,p4]) + + # 5. - create all routes + for line in adata: + for line2 in adata: + if line[4] == line2[1]: + print ">route %s line[4]=%s %s line2[1]=%s"%(line[1],line[4],line2[1],line2[1]) + outFile.write(" <Route>\n") + outFile.write(" <srcNode>%s</srcNode>\n"%line[1]) + outFile.write(" <dstNode>%s</dstNode>\n"%line2[1]) + outFile.write(" </Route>\n") + else: + print "-route %s line[4]=%s %s line2[1]=%s"%(line[1],line[4],line2[1],line2[1]) + + outFile.write(" <Route>\n") + outFile.write(" <srcNode>1:Master</srcNode>\n") + outFile.write(" <dstNode>alsa_pcm:playback_1</dstNode>\n") + outFile.write(" </Route>\n") + outFile.write(" <Route>\n") + outFile.write(" <srcNode>2:Master</srcNode>\n") + outFile.write(" <dstNode>alsa_pcm:playback_2</dstNode>\n") + outFile.write(" </Route>\n") + + def processFluid(self, fluid): + # here we go + print "Fluidsynth!!" + #for state in fluid[4]: + # for evl in state: + # outFile.write(evl) + + # ok, let's convert the first event + + outdata=" " + nbrOfFonts=0 + counter2f = 0 + externalConnects=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + externalConnects2f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + for event in fluid[4]: + hexstr = self.convertEventToHexStr(event) + print hexstr + counter1 = 0 + counter2 = 0 + if hexstr[0] == "28": + externalConnects[nbrOfFonts] = hexstr[1] + nbrOfFonts = nbrOfFonts+1 + for h in hexstr[2:-1]: + outdata = outdata + "%s "%h + counter1 == counter1 + 1 + counter2 == counter2 + 1 + if counter1 > 9: + outdata = outdata + "\n " + counter1= 0 + + elif hexstr[0] == "2f": + # ext_id preset channel + externalConnects2f[counter2f] = "%s %s %s "%(hexstr[1],hexstr[3], "00") #hexstr[2]) + counter2f=counter2f+1 + # translate + # initStr = "f2 00 03 01 2f 00" # fluid v3 , one soundfont, lastdir= "/" + + + + outFile.write(" <event type=\"2\" datalen=\"2000\">\n") #%(len(hex)-3)) + outFile.write(" f2 00 03 0%X 2f 00\n"%nbrOfFonts) + outFile.write(outdata) + outFile.write("\n ff ") + for i in range(nbrOfFonts): + outFile.write("%s "%(externalConnects[i])) + outFile.write("\n ") + for ext in externalConnects2f: + outFile.write(ext) + outFile.write("\n 00 00 00 00 00 00 00 00\n") + outFile.write(" 00 00 00 00 ff ff ff ff 00 00 00 00 00 00\n") + + #outFile.write(" ff 00 00 81 00 7f 81 00 7f\n") +# outFile.write(" 81 00 7f 81 00 7f 81 00 7f 81 00 7f 81 00 7f 81\n") +# outFile.write(" 00 7f 81 00 7f 81 00 7f 81 00 7f 81 00 7f 81 00\n") +# outFile.write(" 7f 81 00 7f 81 00 7f 81 00 00 00 00 00 00 00 00\n") + outFile.write(" </event>\n") + + + + def convertEventToHexStr(self, event): + # here we go + newLine=[] + for line in event[1:-1]: + splitLine = string.split(line) + nbr = len(splitLine) + #print nbr + #print splitLine + + count = 0 + while count < nbr: + newLine.append("%s%s"%(splitLine[count][1],splitLine[count+1][1])) + count = count + 2 + + #print newLine + + return newLine + + + + +def help(): + print "Utility to convert MusE 0.6 songs to 0.7 or newer song format." + print "Usage: muse-convert <song file to convert>" + print "" + print "Please report any problems with this script to rj@spamatica.se" + print "Author: Robert Jonsson, 2005, Copylefted under the GPL" + +######################## +# --- Main program --- # +######################## + +print "MusE Song converter %s"%version +print "" + +if len(sys.argv) < 2: + help() + sys.exit("") + +print "Processing file ", sys.argv[1] +print "" +# step 1 - remove malformed data +inFile = file(sys.argv[1]) + +outFile = file(sys.argv[1]+".tmp","w") +fileEnd = False + +convert = MusEConvert() + +#take care of first few lines: +outFile.write(inFile.readline()) # <?xml +line = inFile.readline() # <muse string +if string.find(line, "<muse version=\"1.0\">") == -1: + print "Unable to confirm that this is a song file with the old format, aborting..." + sys.exit("") +outFile.write("<muse version=\"2.0\" comment=\"converted by muse converter v%s\">\n"%version) + + +while fileEnd == False: + line = inFile.readline() + if line == "": + fileEnd = True + newLine = convert.fixComma(inFile,line) + outFile.write(newLine) + +inFile.close() +outFile.close() + +#sys.exit("") +inFile = file(sys.argv[1]+".tmp","r") +outFile = file(sys.argv[1]+".converted","w") +fileEnd = False + +while fileEnd == False: + line = inFile.readline() + if line == "": + fileEnd = True + + convert.checkPart(inFile,line) # only state variables + convert.getWaveTrackName(inFile,line) # only state variables + + convert.checkTriggerForAdd(inFile,line) # insert routes+stuff? + + if convert.findAndSkipBlock(inFile, line) == True: + pass + elif convert.checkAGroup(inFile,line): + pass + elif convert.checkAMaster(inFile,line): + pass + elif convert.checkSynth(inFile,line): + pass + elif convert.checkAInput(inFile,line): + pass + #elif convert.checkMGroup(inFile,line): + # pass + elif convert.checkClip(inFile,line): + pass + elif convert.checkWaveTrack(inFile,line): # only state variables + pass + else: + outFile.write(line) + +print "" +print "Converted!" +print "" |