xref: /aosp_15_r20/external/sonivox/jet_tools/JetCreator/JetUtils.py (revision f81fb7c475c4b71ff83bdcc517de2a8c174e4e5c)
1*f81fb7c4SAndroid Build Coastguard Worker"""
2*f81fb7c4SAndroid Build Coastguard Worker File:
3*f81fb7c4SAndroid Build Coastguard Worker JetUtils.py
4*f81fb7c4SAndroid Build Coastguard Worker
5*f81fb7c4SAndroid Build Coastguard Worker Contents and purpose:
6*f81fb7c4SAndroid Build Coastguard Worker Utilities used throughout JetCreator
7*f81fb7c4SAndroid Build Coastguard Worker
8*f81fb7c4SAndroid Build Coastguard Worker Copyright (c) 2008 Android Open Source Project
9*f81fb7c4SAndroid Build Coastguard Worker
10*f81fb7c4SAndroid Build Coastguard Worker Licensed under the Apache License, Version 2.0 (the "License");
11*f81fb7c4SAndroid Build Coastguard Worker you may not use this file except in compliance with the License.
12*f81fb7c4SAndroid Build Coastguard Worker You may obtain a copy of the License at
13*f81fb7c4SAndroid Build Coastguard Worker
14*f81fb7c4SAndroid Build Coastguard Worker      http://www.apache.org/licenses/LICENSE-2.0
15*f81fb7c4SAndroid Build Coastguard Worker
16*f81fb7c4SAndroid Build Coastguard Worker Unless required by applicable law or agreed to in writing, software
17*f81fb7c4SAndroid Build Coastguard Worker distributed under the License is distributed on an "AS IS" BASIS,
18*f81fb7c4SAndroid Build Coastguard Worker WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19*f81fb7c4SAndroid Build Coastguard Worker See the License for the specific language governing permissions and
20*f81fb7c4SAndroid Build Coastguard Worker limitations under the License.
21*f81fb7c4SAndroid Build Coastguard Worker"""
22*f81fb7c4SAndroid Build Coastguard Worker
23*f81fb7c4SAndroid Build Coastguard Workerfrom __future__ import with_statement
24*f81fb7c4SAndroid Build Coastguard Worker
25*f81fb7c4SAndroid Build Coastguard Workerimport wx
26*f81fb7c4SAndroid Build Coastguard Workerimport os
27*f81fb7c4SAndroid Build Coastguard Workerimport copy
28*f81fb7c4SAndroid Build Coastguard Workerimport ConfigParser
29*f81fb7c4SAndroid Build Coastguard Workerimport logging
30*f81fb7c4SAndroid Build Coastguard Workerimport time
31*f81fb7c4SAndroid Build Coastguard Workerimport tempfile
32*f81fb7c4SAndroid Build Coastguard Worker
33*f81fb7c4SAndroid Build Coastguard Workerfrom JetDefs import *
34*f81fb7c4SAndroid Build Coastguard Workerfrom JetDebug import *
35*f81fb7c4SAndroid Build Coastguard Workerfrom midifile import TimeBase, trackGrid
36*f81fb7c4SAndroid Build Coastguard Worker
37*f81fb7c4SAndroid Build Coastguard Workerclass JetCutCopy(object):
38*f81fb7c4SAndroid Build Coastguard Worker    """ Handles cut/copy/pasting of events and segments """
39*f81fb7c4SAndroid Build Coastguard Worker    def __init__ (self, objType, objSave, currentSegmentName):
40*f81fb7c4SAndroid Build Coastguard Worker        self.objType = objType
41*f81fb7c4SAndroid Build Coastguard Worker        self.objSave = copy.deepcopy(objSave)
42*f81fb7c4SAndroid Build Coastguard Worker        self.currentSegmentName = currentSegmentName
43*f81fb7c4SAndroid Build Coastguard Worker
44*f81fb7c4SAndroid Build Coastguard Worker    def GetObj(self, objList):
45*f81fb7c4SAndroid Build Coastguard Worker        """ Gets an object """
46*f81fb7c4SAndroid Build Coastguard Worker        objSave = copy.deepcopy(self.objSave)
47*f81fb7c4SAndroid Build Coastguard Worker        if self.objType == JetDefs.MAIN_SEGLIST:
48*f81fb7c4SAndroid Build Coastguard Worker            oldName = objSave.segname
49*f81fb7c4SAndroid Build Coastguard Worker            i = len(oldName) - 1
50*f81fb7c4SAndroid Build Coastguard Worker            while i > 0:
51*f81fb7c4SAndroid Build Coastguard Worker                if not oldName[i].isdigit():
52*f81fb7c4SAndroid Build Coastguard Worker                    break
53*f81fb7c4SAndroid Build Coastguard Worker                i = i - 1
54*f81fb7c4SAndroid Build Coastguard Worker            oldName = oldName[0:i+1]
55*f81fb7c4SAndroid Build Coastguard Worker            i = 1
56*f81fb7c4SAndroid Build Coastguard Worker            while True:
57*f81fb7c4SAndroid Build Coastguard Worker                newName = oldName + str(i)
58*f81fb7c4SAndroid Build Coastguard Worker                if self.UniqueSegName(newName, objList):
59*f81fb7c4SAndroid Build Coastguard Worker                    break
60*f81fb7c4SAndroid Build Coastguard Worker                i = i + 1
61*f81fb7c4SAndroid Build Coastguard Worker            objSave.segname = newName
62*f81fb7c4SAndroid Build Coastguard Worker        elif self.objType == JetDefs.MAIN_EVENTLIST:
63*f81fb7c4SAndroid Build Coastguard Worker            oldName = objSave.event_name
64*f81fb7c4SAndroid Build Coastguard Worker            i = len(oldName) - 1
65*f81fb7c4SAndroid Build Coastguard Worker            while i > 0:
66*f81fb7c4SAndroid Build Coastguard Worker                if not oldName[i].isdigit():
67*f81fb7c4SAndroid Build Coastguard Worker                    break
68*f81fb7c4SAndroid Build Coastguard Worker                i = i - 1
69*f81fb7c4SAndroid Build Coastguard Worker            oldName = oldName[0:i+1]
70*f81fb7c4SAndroid Build Coastguard Worker            i = 1
71*f81fb7c4SAndroid Build Coastguard Worker            while True:
72*f81fb7c4SAndroid Build Coastguard Worker                newName = oldName + str(i)
73*f81fb7c4SAndroid Build Coastguard Worker                if self.UniqueEventName(newName, objList):
74*f81fb7c4SAndroid Build Coastguard Worker                    break
75*f81fb7c4SAndroid Build Coastguard Worker                i = i + 1
76*f81fb7c4SAndroid Build Coastguard Worker            objSave.event_name = newName
77*f81fb7c4SAndroid Build Coastguard Worker        return objSave
78*f81fb7c4SAndroid Build Coastguard Worker
79*f81fb7c4SAndroid Build Coastguard Worker    def UniqueSegName(self, nameVal, seglist):
80*f81fb7c4SAndroid Build Coastguard Worker        for nm in seglist:
81*f81fb7c4SAndroid Build Coastguard Worker            if nm.segname == nameVal:
82*f81fb7c4SAndroid Build Coastguard Worker                return False
83*f81fb7c4SAndroid Build Coastguard Worker        return True
84*f81fb7c4SAndroid Build Coastguard Worker
85*f81fb7c4SAndroid Build Coastguard Worker    def UniqueEventName(self, nameVal, eventlist):
86*f81fb7c4SAndroid Build Coastguard Worker        for nm in eventlist:
87*f81fb7c4SAndroid Build Coastguard Worker            if nm.event_name == nameVal:
88*f81fb7c4SAndroid Build Coastguard Worker                return False
89*f81fb7c4SAndroid Build Coastguard Worker        return True
90*f81fb7c4SAndroid Build Coastguard Worker
91*f81fb7c4SAndroid Build Coastguard Worker
92*f81fb7c4SAndroid Build Coastguard Workerclass JetState(object):
93*f81fb7c4SAndroid Build Coastguard Worker    """ Saves the state for cut/copy/paste """
94*f81fb7c4SAndroid Build Coastguard Worker    def __init__ (self, jet_file, currentSegmentIndex, currentEventIndex):
95*f81fb7c4SAndroid Build Coastguard Worker        self.jet_file = copy.deepcopy(jet_file)
96*f81fb7c4SAndroid Build Coastguard Worker        self.currentSegmentIndex = currentSegmentIndex
97*f81fb7c4SAndroid Build Coastguard Worker        self.currentEventIndex = currentEventIndex
98*f81fb7c4SAndroid Build Coastguard Worker
99*f81fb7c4SAndroid Build Coastguard Workerdef Queue (jet, queueSeg):
100*f81fb7c4SAndroid Build Coastguard Worker    """ Queues a segment """
101*f81fb7c4SAndroid Build Coastguard Worker    jet.QueueSegment(queueSeg.userID, queueSeg.seg_num, queueSeg.dls_num, queueSeg.repeat, queueSeg.transpose, queueSeg.mute_flags)
102*f81fb7c4SAndroid Build Coastguard Worker
103*f81fb7c4SAndroid Build Coastguard Workerclass QueueSeg(object):
104*f81fb7c4SAndroid Build Coastguard Worker    """ Object representing a segment """
105*f81fb7c4SAndroid Build Coastguard Worker    def __init__ (self, name, userID, seg_num, dls_num=-1, repeat=0, transpose=0, mute_flags=0, status=''):
106*f81fb7c4SAndroid Build Coastguard Worker        self.name = name
107*f81fb7c4SAndroid Build Coastguard Worker        self.userID = userID
108*f81fb7c4SAndroid Build Coastguard Worker        self.seg_num = seg_num
109*f81fb7c4SAndroid Build Coastguard Worker        self.dls_num = dls_num
110*f81fb7c4SAndroid Build Coastguard Worker        self.repeat = repeat
111*f81fb7c4SAndroid Build Coastguard Worker        self.transpose = transpose
112*f81fb7c4SAndroid Build Coastguard Worker        self.mute_flags = mute_flags
113*f81fb7c4SAndroid Build Coastguard Worker        self.status = status
114*f81fb7c4SAndroid Build Coastguard Worker        #DumpQueueSeg(self)
115*f81fb7c4SAndroid Build Coastguard Worker
116*f81fb7c4SAndroid Build Coastguard Workerdef FindDlsNum(libraries, dlsfile):
117*f81fb7c4SAndroid Build Coastguard Worker    """ Looks for a dls file in the library list """
118*f81fb7c4SAndroid Build Coastguard Worker    for index, library in enumerate(libraries):
119*f81fb7c4SAndroid Build Coastguard Worker        if library == dlsfile:
120*f81fb7c4SAndroid Build Coastguard Worker            return index
121*f81fb7c4SAndroid Build Coastguard Worker    return -1
122*f81fb7c4SAndroid Build Coastguard Worker
123*f81fb7c4SAndroid Build Coastguard Workerdef SetRowSelection(list, row, state):
124*f81fb7c4SAndroid Build Coastguard Worker    """ Sets the selection status of a list row """
125*f81fb7c4SAndroid Build Coastguard Worker    if state:
126*f81fb7c4SAndroid Build Coastguard Worker        list.SetItemState(row, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
127*f81fb7c4SAndroid Build Coastguard Worker    else:
128*f81fb7c4SAndroid Build Coastguard Worker        list.SetItemState(row, ~wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
129*f81fb7c4SAndroid Build Coastguard Worker
130*f81fb7c4SAndroid Build Coastguard Workerdef ClearRowSelections(list):
131*f81fb7c4SAndroid Build Coastguard Worker    """ Clears the list rows selection status """
132*f81fb7c4SAndroid Build Coastguard Worker    index = list.GetFirstSelected()
133*f81fb7c4SAndroid Build Coastguard Worker    while index != -1:
134*f81fb7c4SAndroid Build Coastguard Worker        SetRowSelection(list, index, False)
135*f81fb7c4SAndroid Build Coastguard Worker        index = list.GetNextSelected(index)
136*f81fb7c4SAndroid Build Coastguard Worker
137*f81fb7c4SAndroid Build Coastguard Workerdef getColumnText(list, index, col):
138*f81fb7c4SAndroid Build Coastguard Worker    """ Sets the text of a column """
139*f81fb7c4SAndroid Build Coastguard Worker    item = list.GetItem(index, col)
140*f81fb7c4SAndroid Build Coastguard Worker    return item.GetText()
141*f81fb7c4SAndroid Build Coastguard Worker
142*f81fb7c4SAndroid Build Coastguard Workerdef getColumnValue(list, index, col):
143*f81fb7c4SAndroid Build Coastguard Worker    """ Gets the text of a column """
144*f81fb7c4SAndroid Build Coastguard Worker    item = list.GetItem(index, col)
145*f81fb7c4SAndroid Build Coastguard Worker    v = str(item.GetText())
146*f81fb7c4SAndroid Build Coastguard Worker    if len(v) > 0:
147*f81fb7c4SAndroid Build Coastguard Worker        return int(item.GetText())
148*f81fb7c4SAndroid Build Coastguard Worker    else:
149*f81fb7c4SAndroid Build Coastguard Worker        return 0
150*f81fb7c4SAndroid Build Coastguard Worker
151*f81fb7c4SAndroid Build Coastguard Workerdef StrNoneChk(fld):
152*f81fb7c4SAndroid Build Coastguard Worker    """ Returns a blank string if none """
153*f81fb7c4SAndroid Build Coastguard Worker    if fld is None:
154*f81fb7c4SAndroid Build Coastguard Worker        return ""
155*f81fb7c4SAndroid Build Coastguard Worker    return str(fld)
156*f81fb7c4SAndroid Build Coastguard Worker
157*f81fb7c4SAndroid Build Coastguard Workerdef ConvertStrTimeToTuple(s):
158*f81fb7c4SAndroid Build Coastguard Worker    """ Converts a string time to a tuple """
159*f81fb7c4SAndroid Build Coastguard Worker    try:
160*f81fb7c4SAndroid Build Coastguard Worker        measures, beats, ticks = s.split(':',3)
161*f81fb7c4SAndroid Build Coastguard Worker        return (int(measures), int(beats), int(ticks))
162*f81fb7c4SAndroid Build Coastguard Worker    except:
163*f81fb7c4SAndroid Build Coastguard Worker        return JetDefs.MBT_DEFAULT
164*f81fb7c4SAndroid Build Coastguard Worker
165*f81fb7c4SAndroid Build Coastguard Workerdef FileRelativePath(target, base=os.curdir):
166*f81fb7c4SAndroid Build Coastguard Worker    """ Returns relative file path """
167*f81fb7c4SAndroid Build Coastguard Worker    if not os.path.exists(target):
168*f81fb7c4SAndroid Build Coastguard Worker        return target
169*f81fb7c4SAndroid Build Coastguard Worker
170*f81fb7c4SAndroid Build Coastguard Worker    if not os.path.isdir(base):
171*f81fb7c4SAndroid Build Coastguard Worker        return target
172*f81fb7c4SAndroid Build Coastguard Worker
173*f81fb7c4SAndroid Build Coastguard Worker    base_list = (os.path.abspath(base)).split(os.sep)
174*f81fb7c4SAndroid Build Coastguard Worker    target_list = (os.path.abspath(target)).split(os.sep)
175*f81fb7c4SAndroid Build Coastguard Worker    if os.name in ['nt','dos','os2'] and base_list[0] <> target_list[0]:
176*f81fb7c4SAndroid Build Coastguard Worker        return target
177*f81fb7c4SAndroid Build Coastguard Worker    for i in range(min(len(base_list), len(target_list))):
178*f81fb7c4SAndroid Build Coastguard Worker        if base_list[i] <> target_list[i]: break
179*f81fb7c4SAndroid Build Coastguard Worker    else:
180*f81fb7c4SAndroid Build Coastguard Worker        i+=1
181*f81fb7c4SAndroid Build Coastguard Worker    rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:]
182*f81fb7c4SAndroid Build Coastguard Worker    return os.path.join(*rel_list)
183*f81fb7c4SAndroid Build Coastguard Worker
184*f81fb7c4SAndroid Build Coastguard Workerdef FileFixPath(fileSpec):
185*f81fb7c4SAndroid Build Coastguard Worker    """ Tweaks slashes """
186*f81fb7c4SAndroid Build Coastguard Worker    return fileSpec.replace("\\", "/")
187*f81fb7c4SAndroid Build Coastguard Worker
188*f81fb7c4SAndroid Build Coastguard Workerdef FileKillClean(fileName):
189*f81fb7c4SAndroid Build Coastguard Worker    """ Deletes a file skipping errors """
190*f81fb7c4SAndroid Build Coastguard Worker    try:
191*f81fb7c4SAndroid Build Coastguard Worker        os.remove(fileName)
192*f81fb7c4SAndroid Build Coastguard Worker    except:
193*f81fb7c4SAndroid Build Coastguard Worker        pass
194*f81fb7c4SAndroid Build Coastguard Worker
195*f81fb7c4SAndroid Build Coastguard Workerdef FileJustRoot(fileName):
196*f81fb7c4SAndroid Build Coastguard Worker    """ Gets just the root of the file name """
197*f81fb7c4SAndroid Build Coastguard Worker    try:
198*f81fb7c4SAndroid Build Coastguard Worker        return os.path.splitext(fileName)[0]
199*f81fb7c4SAndroid Build Coastguard Worker    except:
200*f81fb7c4SAndroid Build Coastguard Worker        return ""
201*f81fb7c4SAndroid Build Coastguard Worker
202*f81fb7c4SAndroid Build Coastguard Workerdef FileJustName(fileName):
203*f81fb7c4SAndroid Build Coastguard Worker    """ Gets just the filename, without the path """
204*f81fb7c4SAndroid Build Coastguard Worker    try:
205*f81fb7c4SAndroid Build Coastguard Worker        return os.path.split(fileName)[1]
206*f81fb7c4SAndroid Build Coastguard Worker    except:
207*f81fb7c4SAndroid Build Coastguard Worker        return ""
208*f81fb7c4SAndroid Build Coastguard Worker
209*f81fb7c4SAndroid Build Coastguard Workerdef FileJustPath(fileName):
210*f81fb7c4SAndroid Build Coastguard Worker    """ Gets just the path, without the file name """
211*f81fb7c4SAndroid Build Coastguard Worker    try:
212*f81fb7c4SAndroid Build Coastguard Worker        return os.path.split(fileName)[0]
213*f81fb7c4SAndroid Build Coastguard Worker    except:
214*f81fb7c4SAndroid Build Coastguard Worker        return ""
215*f81fb7c4SAndroid Build Coastguard Worker
216*f81fb7c4SAndroid Build Coastguard Workerdef FileJustExt(fileName):
217*f81fb7c4SAndroid Build Coastguard Worker    """ Gets just the extension of the file """
218*f81fb7c4SAndroid Build Coastguard Worker    try:
219*f81fb7c4SAndroid Build Coastguard Worker        ext = os.path.splitext(fileName)[1]
220*f81fb7c4SAndroid Build Coastguard Worker        return ext.upper()
221*f81fb7c4SAndroid Build Coastguard Worker    except:
222*f81fb7c4SAndroid Build Coastguard Worker        return ""
223*f81fb7c4SAndroid Build Coastguard Worker
224*f81fb7c4SAndroid Build Coastguard Workerdef FileDateTime(fileName):
225*f81fb7c4SAndroid Build Coastguard Worker    """ Gets the date/time of a file """
226*f81fb7c4SAndroid Build Coastguard Worker    try:
227*f81fb7c4SAndroid Build Coastguard Worker        filetime = time.ctime(os.path.getmtime(fileName))
228*f81fb7c4SAndroid Build Coastguard Worker        return filetime
229*f81fb7c4SAndroid Build Coastguard Worker    except:
230*f81fb7c4SAndroid Build Coastguard Worker        return ""
231*f81fb7c4SAndroid Build Coastguard Worker
232*f81fb7c4SAndroid Build Coastguard Workerdef FileExists(fileName):
233*f81fb7c4SAndroid Build Coastguard Worker    """ Checks if a file exists """
234*f81fb7c4SAndroid Build Coastguard Worker    try:
235*f81fb7c4SAndroid Build Coastguard Worker        return os.path.exists(fileName)
236*f81fb7c4SAndroid Build Coastguard Worker    except:
237*f81fb7c4SAndroid Build Coastguard Worker        return False
238*f81fb7c4SAndroid Build Coastguard Worker
239*f81fb7c4SAndroid Build Coastguard Workerdef IniSetValue(configFile, section, option, value):
240*f81fb7c4SAndroid Build Coastguard Worker    """ Sets the value of a config file field """
241*f81fb7c4SAndroid Build Coastguard Worker    config = ConfigParser.ConfigParser()
242*f81fb7c4SAndroid Build Coastguard Worker    config.read(configFile)
243*f81fb7c4SAndroid Build Coastguard Worker    if not config.has_section(section):
244*f81fb7c4SAndroid Build Coastguard Worker        config.add_section(section)
245*f81fb7c4SAndroid Build Coastguard Worker    config.set(section, option, value)
246*f81fb7c4SAndroid Build Coastguard Worker    cfgfile = open(configFile,'w')
247*f81fb7c4SAndroid Build Coastguard Worker    config.write(cfgfile)
248*f81fb7c4SAndroid Build Coastguard Worker    cfgfile.close()
249*f81fb7c4SAndroid Build Coastguard Worker
250*f81fb7c4SAndroid Build Coastguard Workerdef IniGetValue(configFile, section, option, retType='str', default=''):
251*f81fb7c4SAndroid Build Coastguard Worker    """ Gets the value of a config file field """
252*f81fb7c4SAndroid Build Coastguard Worker    ret = default
253*f81fb7c4SAndroid Build Coastguard Worker    config = ConfigParser.ConfigParser()
254*f81fb7c4SAndroid Build Coastguard Worker    config.read(configFile)
255*f81fb7c4SAndroid Build Coastguard Worker    if config.has_section(section):
256*f81fb7c4SAndroid Build Coastguard Worker        if config.has_option(section, option):
257*f81fb7c4SAndroid Build Coastguard Worker            ret = config.get(section, option)
258*f81fb7c4SAndroid Build Coastguard Worker    if retType =='int':
259*f81fb7c4SAndroid Build Coastguard Worker        try:
260*f81fb7c4SAndroid Build Coastguard Worker            ret = int(ret)
261*f81fb7c4SAndroid Build Coastguard Worker        except:
262*f81fb7c4SAndroid Build Coastguard Worker            ret = 0
263*f81fb7c4SAndroid Build Coastguard Worker    elif retType == 'float':
264*f81fb7c4SAndroid Build Coastguard Worker        try:
265*f81fb7c4SAndroid Build Coastguard Worker            ret = float(ret)
266*f81fb7c4SAndroid Build Coastguard Worker        except:
267*f81fb7c4SAndroid Build Coastguard Worker            ret = 0
268*f81fb7c4SAndroid Build Coastguard Worker    elif retType == 'bool':
269*f81fb7c4SAndroid Build Coastguard Worker        try:
270*f81fb7c4SAndroid Build Coastguard Worker            if ret[0].upper()=='T':
271*f81fb7c4SAndroid Build Coastguard Worker                ret = True
272*f81fb7c4SAndroid Build Coastguard Worker            else:
273*f81fb7c4SAndroid Build Coastguard Worker                ret = False
274*f81fb7c4SAndroid Build Coastguard Worker        except:
275*f81fb7c4SAndroid Build Coastguard Worker            ret = False
276*f81fb7c4SAndroid Build Coastguard Worker    elif retType == 'list':
277*f81fb7c4SAndroid Build Coastguard Worker        try:
278*f81fb7c4SAndroid Build Coastguard Worker            ret = eval(ret)
279*f81fb7c4SAndroid Build Coastguard Worker        except:
280*f81fb7c4SAndroid Build Coastguard Worker            ret = []
281*f81fb7c4SAndroid Build Coastguard Worker    return ret
282*f81fb7c4SAndroid Build Coastguard Worker
283*f81fb7c4SAndroid Build Coastguard Workerdef GetRecentJetFiles():
284*f81fb7c4SAndroid Build Coastguard Worker    """ Builds a list of recent jet files """
285*f81fb7c4SAndroid Build Coastguard Worker    fileList = []
286*f81fb7c4SAndroid Build Coastguard Worker    config = ConfigParser.ConfigParser()
287*f81fb7c4SAndroid Build Coastguard Worker    config.read(JetDefs.JETCREATOR_INI)
288*f81fb7c4SAndroid Build Coastguard Worker    if config.has_section(JetDefs.RECENT_SECTION):
289*f81fb7c4SAndroid Build Coastguard Worker        for count in range(0, 10):
290*f81fb7c4SAndroid Build Coastguard Worker            sFile = "File" + str(count)
291*f81fb7c4SAndroid Build Coastguard Worker            if config.has_option(JetDefs.RECENT_SECTION, sFile):
292*f81fb7c4SAndroid Build Coastguard Worker                sFileName = config.get(JetDefs.RECENT_SECTION, sFile)
293*f81fb7c4SAndroid Build Coastguard Worker                if FileExists(sFileName):
294*f81fb7c4SAndroid Build Coastguard Worker                    if sFileName != JetDefs.UNTITLED_FILE:
295*f81fb7c4SAndroid Build Coastguard Worker                        #fileList.append(FileRelativePath(config.get(JetDefs.RECENT_SECTION, sFile)))
296*f81fb7c4SAndroid Build Coastguard Worker                        fileList.append(config.get(JetDefs.RECENT_SECTION, sFile))
297*f81fb7c4SAndroid Build Coastguard Worker    return fileList
298*f81fb7c4SAndroid Build Coastguard Worker
299*f81fb7c4SAndroid Build Coastguard Workerdef AppendRecentJetFile(jetFile):
300*f81fb7c4SAndroid Build Coastguard Worker    """ Appends to a list of recent jet files """
301*f81fb7c4SAndroid Build Coastguard Worker    addedFiles = []
302*f81fb7c4SAndroid Build Coastguard Worker    fileList = GetRecentJetFiles()
303*f81fb7c4SAndroid Build Coastguard Worker    config = ConfigParser.ConfigParser()
304*f81fb7c4SAndroid Build Coastguard Worker    config.read(JetDefs.JETCREATOR_INI)
305*f81fb7c4SAndroid Build Coastguard Worker    if config.has_section(JetDefs.RECENT_SECTION):
306*f81fb7c4SAndroid Build Coastguard Worker        config.remove_section(JetDefs.RECENT_SECTION)
307*f81fb7c4SAndroid Build Coastguard Worker    config.add_section(JetDefs.RECENT_SECTION)
308*f81fb7c4SAndroid Build Coastguard Worker    config.set(JetDefs.RECENT_SECTION, "File0", jetFile)
309*f81fb7c4SAndroid Build Coastguard Worker    addedFiles.append(jetFile)
310*f81fb7c4SAndroid Build Coastguard Worker    count = 1
311*f81fb7c4SAndroid Build Coastguard Worker    for file in fileList:
312*f81fb7c4SAndroid Build Coastguard Worker        if file not in addedFiles:
313*f81fb7c4SAndroid Build Coastguard Worker            sFile = "File" + str(count)
314*f81fb7c4SAndroid Build Coastguard Worker            config.set(JetDefs.RECENT_SECTION, sFile, file)
315*f81fb7c4SAndroid Build Coastguard Worker            addedFiles.append(file)
316*f81fb7c4SAndroid Build Coastguard Worker            count += 1
317*f81fb7c4SAndroid Build Coastguard Worker    FileKillClean(JetDefs.JETCREATOR_INI)
318*f81fb7c4SAndroid Build Coastguard Worker    cfgfile = open(JetDefs.JETCREATOR_INI,'w')
319*f81fb7c4SAndroid Build Coastguard Worker    config.write(cfgfile)
320*f81fb7c4SAndroid Build Coastguard Worker    cfgfile.close()
321*f81fb7c4SAndroid Build Coastguard Worker
322*f81fb7c4SAndroid Build Coastguard Workerdef CompareMbt(mbt1, mbt2):
323*f81fb7c4SAndroid Build Coastguard Worker    """ Compates to measure/beat/tick values """
324*f81fb7c4SAndroid Build Coastguard Worker    try:
325*f81fb7c4SAndroid Build Coastguard Worker        m1, b1, t1 = mbt1.split(':',3)
326*f81fb7c4SAndroid Build Coastguard Worker        m2, b2, t2 = mbt2.split(':',3)
327*f81fb7c4SAndroid Build Coastguard Worker        if int(m1) > int(m2):
328*f81fb7c4SAndroid Build Coastguard Worker            return False
329*f81fb7c4SAndroid Build Coastguard Worker        elif int(m1) == int(m2) and int(b1) > int(b2):
330*f81fb7c4SAndroid Build Coastguard Worker            return False
331*f81fb7c4SAndroid Build Coastguard Worker        elif int(b1) == int(b2) and int(t1) > int(t2):
332*f81fb7c4SAndroid Build Coastguard Worker            return False
333*f81fb7c4SAndroid Build Coastguard Worker        elif int(m1) == int(m2) and int(b1) == int(b2) and int(t1) == int(t2):
334*f81fb7c4SAndroid Build Coastguard Worker            return False
335*f81fb7c4SAndroid Build Coastguard Worker        else:
336*f81fb7c4SAndroid Build Coastguard Worker            return True
337*f81fb7c4SAndroid Build Coastguard Worker    except:
338*f81fb7c4SAndroid Build Coastguard Worker        return False
339*f81fb7c4SAndroid Build Coastguard Worker
340*f81fb7c4SAndroid Build Coastguard Workerdef MbtVal(mbt):
341*f81fb7c4SAndroid Build Coastguard Worker    """ Converts mbts to ticks """
342*f81fb7c4SAndroid Build Coastguard Worker    if type(mbt).__name__=='str' or type(mbt).__name__=='unicode':
343*f81fb7c4SAndroid Build Coastguard Worker        mbt1 = mbt
344*f81fb7c4SAndroid Build Coastguard Worker    else:
345*f81fb7c4SAndroid Build Coastguard Worker        mbt1 = "%d:%d:%d" % mbt
346*f81fb7c4SAndroid Build Coastguard Worker    try:
347*f81fb7c4SAndroid Build Coastguard Worker        return TimeBase().ConvertStrTimeToTicks(mbt1)
348*f81fb7c4SAndroid Build Coastguard Worker    except:
349*f81fb7c4SAndroid Build Coastguard Worker        return 0
350*f81fb7c4SAndroid Build Coastguard Worker
351*f81fb7c4SAndroid Build Coastguard Workerdef TicksToMbt(ticks):
352*f81fb7c4SAndroid Build Coastguard Worker    """ Converts ticks to mbts """
353*f81fb7c4SAndroid Build Coastguard Worker    return TimeBase().ConvertTicksToMBT(ticks)
354*f81fb7c4SAndroid Build Coastguard Worker
355*f81fb7c4SAndroid Build Coastguard Workerdef TicksToStrMbt(ticks):
356*f81fb7c4SAndroid Build Coastguard Worker    """ Converts ticks to mbts """
357*f81fb7c4SAndroid Build Coastguard Worker    return TimeBase().ConvertTicksToStr(ticks, '%02d:%02d:%02d')
358*f81fb7c4SAndroid Build Coastguard Worker
359*f81fb7c4SAndroid Build Coastguard Workerdef MbtDifference(mbt1, mbt2):
360*f81fb7c4SAndroid Build Coastguard Worker    """ Returns difference between mbt values """
361*f81fb7c4SAndroid Build Coastguard Worker    return TimeBase().MbtDifference(mbt1, mbt2)
362*f81fb7c4SAndroid Build Coastguard Worker
363*f81fb7c4SAndroid Build Coastguard Workerdef PlayMidiFile(midiFile, dlsFile=''):
364*f81fb7c4SAndroid Build Coastguard Worker    """ Plays a midi file """
365*f81fb7c4SAndroid Build Coastguard Worker    try:
366*f81fb7c4SAndroid Build Coastguard Worker        e = __import__('eas')
367*f81fb7c4SAndroid Build Coastguard Worker
368*f81fb7c4SAndroid Build Coastguard Worker        if midiFile == '':
369*f81fb7c4SAndroid Build Coastguard Worker            return
370*f81fb7c4SAndroid Build Coastguard Worker        eas = e.EAS()
371*f81fb7c4SAndroid Build Coastguard Worker        if dlsFile > '':
372*f81fb7c4SAndroid Build Coastguard Worker            eas.LoadDLSCollection(dlsFile)
373*f81fb7c4SAndroid Build Coastguard Worker        eas.StartWave()
374*f81fb7c4SAndroid Build Coastguard Worker        audio_file = eas.OpenFile(midiFile)
375*f81fb7c4SAndroid Build Coastguard Worker        audio_file.Prepare()
376*f81fb7c4SAndroid Build Coastguard Worker        audio_file.Play()
377*f81fb7c4SAndroid Build Coastguard Worker        audio_file.Close()
378*f81fb7c4SAndroid Build Coastguard Worker        eas.StopWave()
379*f81fb7c4SAndroid Build Coastguard Worker        eas.Shutdown()
380*f81fb7c4SAndroid Build Coastguard Worker    except:
381*f81fb7c4SAndroid Build Coastguard Worker        return
382*f81fb7c4SAndroid Build Coastguard Worker
383*f81fb7c4SAndroid Build Coastguard Workerdef SegmentOutputFile(segName, configFile):
384*f81fb7c4SAndroid Build Coastguard Worker    """ Computes a segment output file """
385*f81fb7c4SAndroid Build Coastguard Worker    configPath = FileJustPath(configFile) + "/"
386*f81fb7c4SAndroid Build Coastguard Worker    segOutput = configPath + "Seg_" + segName + ".mid"
387*f81fb7c4SAndroid Build Coastguard Worker    return segOutput
388*f81fb7c4SAndroid Build Coastguard Worker
389*f81fb7c4SAndroid Build Coastguard Workerdef ComputeMuteFlags(jet_file, segName):
390*f81fb7c4SAndroid Build Coastguard Worker    """ Computes mute flags """
391*f81fb7c4SAndroid Build Coastguard Worker    muteFlag = 0
392*f81fb7c4SAndroid Build Coastguard Worker    for jet_event in jet_file.GetEvents(segName):
393*f81fb7c4SAndroid Build Coastguard Worker        muteFlag = SetMute(jet_event.track_num, muteFlag)
394*f81fb7c4SAndroid Build Coastguard Worker    return muteFlag
395*f81fb7c4SAndroid Build Coastguard Worker
396*f81fb7c4SAndroid Build Coastguard Workerdef ComputeMuteFlagsFromList1(list):
397*f81fb7c4SAndroid Build Coastguard Worker    """ Computes mute flags from a list """
398*f81fb7c4SAndroid Build Coastguard Worker    muteFlag = 0
399*f81fb7c4SAndroid Build Coastguard Worker    num = list.GetItemCount()
400*f81fb7c4SAndroid Build Coastguard Worker    for iRow in range(num):
401*f81fb7c4SAndroid Build Coastguard Worker        track_num = list.GetTrackNumber(iRow)
402*f81fb7c4SAndroid Build Coastguard Worker        if list.IsChecked(iRow):
403*f81fb7c4SAndroid Build Coastguard Worker            muteFlag = SetMute(track_num, muteFlag)
404*f81fb7c4SAndroid Build Coastguard Worker        else:
405*f81fb7c4SAndroid Build Coastguard Worker            muteFlag = ClearMute(track_num, muteFlag)
406*f81fb7c4SAndroid Build Coastguard Worker    return muteFlag
407*f81fb7c4SAndroid Build Coastguard Worker
408*f81fb7c4SAndroid Build Coastguard Workerdef ComputeMuteFlagsFromList(list):
409*f81fb7c4SAndroid Build Coastguard Worker    """ Computes mute flags from a list """
410*f81fb7c4SAndroid Build Coastguard Worker    muteFlags = 0
411*f81fb7c4SAndroid Build Coastguard Worker    num = list.GetItemCount()
412*f81fb7c4SAndroid Build Coastguard Worker    for iRow in range(num):
413*f81fb7c4SAndroid Build Coastguard Worker        track_num = list.GetTrackNumber(iRow)
414*f81fb7c4SAndroid Build Coastguard Worker        if list.IsChecked(iRow):
415*f81fb7c4SAndroid Build Coastguard Worker            muteFlags = SetMute(track_num, muteFlags)
416*f81fb7c4SAndroid Build Coastguard Worker    return muteFlags
417*f81fb7c4SAndroid Build Coastguard Worker
418*f81fb7c4SAndroid Build Coastguard Worker
419*f81fb7c4SAndroid Build Coastguard Workerdef SetMuteFlag(track, muteFlag, mute):
420*f81fb7c4SAndroid Build Coastguard Worker    """ Sets a mute flag """
421*f81fb7c4SAndroid Build Coastguard Worker    if mute:
422*f81fb7c4SAndroid Build Coastguard Worker        SetMute(track, muteFlag)
423*f81fb7c4SAndroid Build Coastguard Worker    else:
424*f81fb7c4SAndroid Build Coastguard Worker        ClearMute(track, muteFlag)
425*f81fb7c4SAndroid Build Coastguard Worker
426*f81fb7c4SAndroid Build Coastguard Workerdef SetMute(track, muteFlag):
427*f81fb7c4SAndroid Build Coastguard Worker    """ Sets a mute flag """
428*f81fb7c4SAndroid Build Coastguard Worker    try:
429*f81fb7c4SAndroid Build Coastguard Worker        muteFlag |= 1 << (track)
430*f81fb7c4SAndroid Build Coastguard Worker        return muteFlag
431*f81fb7c4SAndroid Build Coastguard Worker    except:
432*f81fb7c4SAndroid Build Coastguard Worker        #bad argument
433*f81fb7c4SAndroid Build Coastguard Worker        return muteFlag
434*f81fb7c4SAndroid Build Coastguard Worker
435*f81fb7c4SAndroid Build Coastguard Workerdef ClearMute(track, muteFlag):
436*f81fb7c4SAndroid Build Coastguard Worker    """ Clears a mute flag """
437*f81fb7c4SAndroid Build Coastguard Worker    try:
438*f81fb7c4SAndroid Build Coastguard Worker        muteFlag &= ~(1 << (track))
439*f81fb7c4SAndroid Build Coastguard Worker        return muteFlag;
440*f81fb7c4SAndroid Build Coastguard Worker    except:
441*f81fb7c4SAndroid Build Coastguard Worker        #bad argument
442*f81fb7c4SAndroid Build Coastguard Worker        return muteFlag
443*f81fb7c4SAndroid Build Coastguard Worker
444*f81fb7c4SAndroid Build Coastguard Workerdef GetMute(track, muteFlag):
445*f81fb7c4SAndroid Build Coastguard Worker    """ Get a mute flag """
446*f81fb7c4SAndroid Build Coastguard Worker    try:
447*f81fb7c4SAndroid Build Coastguard Worker        if (muteFlag & ( 1 << (track))) == 0:
448*f81fb7c4SAndroid Build Coastguard Worker            return False
449*f81fb7c4SAndroid Build Coastguard Worker        else:
450*f81fb7c4SAndroid Build Coastguard Worker            return True
451*f81fb7c4SAndroid Build Coastguard Worker    except:
452*f81fb7c4SAndroid Build Coastguard Worker        #bad argument
453*f81fb7c4SAndroid Build Coastguard Worker        return False
454*f81fb7c4SAndroid Build Coastguard Worker
455*f81fb7c4SAndroid Build Coastguard Workerdef InfoMsg(msgTitle, msgText):
456*f81fb7c4SAndroid Build Coastguard Worker    """ Display a simple informational message """
457*f81fb7c4SAndroid Build Coastguard Worker    dlg = wx.MessageDialog(None,
458*f81fb7c4SAndroid Build Coastguard Worker                           message=msgText,
459*f81fb7c4SAndroid Build Coastguard Worker                           caption=msgTitle,
460*f81fb7c4SAndroid Build Coastguard Worker                           style=wx.OK|wx.ICON_INFORMATION
461*f81fb7c4SAndroid Build Coastguard Worker                           )
462*f81fb7c4SAndroid Build Coastguard Worker    dlg.ShowModal()
463*f81fb7c4SAndroid Build Coastguard Worker    dlg.Destroy()
464*f81fb7c4SAndroid Build Coastguard Worker
465*f81fb7c4SAndroid Build Coastguard Workerdef SendEvent (mycontrol, evt):
466*f81fb7c4SAndroid Build Coastguard Worker    """ Sends an event """
467*f81fb7c4SAndroid Build Coastguard Worker    cmd = wx.CommandEvent(evt)
468*f81fb7c4SAndroid Build Coastguard Worker    cmd.SetEventObject(mycontrol)
469*f81fb7c4SAndroid Build Coastguard Worker    cmd.SetId(mycontrol.GetId())
470*f81fb7c4SAndroid Build Coastguard Worker    mycontrol.GetEventHandler().ProcessEvent(cmd)
471*f81fb7c4SAndroid Build Coastguard Worker
472*f81fb7c4SAndroid Build Coastguard Workerdef GetJetHelpText(dlgName, fld):
473*f81fb7c4SAndroid Build Coastguard Worker    """ Gets the jet help text file """
474*f81fb7c4SAndroid Build Coastguard Worker    return IniGetValue(JetDefs.JETCREATOR_HLP, dlgName, fld)
475*f81fb7c4SAndroid Build Coastguard Worker
476*f81fb7c4SAndroid Build Coastguard Workerdef ExportJetArchive(fileName, jetConfigFile, jetFile):
477*f81fb7c4SAndroid Build Coastguard Worker    """ Exports all files into a zip archive file """
478*f81fb7c4SAndroid Build Coastguard Worker    z = __import__('zipfile')
479*f81fb7c4SAndroid Build Coastguard Worker    zip = z.ZipFile(fileName, 'w')
480*f81fb7c4SAndroid Build Coastguard Worker
481*f81fb7c4SAndroid Build Coastguard Worker    #zip the original .JET file
482*f81fb7c4SAndroid Build Coastguard Worker    if FileExists(jetFile.config.filename):
483*f81fb7c4SAndroid Build Coastguard Worker        zip.write(jetFile.config.filename, FileJustName(jetFile.config.filename))
484*f81fb7c4SAndroid Build Coastguard Worker
485*f81fb7c4SAndroid Build Coastguard Worker    #make copy of object so we can modify it
486*f81fb7c4SAndroid Build Coastguard Worker    jet_file = copy.deepcopy(jetFile)
487*f81fb7c4SAndroid Build Coastguard Worker
488*f81fb7c4SAndroid Build Coastguard Worker    #zip the files, without paths
489*f81fb7c4SAndroid Build Coastguard Worker    for segment in jet_file.GetSegments():
490*f81fb7c4SAndroid Build Coastguard Worker        if FileExists(segment.filename):
491*f81fb7c4SAndroid Build Coastguard Worker            if not FileJustName(segment.filename) in zip.namelist():
492*f81fb7c4SAndroid Build Coastguard Worker                zip.write(segment.filename, FileJustName(segment.filename))
493*f81fb7c4SAndroid Build Coastguard Worker        if FileExists(segment.output):
494*f81fb7c4SAndroid Build Coastguard Worker            if not FileJustName(segment.output) in zip.namelist():
495*f81fb7c4SAndroid Build Coastguard Worker                zip.write(segment.output, FileJustName(segment.output))
496*f81fb7c4SAndroid Build Coastguard Worker
497*f81fb7c4SAndroid Build Coastguard Worker    #zip the library files
498*f81fb7c4SAndroid Build Coastguard Worker    for library in jet_file.GetLibraries():
499*f81fb7c4SAndroid Build Coastguard Worker        if FileExists(library):
500*f81fb7c4SAndroid Build Coastguard Worker            if not FileJustName(library) in zip.namelist():
501*f81fb7c4SAndroid Build Coastguard Worker                zip.write(library, FileJustName(library))
502*f81fb7c4SAndroid Build Coastguard Worker
503*f81fb7c4SAndroid Build Coastguard Worker    #remove the paths on filenames
504*f81fb7c4SAndroid Build Coastguard Worker    for segment in jet_file.GetSegments():
505*f81fb7c4SAndroid Build Coastguard Worker        segment.filename = FileJustName(segment.filename)
506*f81fb7c4SAndroid Build Coastguard Worker        segment.dlsfile = FileJustName(segment.dlsfile)
507*f81fb7c4SAndroid Build Coastguard Worker        segment.output = FileJustName(segment.output)
508*f81fb7c4SAndroid Build Coastguard Worker
509*f81fb7c4SAndroid Build Coastguard Worker    #remove paths
510*f81fb7c4SAndroid Build Coastguard Worker    for index, library in enumerate(jet_file.libraries):
511*f81fb7c4SAndroid Build Coastguard Worker        jet_file.libraries[index] = FileJustName(library)
512*f81fb7c4SAndroid Build Coastguard Worker
513*f81fb7c4SAndroid Build Coastguard Worker    #create temporary .JTC file so we can modify paths to files
514*f81fb7c4SAndroid Build Coastguard Worker    tmpConfigFile = JetDefs.TEMP_JET_CONFIG_FILE
515*f81fb7c4SAndroid Build Coastguard Worker    FileKillClean(tmpConfigFile)
516*f81fb7c4SAndroid Build Coastguard Worker
517*f81fb7c4SAndroid Build Coastguard Worker    #save the file
518*f81fb7c4SAndroid Build Coastguard Worker    jet_file.SaveJetConfig(tmpConfigFile)
519*f81fb7c4SAndroid Build Coastguard Worker
520*f81fb7c4SAndroid Build Coastguard Worker    #zip it and rename it back to original name without path
521*f81fb7c4SAndroid Build Coastguard Worker    zip.write(tmpConfigFile, FileJustName(jetConfigFile))
522*f81fb7c4SAndroid Build Coastguard Worker
523*f81fb7c4SAndroid Build Coastguard Worker    #create a flag file so we know this is a jet archive
524*f81fb7c4SAndroid Build Coastguard Worker    zip.write(tmpConfigFile, "JetArchive")
525*f81fb7c4SAndroid Build Coastguard Worker
526*f81fb7c4SAndroid Build Coastguard Worker    zip.close()
527*f81fb7c4SAndroid Build Coastguard Worker
528*f81fb7c4SAndroid Build Coastguard Worker    FileKillClean(tmpConfigFile)
529*f81fb7c4SAndroid Build Coastguard Worker
530*f81fb7c4SAndroid Build Coastguard Workerdef ValidateConfig(test_jet_file):
531*f81fb7c4SAndroid Build Coastguard Worker    """ Validates the contents of a config file """
532*f81fb7c4SAndroid Build Coastguard Worker    dImp = __import__('JetDialogs')
533*f81fb7c4SAndroid Build Coastguard Worker    errors = []
534*f81fb7c4SAndroid Build Coastguard Worker    fatalError = False
535*f81fb7c4SAndroid Build Coastguard Worker    for segment in test_jet_file.segments:
536*f81fb7c4SAndroid Build Coastguard Worker        logging.debug(segment.filename)
537*f81fb7c4SAndroid Build Coastguard Worker        if segment.filename is not None and len(segment.filename) > 0 and not FileExists(segment.filename):
538*f81fb7c4SAndroid Build Coastguard Worker            errors.append(("Segment MIDI file not found", segment.filename))
539*f81fb7c4SAndroid Build Coastguard Worker            fatalError = True
540*f81fb7c4SAndroid Build Coastguard Worker        if segment.dlsfile is not None and len(segment.dlsfile) > 0 and not FileExists(segment.dlsfile):
541*f81fb7c4SAndroid Build Coastguard Worker            errors.append(("Segment DLS file not found; removing from config", segment.dlsfile))
542*f81fb7c4SAndroid Build Coastguard Worker            segment.dlsfile = ""
543*f81fb7c4SAndroid Build Coastguard Worker
544*f81fb7c4SAndroid Build Coastguard Worker    logging.debug(test_jet_file.config.filename)
545*f81fb7c4SAndroid Build Coastguard Worker
546*f81fb7c4SAndroid Build Coastguard Worker    if len(errors) == 0:
547*f81fb7c4SAndroid Build Coastguard Worker        return True
548*f81fb7c4SAndroid Build Coastguard Worker    else:
549*f81fb7c4SAndroid Build Coastguard Worker        dlg = dImp.JetErrors("Jet Definition File Errors")
550*f81fb7c4SAndroid Build Coastguard Worker        dlg.SetErrors(errors)
551*f81fb7c4SAndroid Build Coastguard Worker        result = dlg.ShowModal()
552*f81fb7c4SAndroid Build Coastguard Worker        dlg.Destroy()
553*f81fb7c4SAndroid Build Coastguard Worker        if fatalError:
554*f81fb7c4SAndroid Build Coastguard Worker            return False
555*f81fb7c4SAndroid Build Coastguard Worker        else:
556*f81fb7c4SAndroid Build Coastguard Worker            return True
557*f81fb7c4SAndroid Build Coastguard Worker
558*f81fb7c4SAndroid Build Coastguard Workerdef release_getLogger(name):
559*f81fb7c4SAndroid Build Coastguard Worker    """  passing original handler with debug() method replaced to empty function """
560*f81fb7c4SAndroid Build Coastguard Worker
561*f81fb7c4SAndroid Build Coastguard Worker    def dummy(*k, **kw):
562*f81fb7c4SAndroid Build Coastguard Worker        pass
563*f81fb7c4SAndroid Build Coastguard Worker
564*f81fb7c4SAndroid Build Coastguard Worker    global __orig_getLogger
565*f81fb7c4SAndroid Build Coastguard Worker    log = __orig_getLogger(name)
566*f81fb7c4SAndroid Build Coastguard Worker    setattr(log, 'debug', dummy)
567*f81fb7c4SAndroid Build Coastguard Worker    setattr(log, 'info', dummy)
568*f81fb7c4SAndroid Build Coastguard Worker    setattr(log, 'error', dummy)
569*f81fb7c4SAndroid Build Coastguard Worker    setattr(log, 'critical', dummy)
570*f81fb7c4SAndroid Build Coastguard Worker    return log
571*f81fb7c4SAndroid Build Coastguard Worker
572*f81fb7c4SAndroid Build Coastguard Workerdef install_release_loggers():
573*f81fb7c4SAndroid Build Coastguard Worker    """ Save original handler, installs newer one """
574*f81fb7c4SAndroid Build Coastguard Worker    global __orig_getLogger
575*f81fb7c4SAndroid Build Coastguard Worker    __orig_getLogger = logging.getLogger
576*f81fb7c4SAndroid Build Coastguard Worker    setattr(logging, 'getLogger', release_getLogger)
577*f81fb7c4SAndroid Build Coastguard Worker
578*f81fb7c4SAndroid Build Coastguard Workerdef restore_getLogger():
579*f81fb7c4SAndroid Build Coastguard Worker    """ Restores original handler """
580*f81fb7c4SAndroid Build Coastguard Worker    global __orig_getLogger
581*f81fb7c4SAndroid Build Coastguard Worker    if __orig_getLogger:
582*f81fb7c4SAndroid Build Coastguard Worker        setattr(logging, 'getLogger', __orig_getLogger)
583*f81fb7c4SAndroid Build Coastguard Worker
584*f81fb7c4SAndroid Build Coastguard Workerdef GetMidiFileLength(midiFile):
585*f81fb7c4SAndroid Build Coastguard Worker    """ Gets the length of a midi file via eas """
586*f81fb7c4SAndroid Build Coastguard Worker    e = __import__('eas')
587*f81fb7c4SAndroid Build Coastguard Worker
588*f81fb7c4SAndroid Build Coastguard Worker    if not FileExists(midiFile):
589*f81fb7c4SAndroid Build Coastguard Worker        return 0
590*f81fb7c4SAndroid Build Coastguard Worker
591*f81fb7c4SAndroid Build Coastguard Worker    eas = e.EAS()
592*f81fb7c4SAndroid Build Coastguard Worker    audio_file = eas.OpenFile(midiFile)
593*f81fb7c4SAndroid Build Coastguard Worker    audio_file.Prepare()
594*f81fb7c4SAndroid Build Coastguard Worker    midiLength = eas.audio_streams[0].ParseMetaData()
595*f81fb7c4SAndroid Build Coastguard Worker    audio_file.Close()
596*f81fb7c4SAndroid Build Coastguard Worker    eas.Shutdown()
597*f81fb7c4SAndroid Build Coastguard Worker    return midiLength
598*f81fb7c4SAndroid Build Coastguard Worker
599*f81fb7c4SAndroid Build Coastguard Workerdef GetMidiInfo(midiFile):
600*f81fb7c4SAndroid Build Coastguard Worker    """ Gets midi file info """
601*f81fb7c4SAndroid Build Coastguard Worker    m = __import__('midifile')
602*f81fb7c4SAndroid Build Coastguard Worker    md = m.GetMidiInfo(midiFile)
603*f81fb7c4SAndroid Build Coastguard Worker    return md
604*f81fb7c4SAndroid Build Coastguard Worker
605*f81fb7c4SAndroid Build Coastguard Workerdef PrintMidiInfo(midiFile):
606*f81fb7c4SAndroid Build Coastguard Worker    """ Prints info about a midi file """
607*f81fb7c4SAndroid Build Coastguard Worker    mi = GetMidiInfo(midiFile)
608*f81fb7c4SAndroid Build Coastguard Worker    if mi.err == 0:
609*f81fb7c4SAndroid Build Coastguard Worker        print("ppqn: " + str(mi.ppqn))
610*f81fb7c4SAndroid Build Coastguard Worker        print("beats_per_measure: " + str(mi.beats_per_measure))
611*f81fb7c4SAndroid Build Coastguard Worker        print("ending mbt: " + str(mi.endMbt))
612*f81fb7c4SAndroid Build Coastguard Worker        print("ending mbt str: " + mi.endMbtStr)
613*f81fb7c4SAndroid Build Coastguard Worker        print("maxMeasures: " + str(mi.maxMeasures))
614*f81fb7c4SAndroid Build Coastguard Worker        print("maxBeats: " + str(mi.maxBeats))
615*f81fb7c4SAndroid Build Coastguard Worker        print("maxTicks: " + str(mi.maxTicks))
616*f81fb7c4SAndroid Build Coastguard Worker        print("maxTracks: " + str(mi.maxTracks))
617*f81fb7c4SAndroid Build Coastguard Worker        print("totalTicks: " + str(mi.totalTicks))
618*f81fb7c4SAndroid Build Coastguard Worker        for track in mi.trackList:
619*f81fb7c4SAndroid Build Coastguard Worker            print(track)
620*f81fb7c4SAndroid Build Coastguard Worker    else:
621*f81fb7c4SAndroid Build Coastguard Worker        print("Error opening")
622*f81fb7c4SAndroid Build Coastguard Worker
623*f81fb7c4SAndroid Build Coastguard Workerdef MidiSegInfo(segment):
624*f81fb7c4SAndroid Build Coastguard Worker    """ Midi file info saved in config file for speed """
625*f81fb7c4SAndroid Build Coastguard Worker    class segInfo:
626*f81fb7c4SAndroid Build Coastguard Worker        iMsPerTick = 0
627*f81fb7c4SAndroid Build Coastguard Worker        bpm = 4
628*f81fb7c4SAndroid Build Coastguard Worker        ppqn = 480
629*f81fb7c4SAndroid Build Coastguard Worker        total_ticks = 0
630*f81fb7c4SAndroid Build Coastguard Worker        iLengthInMs = 0
631*f81fb7c4SAndroid Build Coastguard Worker        iTracks = 0
632*f81fb7c4SAndroid Build Coastguard Worker        trackList = []
633*f81fb7c4SAndroid Build Coastguard Worker
634*f81fb7c4SAndroid Build Coastguard Worker    ver = "1.5"
635*f81fb7c4SAndroid Build Coastguard Worker    ret = segInfo()
636*f81fb7c4SAndroid Build Coastguard Worker    savedVer = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Ver")
637*f81fb7c4SAndroid Build Coastguard Worker    savedDateTime = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "DateTime")
638*f81fb7c4SAndroid Build Coastguard Worker    dateTime = FileDateTime(segment.filename)
639*f81fb7c4SAndroid Build Coastguard Worker    if ver != savedVer or dateTime != savedDateTime:
640*f81fb7c4SAndroid Build Coastguard Worker        mi = GetMidiInfo(segment.filename)
641*f81fb7c4SAndroid Build Coastguard Worker        if mi.err == 0:
642*f81fb7c4SAndroid Build Coastguard Worker            IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Ver", ver)
643*f81fb7c4SAndroid Build Coastguard Worker            IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "DateTime", str(dateTime))
644*f81fb7c4SAndroid Build Coastguard Worker            IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "PPQN", str(mi.ppqn))
645*f81fb7c4SAndroid Build Coastguard Worker            IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "BPM", str(mi.beats_per_measure))
646*f81fb7c4SAndroid Build Coastguard Worker            IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "totalTicks", str(mi.totalTicks))
647*f81fb7c4SAndroid Build Coastguard Worker            IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "maxTracks", str(mi.maxTracks))
648*f81fb7c4SAndroid Build Coastguard Worker            iLengthInMs = GetMidiFileLength(segment.filename) * 1000
649*f81fb7c4SAndroid Build Coastguard Worker            IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "LengthInMs", str(iLengthInMs))
650*f81fb7c4SAndroid Build Coastguard Worker            if iLengthInMs > 0:
651*f81fb7c4SAndroid Build Coastguard Worker                IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "MsPerTick", str(iLengthInMs / mi.totalTicks))
652*f81fb7c4SAndroid Build Coastguard Worker            #have to write out the tracklist in format that can be saved in INI file
653*f81fb7c4SAndroid Build Coastguard Worker            tl = []
654*f81fb7c4SAndroid Build Coastguard Worker            for track in mi.trackList:
655*f81fb7c4SAndroid Build Coastguard Worker                tl.append((track.track, track.channel, track.name))
656*f81fb7c4SAndroid Build Coastguard Worker            IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Tracks", tl)
657*f81fb7c4SAndroid Build Coastguard Worker
658*f81fb7c4SAndroid Build Coastguard Worker    trackList = []
659*f81fb7c4SAndroid Build Coastguard Worker    tl = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Tracks", 'list', [])
660*f81fb7c4SAndroid Build Coastguard Worker    for t in tl:
661*f81fb7c4SAndroid Build Coastguard Worker        trackList.append(trackGrid(t[0], t[1], t[2],False))
662*f81fb7c4SAndroid Build Coastguard Worker    iTracks = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "maxTracks", 'int', 0)
663*f81fb7c4SAndroid Build Coastguard Worker    iMsPerTick = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "MsPerTick", 'float', 0)
664*f81fb7c4SAndroid Build Coastguard Worker    bpm = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "BPM", 'int', 0)
665*f81fb7c4SAndroid Build Coastguard Worker    ppqn = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "PPQN", 'int', 480)
666*f81fb7c4SAndroid Build Coastguard Worker    if iMsPerTick == 0 or bpm == 0 or ppqn == 0:
667*f81fb7c4SAndroid Build Coastguard Worker        return ret
668*f81fb7c4SAndroid Build Coastguard Worker    tb = TimeBase(ppqn, bpm)
669*f81fb7c4SAndroid Build Coastguard Worker    total_ticks = tb.ConvertStrTimeToTicks(segment.length)
670*f81fb7c4SAndroid Build Coastguard Worker    if total_ticks == 0:
671*f81fb7c4SAndroid Build Coastguard Worker        total_ticks = tb.MbtDifference(tb.ConvertStrTimeToTuple(segment.start), tb.ConvertStrTimeToTuple(segment.end))
672*f81fb7c4SAndroid Build Coastguard Worker    if total_ticks == 0:
673*f81fb7c4SAndroid Build Coastguard Worker        return ret
674*f81fb7c4SAndroid Build Coastguard Worker
675*f81fb7c4SAndroid Build Coastguard Worker    ret.iTracks = iTracks
676*f81fb7c4SAndroid Build Coastguard Worker    ret.iMsPerTick = iMsPerTick
677*f81fb7c4SAndroid Build Coastguard Worker    ret.bpm = bpm
678*f81fb7c4SAndroid Build Coastguard Worker    ret.ppqn = ppqn
679*f81fb7c4SAndroid Build Coastguard Worker    ret.total_ticks = total_ticks
680*f81fb7c4SAndroid Build Coastguard Worker    ret.iLengthInMs = total_ticks * iMsPerTick
681*f81fb7c4SAndroid Build Coastguard Worker    ret.trackList = trackList
682*f81fb7c4SAndroid Build Coastguard Worker    return ret
683*f81fb7c4SAndroid Build Coastguard Worker
684*f81fb7c4SAndroid Build Coastguard Workerdef TimeStr(ms):
685*f81fb7c4SAndroid Build Coastguard Worker    """ Returns a time string """
686*f81fb7c4SAndroid Build Coastguard Worker    s=ms/1000
687*f81fb7c4SAndroid Build Coastguard Worker    m,s=divmod(s,60)
688*f81fb7c4SAndroid Build Coastguard Worker    h,m=divmod(m,60)
689*f81fb7c4SAndroid Build Coastguard Worker    d,h=divmod(h,24)
690*f81fb7c4SAndroid Build Coastguard Worker    if m > 0:
691*f81fb7c4SAndroid Build Coastguard Worker        return "%d Min %d Sec" % (m,s)
692*f81fb7c4SAndroid Build Coastguard Worker    else:
693*f81fb7c4SAndroid Build Coastguard Worker        return "%d Seconds" % (s)
694*f81fb7c4SAndroid Build Coastguard Worker
695*f81fb7c4SAndroid Build Coastguard Workerdef mbtFct(mbt, mod):
696*f81fb7c4SAndroid Build Coastguard Worker    """ Converts times """
697*f81fb7c4SAndroid Build Coastguard Worker    if type(mbt).__name__=='str' or type(mbt).__name__=='unicode':
698*f81fb7c4SAndroid Build Coastguard Worker        mbt = ConvertStrTimeToTuple(mbt)
699*f81fb7c4SAndroid Build Coastguard Worker        retType = 'str'
700*f81fb7c4SAndroid Build Coastguard Worker    else:
701*f81fb7c4SAndroid Build Coastguard Worker        retType = 'int'
702*f81fb7c4SAndroid Build Coastguard Worker
703*f81fb7c4SAndroid Build Coastguard Worker    m = mbt[0]+mod
704*f81fb7c4SAndroid Build Coastguard Worker    b = mbt[1]+mod
705*f81fb7c4SAndroid Build Coastguard Worker    t = mbt[2]
706*f81fb7c4SAndroid Build Coastguard Worker    if m < 0:
707*f81fb7c4SAndroid Build Coastguard Worker        m = 0
708*f81fb7c4SAndroid Build Coastguard Worker    if b < 0:
709*f81fb7c4SAndroid Build Coastguard Worker        b = 0
710*f81fb7c4SAndroid Build Coastguard Worker    if b > 4:
711*f81fb7c4SAndroid Build Coastguard Worker        b = 4
712*f81fb7c4SAndroid Build Coastguard Worker    if t < 0:
713*f81fb7c4SAndroid Build Coastguard Worker        t = 0
714*f81fb7c4SAndroid Build Coastguard Worker
715*f81fb7c4SAndroid Build Coastguard Worker    if retType == 'str':
716*f81fb7c4SAndroid Build Coastguard Worker        return "%d:%d:%d" % (m, b, t)
717*f81fb7c4SAndroid Build Coastguard Worker    else:
718*f81fb7c4SAndroid Build Coastguard Worker        return (m, b, t)
719*f81fb7c4SAndroid Build Coastguard Worker
720*f81fb7c4SAndroid Build Coastguard Workerdef OsWindows():
721*f81fb7c4SAndroid Build Coastguard Worker    """ Tells us whether windows or os x """
722*f81fb7c4SAndroid Build Coastguard Worker    if os.name == 'nt':
723*f81fb7c4SAndroid Build Coastguard Worker        return True ;
724*f81fb7c4SAndroid Build Coastguard Worker    else:
725*f81fb7c4SAndroid Build Coastguard Worker        return False ;
726*f81fb7c4SAndroid Build Coastguard Worker
727*f81fb7c4SAndroid Build Coastguard Workerdef MacOffset():
728*f81fb7c4SAndroid Build Coastguard Worker    """ Mac screen coordinates funky on some controls so we finagle a few pixels """
729*f81fb7c4SAndroid Build Coastguard Worker    if not OsWindows():
730*f81fb7c4SAndroid Build Coastguard Worker        return 3
731*f81fb7c4SAndroid Build Coastguard Worker    else:
732*f81fb7c4SAndroid Build Coastguard Worker        return 0
733*f81fb7c4SAndroid Build Coastguard Worker
734*f81fb7c4SAndroid Build Coastguard Workerdef SafeJetShutdown(lock, jet):
735*f81fb7c4SAndroid Build Coastguard Worker    """ Makes sure we do the jet shutdown properly """
736*f81fb7c4SAndroid Build Coastguard Worker    with lock:
737*f81fb7c4SAndroid Build Coastguard Worker        #MAKE SURE WE CLEANUP
738*f81fb7c4SAndroid Build Coastguard Worker        #try: jet.Clear_Queue()
739*f81fb7c4SAndroid Build Coastguard Worker        #except: pass
740*f81fb7c4SAndroid Build Coastguard Worker
741*f81fb7c4SAndroid Build Coastguard Worker        try: jet.eas.StopWave()
742*f81fb7c4SAndroid Build Coastguard Worker        except: pass
743*f81fb7c4SAndroid Build Coastguard Worker
744*f81fb7c4SAndroid Build Coastguard Worker        try: jet.Shutdown()
745*f81fb7c4SAndroid Build Coastguard Worker        except: pass
746*f81fb7c4SAndroid Build Coastguard Worker
747*f81fb7c4SAndroid Build Coastguard Worker        jet = None
748*f81fb7c4SAndroid Build Coastguard Worker
749*f81fb7c4SAndroid Build Coastguard Worker
750*f81fb7c4SAndroid Build Coastguard Workerdef CreateTempJetFile(org_jet_file):
751*f81fb7c4SAndroid Build Coastguard Worker    """ Creates temporary jet file for playback testing """
752*f81fb7c4SAndroid Build Coastguard Worker    dirname = JetDefs.TEMP_JET_DIR
753*f81fb7c4SAndroid Build Coastguard Worker    if not os.path.isdir(dirname):
754*f81fb7c4SAndroid Build Coastguard Worker        os.mkdir(dirname)
755*f81fb7c4SAndroid Build Coastguard Worker
756*f81fb7c4SAndroid Build Coastguard Worker    tmpConfigFile = dirname + FileJustName(org_jet_file.config_file)
757*f81fb7c4SAndroid Build Coastguard Worker    FileKillClean(tmpConfigFile)
758*f81fb7c4SAndroid Build Coastguard Worker
759*f81fb7c4SAndroid Build Coastguard Worker    jet_file = copy.deepcopy(org_jet_file)
760*f81fb7c4SAndroid Build Coastguard Worker
761*f81fb7c4SAndroid Build Coastguard Worker    for tmp in jet_file.segments:
762*f81fb7c4SAndroid Build Coastguard Worker        tmp.output = dirname + FileJustName(tmp.output)
763*f81fb7c4SAndroid Build Coastguard Worker
764*f81fb7c4SAndroid Build Coastguard Worker    jet_file.config_file = tmpConfigFile
765*f81fb7c4SAndroid Build Coastguard Worker    jet_file.config.filename = dirname + FileJustName(jet_file.config.filename)
766*f81fb7c4SAndroid Build Coastguard Worker    FileKillClean(jet_file.config.filename)
767*f81fb7c4SAndroid Build Coastguard Worker
768*f81fb7c4SAndroid Build Coastguard Worker    jet_file.SaveJetConfig(tmpConfigFile)
769*f81fb7c4SAndroid Build Coastguard Worker    jet_file.WriteJetFileFromConfig(tmpConfigFile)
770*f81fb7c4SAndroid Build Coastguard Worker
771*f81fb7c4SAndroid Build Coastguard Worker    return jet_file
772*f81fb7c4SAndroid Build Coastguard Worker
773*f81fb7c4SAndroid Build Coastguard Workerdef CleanupTempJetFile(jet_file):
774*f81fb7c4SAndroid Build Coastguard Worker    """ Cleans up temporary files """
775*f81fb7c4SAndroid Build Coastguard Worker    FileKillClean(jet_file.config.filename)
776*f81fb7c4SAndroid Build Coastguard Worker    FileKillClean(jet_file.config_file)
777*f81fb7c4SAndroid Build Coastguard Worker    for tmp in jet_file.segments:
778*f81fb7c4SAndroid Build Coastguard Worker        FileKillClean(tmp.output)
779*f81fb7c4SAndroid Build Coastguard Worker
780*f81fb7c4SAndroid Build Coastguard Workerdef GetNow():
781*f81fb7c4SAndroid Build Coastguard Worker    return time.asctime()
782*f81fb7c4SAndroid Build Coastguard Worker
783*f81fb7c4SAndroid Build Coastguard Worker
784*f81fb7c4SAndroid Build Coastguard Workerif __name__ == '__main__':
785*f81fb7c4SAndroid Build Coastguard Worker    """ Tests functions """
786*f81fb7c4SAndroid Build Coastguard Worker    pass
787*f81fb7c4SAndroid Build Coastguard Worker
788*f81fb7c4SAndroid Build Coastguard Worker