Mercurial > hg > multiomr
diff mainGDI.py @ 2:46fb79167a61 tip
Main Code
author | Victor Padilla <victor.padilla.mc@gmail.com> |
---|---|
date | Mon, 04 May 2015 22:56:18 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mainGDI.py Mon May 04 22:56:18 2015 +0200 @@ -0,0 +1,562 @@ +''' +@organization: Lancaster University & University of Leeds +@version: 1.0 +Created on 11/12/2014 + +@author: Victor Padilla +@contact: v.padilla@lancaster.ac.uk + +GDI interface application with wxpython +The application can be run through command line (without windows interface) using +MainMultiOMR library +''' +import wx +import webbrowser +from Functions import AddingXMLSingleMeasures +from Automatism import BatchOMR +from MainMultiOMR import MainMultiOMR + +import modulefinder + +class MainWindow(wx.Frame): + ''' + Configuration of the main interface. + The application could be used without this interface, just with the classes of MainMultiOMR + ''' + + def __init__(self, parent, title): + ''' + init function + + ''' + self.runMainMenu(parent,title) + mf=MainMultiOMR() + mf._loadNWunsch() + + + def runMainMenu(self,parent,title): + ''' + Configure the main menu for the application + + ''' + wx.Frame.__init__(self, parent, title=title, size=(400,400)) + self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) + self.CreateStatusBar() + + preprocessmenu=wx.Menu() + automatmenu=wx.Menu() + processmenu= wx.Menu() + resultmenu=wx.Menu() + utilsmenu=wx.Menu() + menu=wx.Menu() + + menuPDF2TIFF=preprocessmenu.Append(wx.ID_ANY, "& PDF to TIFF"," PDF to TIFF") + menuOssias=preprocessmenu.Append(wx.ID_ANY, "& Remove Ossias"," Remove Ossias") + + menuPSAuto=automatmenu.Append(wx.ID_ANY, "&PS"," PS") + menuSSAuto=automatmenu.Append(wx.ID_ANY, "&SS"," SS") + menuCPAuto=automatmenu.Append(wx.ID_ANY, "&CP"," CP") + menuSEAuto=automatmenu.Append(wx.ID_ANY, "&SE"," SE") + automatmenu.AppendSeparator() + menuAllAuto=automatmenu.Append(wx.ID_ANY, "&All"," All") + automatmenu.AppendSeparator() + menuCleanXML=automatmenu.Append(wx.ID_ANY, "&Clean XML"," Clean XML") + automatmenu.AppendSeparator() + menuSetupApp=automatmenu.Append(wx.ID_ANY, "&Setup Application"," Setup Application") + + menuOpenOneMovement = processmenu.Append(wx.ID_OPEN, "&Process one Movement"," Process one Movement") + menuOpenLoopBigData = processmenu.Append(wx.ID_ANY, "&Process Big Data"," Process big Data") + menuOpenLoopBigDataAdapt = processmenu.Append(wx.ID_ANY, "&Process Big Data Adapting OMRs"," Process big Data Adapting OMRs") + processmenu.AppendSeparator() + menuOpenCompleteProcess = processmenu.Append(wx.ID_ANY, "&Complete process"," Complete Process") + + menuOpenOneMovementGround=resultmenu.Append(wx.ID_ANY, "&Result one Movement"," Result one Movement") + menuOpenLoopBigDataGround = resultmenu.Append(wx.ID_ANY, "&Result Big Data"," Result Big Data") + processmenu.AppendSeparator() + menuFinalXLS = resultmenu.Append(wx.ID_ANY, "&Write final xls"," Write final xls") + + + menuWrongMeasures = utilsmenu.Append(wx.ID_ANY, "&View Wrong Measures"," Wrong measures") + utilsmenu.AppendSeparator() + menuJoinXMLs = utilsmenu.Append(wx.ID_ANY, "&Join XML"," Join XML") + utilsmenu.AppendSeparator() + menuViewM21 = utilsmenu.Append(wx.ID_ANY, "&View Through Music21"," View Music21") + utilsmenu.AppendSeparator() + menuConvertKrnToMusicXML = utilsmenu.Append(wx.ID_ANY, "&Krn to MusicXML"," Krn to MusicXML") + menuConvertMidiToMusicXML = utilsmenu.Append(wx.ID_ANY, "&Midi to MusicXML"," Midi to MusicXML") + menuConvertVoicesToChord = utilsmenu.Append(wx.ID_ANY, "&Voices to Chord"," Voices to Chord") + menuConvertBeamsToTriplets = utilsmenu.Append(wx.ID_ANY, "&Beams to Triplets"," Beams to Triplets") + menuRemovesEmptyVoices = utilsmenu.Append(wx.ID_ANY, "&Removes empty voices"," Removes empty voices") + menuRemovesGaps = utilsmenu.Append(wx.ID_ANY, "&Removes Gaps"," Removes Gaps") + utilsmenu.AppendSeparator() + menuAdaptOMRs = utilsmenu.Append(wx.ID_ANY, "&Adapt OMRs"," Adapt OMRs") + + menuAbout = menu.Append(wx.ID_ABOUT, "&About"," Information about this program") + menu.AppendSeparator() + menuDocumentation = menu.Append(wx.ID_ANY, "& Technical Documentation"," Technical Documentation") + menuUserManual = menu.Append(wx.ID_ANY, "& User Manual"," User Manual") + menu.AppendSeparator() + menuExit = menu.Append(wx.ID_EXIT,"E&xit"," Terminate the program") + + menuBar = wx.MenuBar() + menuBar.Append(preprocessmenu,"&Preprocessing") + menuBar.Append(automatmenu,"&Automatism") + menuBar.Append(processmenu,"&Process") + menuBar.Append(resultmenu,"&Results") + menuBar.Append(utilsmenu,"&Utils") + menuBar.Append(menu,"&Help") + + self.SetMenuBar(menuBar) + + self.Bind(wx.EVT_MENU, self.OnPDF2TIFF, menuPDF2TIFF) + self.Bind(wx.EVT_MENU, self.OnRemoveOssias, menuOssias) + + self.Bind(wx.EVT_MENU, self.OnViewPSAuto, menuPSAuto) + self.Bind(wx.EVT_MENU, self.OnViewSSAuto, menuSSAuto) + self.Bind(wx.EVT_MENU, self.OnViewCPAuto, menuCPAuto) + self.Bind(wx.EVT_MENU, self.OnViewSEAuto, menuSEAuto) + self.Bind(wx.EVT_MENU, self.OnViewAllAuto, menuAllAuto) + self.Bind(wx.EVT_MENU, self.OnViewCleanXML, menuCleanXML) + self.Bind(wx.EVT_MENU, self.OnViewSetupApp, menuSetupApp) + + self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout) + self.Bind(wx.EVT_MENU, self.OnDocumentation, menuDocumentation) + self.Bind(wx.EVT_MENU, self.OnUserManual, menuUserManual) + self.Bind(wx.EVT_MENU, self.OnOpenOneMovement, menuOpenOneMovement) + self.Bind(wx.EVT_MENU, self.OnOpenLoopBigData, menuOpenLoopBigData) + self.Bind(wx.EVT_MENU, self.OnOpenLoopBigDataAdapt, menuOpenLoopBigDataAdapt) + self.Bind(wx.EVT_MENU, self.OnOpenCompleteProcess, menuOpenCompleteProcess) + self.Bind(wx.EVT_MENU, self.OnExit, menuExit) + + self.Bind(wx.EVT_MENU, self.OnViewWrongMeasures, menuWrongMeasures) + self.Bind(wx.EVT_MENU, self.OnViewJoinXMLs, menuJoinXMLs) + self.Bind(wx.EVT_MENU, self.OnViewM21, menuViewM21) + self.Bind(wx.EVT_MENU, self.OnViewConvertKrnToMusicXML, menuConvertKrnToMusicXML) + self.Bind(wx.EVT_MENU, self.OnViewConvertMidiToMusicXML, menuConvertMidiToMusicXML) + self.Bind(wx.EVT_MENU, self.OnViewConvertVoicesToChord, menuConvertVoicesToChord) + self.Bind(wx.EVT_MENU, self.OnViewConvertBeamsToTriplets, menuConvertBeamsToTriplets) + self.Bind(wx.EVT_MENU, self.OnViewRemovesEmptyVoices, menuRemovesEmptyVoices) + self.Bind(wx.EVT_MENU, self.OnViewRemovesGaps, menuRemovesGaps) + self.Bind(wx.EVT_MENU, self.OnViewAdaptOMRs, menuAdaptOMRs) + + + + self.Bind(wx.EVT_MENU, self.OnOpenOneMovementGround, menuOpenOneMovementGround) + self.Bind(wx.EVT_MENU, self.OnOpenLoopBigDataGround, menuOpenLoopBigDataGround) + self.Bind(wx.EVT_MENU, self.OnOpenFinalXLS, menuFinalXLS) + + self.Show(True) + + + def OnPDF2TIFF(self,e): + dlg = wx.FileDialog(self, "Open .PDF file", "", "", + "PDF files (*.pdf)|*.pdf", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + mmo=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + filename = dlg.GetPath() + mmo.processPDF2TIFF(filename) + print "END" + dlg.Destroy() + + + def OnRemoveOssias(self,e): + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mmo=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + dirGeneral = dlg.GetPath() + mmo.processOssia(dirGeneral) + dlg.Destroy() + + + + def OnViewPSAuto(self,e): + ''' + ################ AUTOMATISM MENU ################## + Search all the images folder and convert .tif images to .XML + using PhotoScore (SIKULI) + ''' + batchOMR=BatchOMR() + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + batchOMR.processAllTiffFiles(dirname,"PS") + print "END" + dlg.Destroy() + + def OnViewSSAuto(self,e): + ''' + ################ AUTOMATISM MENU ################## + Search all the images folder and convert .tif images to .XML + using SmartScore (SIKULI) + ''' + batchOMR=BatchOMR() + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + batchOMR.processAllTiffFiles(dirname,"SS") + print "END" + dlg.Destroy() + + def OnViewCPAuto(self,e): + ''' + ################ AUTOMATISM MENU ################## + Search all the images folder and convert .tif images to .XML + using Capella (SIKULI) + ''' + batchOMR=BatchOMR() + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + batchOMR.processAllTiffFiles(dirname,"CP") + print "END" + dlg.Destroy() + + def OnViewSEAuto(self,e): + ''' + ################ AUTOMATISM MENU ################## + Search all the images folder and convert .tif images to .XML + using SharpEye (SIKULI) + ''' + batchOMR=BatchOMR() + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + batchOMR.processAllTiffFiles(dirname,"SE") + print "END" + dlg.Destroy() + + def OnViewAllAuto(self,e): + ''' + ################ AUTOMATISM MENU ################## + Search all the images folder and convert .tif images to .XML + using ALL the predefined OMR (SIKULI) + ''' + batchOMR=BatchOMR() + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + batchOMR.processAllTiffFiles(dirname,"ALL") + print "END" + dlg.Destroy() + + def OnViewCleanXML(self,e): + ''' + ################ AUTOMATISM MENU ################## + Utility for deleting all the files produced by the different OMR + (.XML files and .mro in case of SharpEye) + ''' + batchOMR=BatchOMR() + if wx.MessageBox("All XML Files will be deleted. Do you wish to continue?", "Please confirm", + wx.ICON_QUESTION | wx.YES_NO, self) == wx.NO: + return + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + batchOMR.cleanXMLFiles(dirname) + print "END" + dlg.Destroy() + + def OnViewSetupApp(self,e): + ''' + ################ AUTOMATISM MENU ################## + Utility for setup the 'Process' folder once the OMR files are finished + Two steps: + 1.- Copy the XML files + 2.- Take the .krn file and convert to ground.xml in the appropriate folder + ''' + batchOMR=BatchOMR() + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + print "-------COPY XML FILES----------" + batchOMR.setupApp(dirname) + print "-------CONVERT GROUND----------" + batchOMR.setGround(dirname) + ######## preparing files + + print "END" + dlg.Destroy() + + + + def OnOpenOneMovement(self,e): + ''' + ######################### PROCESS MENU ########################### + Processing just one movement + ''' + + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + dirGeneral = dlg.GetPath() + print "----START----:",dirGeneral + mf.processMovement(dirGeneral) + + dlg.Destroy() + + def OnOpenLoopBigData(self,e): + ''' + ######################### PROCESS MENU ########################### + BigData Process menu option + The program is waiting for files to process + This option can be executed in a different machine reading a common folder + ''' + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + rootDir = dlg.GetPath() + mf.runLoopBigData(rootDir,adaptOMRs=False) + dlg.Destroy() + + def OnOpenLoopBigDataAdapt(self,e): + ''' + ######################### PROCESS MENU ########################### + BigData Process menu option + The program is waiting for files to process + This option can be executed in a different machine reading a common folder + ''' + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + rootDir = dlg.GetPath() + mf.runLoopBigData(rootDir,adaptOMRs=True) + dlg.Destroy() + + + def OnOpenCompleteProcess(self,e): + ''' + ######################### PROCESS MENU ########################### + Run the complete process: + 1- Convert all .tif files to .XML (SIKULI) + 2- Processing all the files + 3- Get all the results + This option is thought in mind for running in a single machine + ''' + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + dirGeneral = dlg.GetPath() + print "----START----:",dirGeneral + mf.runCompleteProcess(dirGeneral) + + dlg.Destroy() + + + def OnOpenOneMovementGround(self,e): + ''' + ########################## RESULT MENU ################################# + Check each .xml file against 'ground.xml' and evaluate the differences. + The final result is written in the appropriated file + Example: + k428\Process\m1\parts\resultGeneral.xlsx + ''' + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + dirGeneral = dlg.GetPath() + mf.processMovementGround(dirGeneral) + dlg.Destroy() + + def OnOpenLoopBigDataGround(self,e): + ''' + ########################## RESULT MENU ################################# + BigData Result menu option + The program is waiting for files to get the result + This option can be executed in a different machine reading a common folder + ''' + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + rootDir = dlg.GetPath() + mf.runLoopBigDataGround(rootDir) + + dlg.Destroy() + + def OnOpenFinalXLS(self,e): + ''' + ########################## RESULT MENU ################################# + BigData Result menu option + The program is waiting for files to get the result + This option can be executed in a different machine reading a common folder + ''' + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + rootDir = dlg.GetPath() + mf.runFinalXLS(rootDir) + + dlg.Destroy() + + def OnViewWrongMeasures(self,e): + ''' + ########################## UTILS MENU ##################################### + Check the different errors in measures using + different procedures + ''' + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + print "---------S1------------" + mf.runViewWrongMeasures(dirname) + + dlg.Destroy() + + + def OnViewJoinXMLs(self,e): + ''' + ########################## UTILS MENU ##################################### + Add different measures + (under development) + ''' + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + addingXML=AddingXMLSingleMeasures() + addingXML.runViewJoinXML(dirname) + + dlg.Destroy() + + + + def OnViewM21(self,e): + ''' + ########################## UTILS MENU ##################################### + Show an .xml file processed by music21 + to check the differences and possible errors + ''' + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + mf.runViewM21(dirname) + dlg.Destroy() + + + + + def OnViewConvertKrnToMusicXML(self,e): + ''' + ########################## UTILS MENU ##################################### + convert one .krn file to .xml + ''' + dlg = wx.FileDialog(self, "Open .krn file", "", "", + "KRN files (*.krn)|*.krn", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + filename = dlg.GetPath() + mf.runConvertKrnToMusicXML(filename) + print "END" + dlg.Destroy() + + def OnViewConvertMidiToMusicXML(self,e): + ''' + ########################## UTILS MENU ##################################### + convert one .midi file to .xml + ''' + dlg = wx.FileDialog(self, "Open .mid file", "", "", + "MIDI files (*.mid)|*.mid", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + filename = dlg.GetPath() + mf.runConvertMidiToMusicXML(filename) + print "END" + dlg.Destroy() + + def OnViewConvertVoicesToChord(self,e): + ''' + ########################## UTILS MENU ##################################### + ''' + dlg = wx.FileDialog(self, "Open .mid file", "", "", + "xml files (*.xml)|*.xml", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + filename = dlg.GetPath() + mf.runConvertVoicesToChord(filename) + print "END" + dlg.Destroy() + + def OnViewConvertBeamsToTriplets(self,e): + ''' + ########################## UTILS MENU ##################################### + ''' + dlg = wx.FileDialog(self, "Open .mid file", "", "", + "xml files (*.xml)|*.xml", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + filename = dlg.GetPath() + mf.runConvertBeamsToTriplets(filename) + print "END" + dlg.Destroy() + + def OnViewRemovesEmptyVoices(self,e): + ''' + ########################## UTILS MENU ##################################### + ''' + dlg = wx.FileDialog(self, "Open .mid file", "", "", + "xml files (*.xml)|*.xml", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + filename = dlg.GetPath() + mf.runRemovesEmptyVoices(filename) + print "END" + dlg.Destroy() + def OnViewRemovesGaps(self,e): + ''' + ########################## UTILS MENU ##################################### + ''' + dlg = wx.FileDialog(self, "Open .mid file", "", "", + "xml files (*.xml)|*.xml", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + filename = dlg.GetPath() + mf.runRemovesGaps(filename) + print "END" + dlg.Destroy() + + def OnViewAdaptOMRs(self,e): + ''' + ########################## UTILS MENU ##################################### + ''' + + dlg = wx.DirDialog(None, "Choose a directory","",wx.DD_DEFAULT_STYLE) + mf=MainMultiOMR() + if dlg.ShowModal() == wx.ID_OK: + dirname = dlg.GetPath() + mf.runAdaptOMRs(dirname) + dlg.Destroy() + + def OnAbout(self,e): + ''' + ########################## MENU ##################################### + about menu option + ''' + dlg = wx.MessageDialog( self, "Big Data Project", "Big Data Project", wx.OK) + dlg.ShowModal() + dlg.Destroy() + + def OnDocumentation(self,e): + ''' + ########################## MENU ##################################### + open documentation web + ''' + webbrowser.open_new("..\\Documentation\\html\\index.html") + def OnUserManual(self,e): + ''' + ########################## MENU ##################################### + open user manual + ''' + webbrowser.open_new("..\\Documentation\\Manual.pdf") + def OnExit(self,e): + ''' + ########################## MENU ##################################### + exit menu option + ''' + self.Close(True) + + + + +app = wx.App(False) +frame = MainWindow(None, "Big Data Process") +app.MainLoop() \ No newline at end of file