JetUtils.py revision 8872ef327bd0a801363edf1c6ce8df0b74e51c8d
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)""" 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) File: 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JetUtils.py 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Contents and purpose: 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Utilities used throughout JetCreator 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Copyright (c) 2008 Android Open Source Project 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Licensed under the Apache License, Version 2.0 (the "License"); 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) you may not use this file except in compliance with the License. 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) You may obtain a copy of the License at 13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) http://www.apache.org/licenses/LICENSE-2.0 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Unless required by applicable law or agreed to in writing, software 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) distributed under the License is distributed on an "AS IS" BASIS, 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) See the License for the specific language governing permissions and 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) limitations under the License. 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)""" 22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)from __future__ import with_statement 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import wx 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import os 27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)import copy 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochimport ConfigParser 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import logging 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import time 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import tempfile 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from JetDefs import * 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from JetDebug import * 3558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdochfrom midifile import TimeBase, trackGrid 3658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class JetCutCopy(object): 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """ Handles cut/copy/pasting of events and segments """ 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__ (self, objType, objSave, currentSegmentName): 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.objType = objType 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.objSave = copy.deepcopy(objSave) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.currentSegmentName = currentSegmentName 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def GetObj(self, objList): 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """ Gets an object """ 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) objSave = copy.deepcopy(self.objSave) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if self.objType == JetDefs.MAIN_SEGLIST: 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) oldName = objSave.segname 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) i = len(oldName) - 1 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while i > 0: 5158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch if not oldName[i].isdigit(): 5258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch break 5358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch i = i - 1 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) oldName = oldName[0:i+1] 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) i = 1 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while True: 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newName = oldName + str(i) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if self.UniqueSegName(newName, objList): 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) break 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i = i + 1 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) objSave.segname = newName 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elif self.objType == JetDefs.MAIN_EVENTLIST: 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oldName = objSave.event_name 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i = len(oldName) - 1 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) while i > 0: 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if not oldName[i].isdigit(): 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) break 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) i = i - 1 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) oldName = oldName[0:i+1] 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) i = 1 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while True: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) newName = oldName + str(i) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if self.UniqueEventName(newName, objList): 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) break 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) i = i + 1 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) objSave.event_name = newName 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return objSave 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def UniqueSegName(self, nameVal, seglist): 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for nm in seglist: 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if nm.segname == nameVal: 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return False 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return True 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) def UniqueEventName(self, nameVal, eventlist): 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) for nm in eventlist: 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if nm.event_name == nameVal: 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return False 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return True 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class JetState(object): 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """ Saves the state for cut/copy/paste """ 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__ (self, jet_file, currentSegmentIndex, currentEventIndex): 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.jet_file = copy.deepcopy(jet_file) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.currentSegmentIndex = currentSegmentIndex 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.currentEventIndex = currentEventIndex 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def Queue (jet, queueSeg): 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ Queues a segment """ 101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) jet.QueueSegment(queueSeg.userID, queueSeg.seg_num, queueSeg.dls_num, queueSeg.repeat, queueSeg.transpose, queueSeg.mute_flags) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class QueueSeg(object): 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ Object representing a segment """ 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def __init__ (self, name, userID, seg_num, dls_num=-1, repeat=0, transpose=0, mute_flags=0, status=''): 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.name = name 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.userID = userID 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.seg_num = seg_num 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.dls_num = dls_num 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.repeat = repeat 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.transpose = transpose 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.mute_flags = mute_flags 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.status = status 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) #DumpQueueSeg(self) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def FindDlsNum(libraries, dlsfile): 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ Looks for a dls file in the library list """ 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for index, library in enumerate(libraries): 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if library == dlsfile: 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return index 121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return -1 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def SetRowSelection(list, row, state): 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ Sets the selection status of a list row """ 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if state: 126a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) list.SetItemState(row, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) 127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) else: 128a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) list.SetItemState(row, ~wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 130a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)def ClearRowSelections(list): 131a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ Clears the list rows selection status """ 132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) index = list.GetFirstSelected() 133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) while index != -1: 134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SetRowSelection(list, index, False) 135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) index = list.GetNextSelected(index) 136a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 137a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)def getColumnText(list, index, col): 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ Sets the text of a column """ 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) item = list.GetItem(index, col) 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return item.GetText() 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def getColumnValue(list, index, col): 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ Gets the text of a column """ 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) item = list.GetItem(index, col) 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) v = str(item.GetText()) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if len(v) > 0: 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return int(item.GetText()) 148a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch else: 149a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return 0 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def StrNoneChk(fld): 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) """ Returns a blank string if none """ 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if fld is None: 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return "" 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return str(fld) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def ConvertStrTimeToTuple(s): 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ Converts a string time to a tuple """ 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) try: 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) measures, beats, ticks = s.split(':',3) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return (int(measures), int(beats), int(ticks)) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) except: 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return JetDefs.MBT_DEFAULT 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def FileRelativePath(target, base=os.curdir): 166b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) """ Returns relative file path """ 167b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if not os.path.exists(target): 168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return target 169b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 170b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if not os.path.isdir(base): 171b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return target 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_list = (os.path.abspath(base)).split(os.sep) 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) target_list = (os.path.abspath(target)).split(os.sep) 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if os.name in ['nt','dos','os2'] and base_list[0] <> target_list[0]: 1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return target 177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) for i in range(min(len(base_list), len(target_list))): 178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if base_list[i] <> target_list[i]: break 179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) else: 180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) i+=1 181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:] 182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return os.path.join(*rel_list) 183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef FileFixPath(fileSpec): 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ Tweaks slashes """ 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return fileSpec.replace("\\", "/") 187b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 188b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)def FileKillClean(fileName): 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ Deletes a file skipping errors """ 190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) try: 191b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) os.remove(fileName) 192b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) except: 193b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) pass 194b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)def FileJustRoot(fileName): 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ Gets just the root of the file name """ 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return os.path.splitext(fileName)[0] 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) except: 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "" 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FileJustName(fileName): 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ Gets just the filename, without the path """ 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try: 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return os.path.split(fileName)[1] 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) except: 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "" 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def FileJustPath(fileName): 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ Gets just the path, without the file name """ 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return os.path.split(fileName)[0] 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except: 2140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return "" 2150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)def FileJustExt(fileName): 2170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) """ Gets just the extension of the file """ 2180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) try: 2190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ext = os.path.splitext(fileName)[1] 2200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return ext.upper() 2210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) except: 2220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return "" 2230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)def FileDateTime(fileName): 2250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) """ Gets the date/time of a file """ 2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch try: 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filetime = time.ctime(os.path.getmtime(fileName)) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return filetime 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) except: 2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return "" 2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef FileExists(fileName): 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """ Checks if a file exists """ 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return os.path.exists(fileName) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except: 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return False 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def IniSetValue(configFile, section, option, value): 2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """ Sets the value of a config file field """ 2417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch config = ConfigParser.ConfigParser() 2427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch config.read(configFile) 2437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if not config.has_section(section): 2447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch config.add_section(section) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config.set(section, option, value) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cfgfile = open(configFile,'w') 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config.write(cfgfile) 2487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cfgfile.close() 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def IniGetValue(configFile, section, option, retType='str', default=''): 2517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """ Gets the value of a config file field """ 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ret = default 2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch config = ConfigParser.ConfigParser() 2547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch config.read(configFile) 2557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if config.has_section(section): 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if config.has_option(section, option): 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = config.get(section, option) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if retType =='int': 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try: 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = int(ret) 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) except: 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ret = 0 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) elif retType == 'float': 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try: 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ret = float(ret) 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) except: 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ret = 0 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) elif retType == 'bool': 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try: 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if ret[0].upper()=='T': 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ret = True 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else: 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ret = False 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) except: 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ret = False 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) elif retType == 'list': 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try: 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ret = eval(ret) 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) except: 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ret = [] 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ret 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def GetRecentJetFiles(): 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """ Builds a list of recent jet files """ 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) fileList = [] 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) config = ConfigParser.ConfigParser() 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) config.read(JetDefs.JETCREATOR_INI) 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if config.has_section(JetDefs.RECENT_SECTION): 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for count in range(0, 10): 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sFile = "File" + str(count) 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if config.has_option(JetDefs.RECENT_SECTION, sFile): 2927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch sFileName = config.get(JetDefs.RECENT_SECTION, sFile) 293868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if FileExists(sFileName): 294868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if sFileName != JetDefs.UNTITLED_FILE: 295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) #fileList.append(FileRelativePath(config.get(JetDefs.RECENT_SECTION, sFile))) 2967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fileList.append(config.get(JetDefs.RECENT_SECTION, sFile)) 2977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return fileList 2987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef AppendRecentJetFile(jetFile): 3007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) """ Appends to a list of recent jet files """ 3017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) addedFiles = [] 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) fileList = GetRecentJetFiles() 303424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) config = ConfigParser.ConfigParser() 304424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) config.read(JetDefs.JETCREATOR_INI) 305424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if config.has_section(JetDefs.RECENT_SECTION): 306424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) config.remove_section(JetDefs.RECENT_SECTION) 307424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) config.add_section(JetDefs.RECENT_SECTION) 308424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) config.set(JetDefs.RECENT_SECTION, "File0", jetFile) 309424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) addedFiles.append(jetFile) 310424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) count = 1 311424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) for file in fileList: 312424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if file not in addedFiles: 313424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) sFile = "File" + str(count) 3147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch config.set(JetDefs.RECENT_SECTION, sFile, file) 3157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) addedFiles.append(file) 3167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) count += 1 3177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FileKillClean(JetDefs.JETCREATOR_INI) 3187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cfgfile = open(JetDefs.JETCREATOR_INI,'w') 3197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch config.write(cfgfile) 3207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cfgfile.close() 3217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)def CompareMbt(mbt1, mbt2): 3237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) """ Compates to measure/beat/tick values """ 3247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) try: 325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) m1, b1, t1 = mbt1.split(':',3) 326868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) m2, b2, t2 = mbt2.split(':',3) 327868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if int(m1) > int(m2): 328868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return False 329868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) elif int(m1) == int(m2) and int(b1) > int(b2): 330868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return False 331868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) elif int(b1) == int(b2) and int(t1) > int(t2): 332868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return False 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elif int(m1) == int(m2) and int(b1) == int(b2) and int(t1) == int(t2): 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return True 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except: 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return False 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def MbtVal(mbt): 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ Converts mbts to ticks """ 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if type(mbt).__name__=='str' or type(mbt).__name__=='unicode': 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mbt1 = mbt 344a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) else: 345a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) mbt1 = "%d:%d:%d" % mbt 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try: 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return TimeBase().ConvertStrTimeToTicks(mbt1) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except: 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)def TicksToMbt(ticks): 3520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) """ Converts ticks to mbts """ 3530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return TimeBase().ConvertTicksToMBT(ticks) 3540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def TicksToStrMbt(ticks): 3567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) """ Converts ticks to mbts """ 3577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return TimeBase().ConvertTicksToStr(ticks, '%02d:%02d:%02d') 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 359424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)def MbtDifference(mbt1, mbt2): 360424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) """ Returns difference between mbt values """ 361424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return TimeBase().MbtDifference(mbt1, mbt2) 3627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef PlayMidiFile(midiFile, dlsFile=''): 3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) """ Plays a midi file """ 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 366a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) e = __import__('eas') 367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 368a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if midiFile == '': 369a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eas = e.EAS() 3717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if dlsFile > '': 3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) eas.LoadDLSCollection(dlsFile) 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eas.StartWave() 3747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch audio_file = eas.OpenFile(midiFile) 3757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch audio_file.Prepare() 3767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch audio_file.Play() 3777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch audio_file.Close() 3787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch eas.StopWave() 3797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch eas.Shutdown() 3807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch except: 3817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def SegmentOutputFile(segName, configFile): 3847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) """ Computes a segment output file """ 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) configPath = FileJustPath(configFile) + "/" 3867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch segOutput = configPath + "Seg_" + segName + ".mid" 3877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return segOutput 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 389424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)def ComputeMuteFlags(jet_file, segName): 390424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) """ Computes mute flags """ 391424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) muteFlag = 0 392424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) for jet_event in jet_file.GetEvents(segName): 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) muteFlag = SetMute(jet_event.track_num, muteFlag) 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return muteFlag 3957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)def ComputeMuteFlagsFromList1(list): 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """ Computes mute flags from a list """ 3987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch muteFlag = 0 3997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch num = list.GetItemCount() 4007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for iRow in range(num): 4017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch track_num = list.GetTrackNumber(iRow) 4027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if list.IsChecked(iRow): 4037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch muteFlag = SetMute(track_num, muteFlag) 4047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch else: 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) muteFlag = ClearMute(track_num, muteFlag) 4067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return muteFlag 4077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def ComputeMuteFlagsFromList(list): 4097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """ Computes mute flags from a list """ 4107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch muteFlags = 0 411eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch num = list.GetItemCount() 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for iRow in range(num): 413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) track_num = list.GetTrackNumber(iRow) 414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if list.IsChecked(iRow): 415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) muteFlags = SetMute(track_num, muteFlags) 416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return muteFlags 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def SetMuteFlag(track, muteFlag, mute): 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ Sets a mute flag """ 4217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if mute: 4227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) SetMute(track, muteFlag) 4237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) else: 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearMute(track, muteFlag) 425ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 426ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochdef SetMute(track, muteFlag): 427ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch """ Sets a mute flag """ 428eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch try: 429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch muteFlag |= 1 << (track) 430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return muteFlag 431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch except: 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) #bad argument 4337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return muteFlag 4347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def ClearMute(track, muteFlag): 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """ Clears a mute flag """ 4377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) try: 4387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) muteFlag &= ~(1 << (track)) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return muteFlag; 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) except: 4417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) #bad argument 4427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return muteFlag 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def GetMute(track, muteFlag): 4457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) """ Get a mute flag """ 4467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) try: 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (muteFlag & ( 1 << (track))) == 0: 448424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return False 449424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) else: 450424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return True 451424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) except: 4527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch #bad argument 4537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return False 4547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def InfoMsg(msgTitle, msgText): 4567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """ Display a simple informational message """ 4577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch dlg = wx.MessageDialog(None, 4587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch message=msgText, 4597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch caption=msgTitle, 4607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch style=wx.OK|wx.ICON_INFORMATION 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ) 4627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch dlg.ShowModal() 463f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dlg.Destroy() 4647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 46558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)def SendEvent (mycontrol, evt): 4667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """ Sends an event """ 467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cmd = wx.CommandEvent(evt) 4687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cmd.SetEventObject(mycontrol) 4697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch cmd.SetId(mycontrol.GetId()) 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mycontrol.GetEventHandler().ProcessEvent(cmd) 4717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)def GetJetHelpText(dlgName, fld): 473a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ Gets the jet help text file """ 474a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return IniGetValue(JetDefs.JETCREATOR_HLP, dlgName, fld) 475a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def ExportJetArchive(fileName, jetConfigFile, jetFile): 4775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) """ Exports all files into a zip archive file """ 4780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) z = __import__('zipfile') 4790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) zip = z.ZipFile(fileName, 'w') 4800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 4810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) #zip the original .JET file 4820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if FileExists(jetFile.config.filename): 4830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) zip.write(jetFile.config.filename, FileJustName(jetFile.config.filename)) 4840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 485f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) #make copy of object so we can modify it 4867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jet_file = copy.deepcopy(jetFile) 4877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) #zip the files, without paths 4897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for segment in jet_file.GetSegments(): 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if FileExists(segment.filename): 4917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if not FileJustName(segment.filename) in zip.namelist(): 4927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch zip.write(segment.filename, FileJustName(segment.filename)) 4937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if FileExists(segment.output): 4947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if not FileJustName(segment.output) in zip.namelist(): 495f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) zip.write(segment.output, FileJustName(segment.output)) 4967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch #zip the library files 498868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for library in jet_file.GetLibraries(): 4997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if FileExists(library): 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if not FileJustName(library) in zip.namelist(): 5017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch zip.write(library, FileJustName(library)) 5027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch #remove the paths on filenames 5047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for segment in jet_file.GetSegments(): 505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) segment.filename = FileJustName(segment.filename) 5067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch segment.dlsfile = FileJustName(segment.dlsfile) 5077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch segment.output = FileJustName(segment.output) 5087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch #remove paths 5107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for index, library in enumerate(jet_file.libraries): 511f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jet_file.libraries[index] = FileJustName(library) 5127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch #create temporary .JTC file so we can modify paths to files 5147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tmpConfigFile = JetDefs.TEMP_JET_CONFIG_FILE 5157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileKillClean(tmpConfigFile) 516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch #save the file 5187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jet_file.SaveJetConfig(tmpConfigFile) 5197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch #zip it and rename it back to original name without path 521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) zip.write(tmpConfigFile, FileJustName(jetConfigFile)) 522424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 523424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) #create a flag file so we know this is a jet archive 524424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) zip.write(tmpConfigFile, "JetArchive") 525424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 526f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) zip.close() 5277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileKillClean(tmpConfigFile) 5297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef ValidateConfig(test_jet_file): 5317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """ Validates the contents of a config file """ 532f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dImp = __import__('JetDialogs') 5337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch errors = [] 5347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch fatalError = False 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for segment in test_jet_file.segments: 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logging.debug(segment.filename) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if segment.filename is not None and len(segment.filename) > 0 and not FileExists(segment.filename): 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) errors.append(("Segment MIDI file not found", segment.filename)) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fatalError = True 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if segment.dlsfile is not None and len(segment.dlsfile) > 0 and not FileExists(segment.dlsfile): 541a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) errors.append(("Segment DLS file not found; removing from config", segment.dlsfile)) 542a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) segment.dlsfile = "" 543a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logging.debug(test_jet_file.config.filename) 545a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 546a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if len(errors) == 0: 547a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return True 548a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) else: 549a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) dlg = dImp.JetErrors("Jet Definition File Errors") 550a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) dlg.SetErrors(errors) 551a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) result = dlg.ShowModal() 552a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) dlg.Destroy() 553a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if fatalError: 554a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return False 555a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) else: 556a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return True 557a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 558a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)def release_getLogger(name): 559a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ passing original handler with debug() method replaced to empty function """ 560a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 561a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def dummy(*k, **kw): 562a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pass 563a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 564a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) global __orig_getLogger 565a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) log = __orig_getLogger(name) 566a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setattr(log, 'debug', dummy) 567a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setattr(log, 'info', dummy) 568a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setattr(log, 'error', dummy) 569a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setattr(log, 'critical', dummy) 570a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return log 571a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 572a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)def install_release_loggers(): 573a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ Save original handler, installs newer one """ 574a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) global __orig_getLogger 575a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) __orig_getLogger = logging.getLogger 576a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setattr(logging, 'getLogger', release_getLogger) 577a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 578a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)def restore_getLogger(): 579a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) """ Restores original handler """ 580a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) global __orig_getLogger 581a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if __orig_getLogger: 582a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) setattr(logging, 'getLogger', __orig_getLogger) 583a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 584a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)def GetMidiFileLength(midiFile): 585a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) """ Gets the length of a midi file via eas """ 586a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) e = __import__('eas') 587a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 588a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if not FileExists(midiFile): 589a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return 0 590a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 591a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) eas = e.EAS() 592a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) audio_file = eas.OpenFile(midiFile) 593a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) audio_file.Prepare() 594a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) midiLength = eas.audio_streams[0].ParseMetaData() 595a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) audio_file.Close() 596a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) eas.Shutdown() 597a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return midiLength 598a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 599a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)def GetMidiInfo(midiFile): 600a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ Gets midi file info """ 601a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) m = __import__('midifile') 602a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) md = m.GetMidiInfo(midiFile) 603a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return md 604a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def PrintMidiInfo(midiFile): 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ Prints info about a midi file """ 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mi = GetMidiInfo(midiFile) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if mi.err == 0: 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print("ppqn: " + str(mi.ppqn)) 610a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch print("beats_per_measure: " + str(mi.beats_per_measure)) 611a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch print("ending mbt: " + str(mi.endMbt)) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print("ending mbt str: " + mi.endMbtStr) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print("maxMeasures: " + str(mi.maxMeasures)) 614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) print("maxBeats: " + str(mi.maxBeats)) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print("maxTicks: " + str(mi.maxTicks)) 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print("maxTracks: " + str(mi.maxTracks)) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print("totalTicks: " + str(mi.totalTicks)) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for track in mi.trackList: 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print(track) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 6210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) print("Error opening") 6220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 6230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)def MidiSegInfo(segment): 6240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) """ Midi file info saved in config file for speed """ 6250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) class segInfo: 6260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) iMsPerTick = 0 6270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bpm = 4 6280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ppqn = 480 6290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) total_ticks = 0 6300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) iLengthInMs = 0 6310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) iTracks = 0 6320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) trackList = [] 6337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ver = "1.5" 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = segInfo() 6367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch savedVer = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Ver") 637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) savedDateTime = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "DateTime") 6387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch dateTime = FileDateTime(segment.filename) 6397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if ver != savedVer or dateTime != savedDateTime: 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mi = GetMidiInfo(segment.filename) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if mi.err == 0: 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Ver", ver) 643424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "DateTime", str(dateTime)) 644424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "PPQN", str(mi.ppqn)) 645424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "BPM", str(mi.beats_per_measure)) 646424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "totalTicks", str(mi.totalTicks)) 647424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "maxTracks", str(mi.maxTracks)) 648424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) iLengthInMs = GetMidiFileLength(segment.filename) * 1000 649424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "LengthInMs", str(iLengthInMs)) 650424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if iLengthInMs > 0: 651424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "MsPerTick", str(iLengthInMs / mi.totalTicks)) 652424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) #have to write out the tracklist in format that can be saved in INI file 6537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tl = [] 6547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) for track in mi.trackList: 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tl.append((track.track, track.channel, track.name)) 6567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IniSetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Tracks", tl) 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch trackList = [] 6597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch tl = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "Tracks", 'list', []) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for t in tl: 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackList.append(trackGrid(t[0], t[1], t[2],False)) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iTracks = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "maxTracks", 'int', 0) 663a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) iMsPerTick = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "MsPerTick", 'float', 0) 664a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bpm = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "BPM", 'int', 0) 665a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ppqn = IniGetValue(JetDefs.JETMIDIFILES_INI, segment.filename, "PPQN", 'int', 480) 666a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if iMsPerTick == 0 or bpm == 0 or ppqn == 0: 667a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ret 668a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) tb = TimeBase(ppqn, bpm) 669a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) total_ticks = tb.ConvertStrTimeToTicks(segment.length) 670a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if total_ticks == 0: 671a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) total_ticks = tb.MbtDifference(tb.ConvertStrTimeToTuple(segment.start), tb.ConvertStrTimeToTuple(segment.end)) 672a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if total_ticks == 0: 673a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ret 674a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 675a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ret.iTracks = iTracks 676a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ret.iMsPerTick = iMsPerTick 677a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ret.bpm = bpm 678a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ret.ppqn = ppqn 679a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ret.total_ticks = total_ticks 680a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ret.iLengthInMs = total_ticks * iMsPerTick 681a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ret.trackList = trackList 682a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return ret 683a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 6847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef TimeStr(ms): 6857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) """ Returns a time string """ 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s=ms/1000 6877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch m,s=divmod(s,60) 6887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch h,m=divmod(m,60) 6897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch d,h=divmod(h,24) 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if m > 0: 6917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return "%d Min %d Sec" % (m,s) 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else: 6937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return "%d Seconds" % (s) 6947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 695a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)def mbtFct(mbt, mod): 696a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ Converts times """ 697a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if type(mbt).__name__=='str' or type(mbt).__name__=='unicode': 6987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mbt = ConvertStrTimeToTuple(mbt) 699a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) retType = 'str' 700a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) else: 701a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) retType = 'int' 702a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 703a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) m = mbt[0]+mod 7047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch b = mbt[1]+mod 7057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch t = mbt[2] 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if m < 0: 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m = 0 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if b < 0: 7097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch b = 0 7107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if b > 4: 7117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch b = 4 7127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if t < 0: 7137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) t = 0 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if retType == 'str': 7167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return "%d:%d:%d" % (m, b, t) 7177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch else: 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return (m, b, t) 7197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochdef OsWindows(): 7217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch """ Tells us whether windows or os x """ 7227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if os.name == 'nt': 7237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return True ; 7247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch else: 7257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return False ; 726a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 727a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)def MacOffset(): 728a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ Mac screen coordinates funky on some controls so we finagle a few pixels """ 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if not OsWindows(): 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 3 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else: 7327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return 0 7337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def SafeJetShutdown(lock, jet): 7357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) """ Makes sure we do the jet shutdown properly """ 736a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) with lock: 7377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch #MAKE SURE WE CLEANUP 738a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) #try: jet.Clear_Queue() 739a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) #except: pass 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try: jet.eas.StopWave() 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) except: pass 7437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) try: jet.Shutdown() 7457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) except: pass 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jet = None 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)def CreateTempJetFile(org_jet_file): 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ Creates temporary jet file for playback testing """ 7527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) dirname = JetDefs.TEMP_JET_DIR 7537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if not os.path.isdir(dirname): 754ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch os.mkdir(dirname) 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tmpConfigFile = dirname + FileJustName(org_jet_file.config_file) 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileKillClean(tmpConfigFile) 758424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 759424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) jet_file = copy.deepcopy(org_jet_file) 760424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 761424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) for tmp in jet_file.segments: 762424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) tmp.output = dirname + FileJustName(tmp.output) 763424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 764424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) jet_file.config_file = tmpConfigFile 765a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jet_file.config.filename = dirname + FileJustName(jet_file.config.filename) 7665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FileKillClean(jet_file.config.filename) 767a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 768a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jet_file.SaveJetConfig(tmpConfigFile) 769a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jet_file.WriteJetFileFromConfig(tmpConfigFile) 770a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 771424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return jet_file 772424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 773424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)def CleanupTempJetFile(jet_file): 774424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) """ Cleans up temporary files """ 7757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FileKillClean(jet_file.config.filename) 7767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FileKillClean(jet_file.config_file) 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for tmp in jet_file.segments: 7787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) FileKillClean(tmp.output) 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def GetNow(): 7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return time.asctime() 7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 783a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 7845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)if __name__ == '__main__': 7852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) """ Tests functions """ 786a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pass 787a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 7887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch