--- /dev/null
+'''\r
+Created on 25 janv. 2010\r
+\r
+@author: Samuel Benveniste\r
+'''\r
+\r
+import pygame\r
+import pickle\r
+\r
+from pgu import gui as pguGui\r
+\r
+from gui import constants\r
+\r
+from instruments.Instrument import Instrument\r
+from songs.Song import Song\r
+from cursor.WarpingCursor import *\r
+from gui.StaticFamiliarizer import StaticFamiliarizer\r
+from gui.SongFamiliarizer import SongFamiliarizer\r
+from gui.SongPlayingScreen import SongPlayingScreen\r
+from gui.DummyInstrumentChoice import DummyInstrumentChoice\r
+from controllers.Wiimote import Wiimote\r
+\r
+class LogPGUPlayer(pguGui.Desktop):\r
+ '''\r
+ classdocs\r
+ '''\r
+\r
+\r
+ def __init__(self,rate):\r
+ '''\r
+ Constructor\r
+ '''\r
+ self.firstStepDurations = []\r
+ self.firstStepClicks = []\r
+ self.firstStepClicksIn = []\r
+ \r
+ self.secondStepDurations = []\r
+ self.secondStepClicks = []\r
+ self.secondStepClicksIn = []\r
+ \r
+ self.thirdStepDurations = []\r
+ self.thirdStepClicks = []\r
+ self.thirdStepClicksIn = []\r
+ \r
+ self.songDurations = []\r
+ self.songClicks = []\r
+ self.songClicksIn = []\r
+ self.songClicksPerMinute = []\r
+ self.songClicksInPerMinute = []\r
+ self.songTotalDurations = []\r
+ \r
+ self.meanTimeBetweenNotes = []\r
+ \r
+ pguGui.Desktop.__init__(self)\r
+ \r
+ self.replayRate = rate\r
+ #pguGui.theme.load('../data/themes/default')\r
+ \r
+ self.connect(pguGui.QUIT,self.quit,None)\r
+ \r
+ main = pguGui.Container(width=500, height=400) #, background=(220, 220, 220) )\r
+ \r
+ \r
+ main.add(pguGui.Label("File Dialog Example", cls="h1"), 20, 20)\r
+ \r
+ \r
+ td_style = {'padding_right': 10}\r
+ t = pguGui.Table()\r
+ t.tr()\r
+ t.td( pguGui.Label('File Name:') , style=td_style )\r
+ self.input_file = pguGui.Input()\r
+ t.td( self.input_file, style=td_style )\r
+ self.browseButton = pguGui.Button("Browse...")\r
+ t.td( self.browseButton, style=td_style )\r
+ self.browseButton.connect(pguGui.CLICK, self.open_file_browser, None)\r
+ \r
+ self.goButton = pguGui.Button("Go")\r
+ \r
+ self.goButton.connect(pguGui.CLICK, self.goButtonClicked,None)\r
+ \r
+ self.quitButton = pguGui.Button("Fin")\r
+ self.quitButton.connect(pguGui.CLICK,self.quit,None)\r
+ \r
+ t.td( self.browseButton, style=td_style )\r
+ t.td( self.goButton, style=td_style )\r
+ t.td( self.quitButton, style=td_style )\r
+ \r
+ main.add(t, 20, 100)\r
+ \r
+ self.run(main)\r
+ #import profile\r
+ #profile.run('app.run(main)')\r
+ \r
+ def open_file_browser(self,data=None):\r
+ d = pguGui.FileDialog(path = "../../../saves")\r
+ d.connect(pguGui.CHANGE, self.handle_file_browser_closed, d)\r
+ d.open()\r
+ \r
+ \r
+ def handle_file_browser_closed(self,dlg):\r
+ if dlg.value: self.input_file.value = dlg.value\r
+ \r
+ def goButtonClicked(self,data=None):\r
+ if self.input_file.value.endswith(".fmwi"):\r
+ f = file(self.input_file.value, 'r')\r
+ unpickler = pickle.Unpickler(f)\r
+ log = unpickler.load()\r
+ f.close()\r
+ \r
+ log.eventLog.setReplayRate(self.replayRate)\r
+ \r
+ pygame.midi.init()\r
+ instruments = [Instrument(log.scale, i + 1, "".join(["../instruments/instrumentImages/", constants.instrumentImagePathList[i], ".jpg"]), constants.octaves[i]) for i in range(9)]\r
+ \r
+ joys = [[id,pygame.joystick.Joystick(id).get_name()] for id in range(pygame.joystick.get_count())]\r
+ for joy in joys:\r
+ if joy[1] in constants.joyNames:\r
+ pygame.joystick.Joystick(joy[0]).init() \r
+ \r
+ ports = [pygame.midi.get_device_info(id)[1] for id in range(pygame.midi.get_count())]\r
+ portOffset = ports.index(constants.portNames[0])\r
+ print(portOffset)\r
+ \r
+ screen = pygame.display.get_surface()\r
+ clock = pygame.time.Clock() \r
+ cursorImages=[['../cursor/cursorImages/black/10.png'],['../cursor/cursorImages/red/10.png'],['../cursor/cursorImages/blue/10.png'],['../cursor/cursorImages/green/10.png']]\r
+ durations = [75 for i in range(len(cursorImages))]\r
+ \r
+ extsc = True\r
+ casc = False\r
+ easyMode = True\r
+ \r
+ song = Song(constants.scaleDict["majorScale"],[3,9,6,4,1,8,5,7,2,10],True)\r
+ \r
+ wiimoteCount = 4\r
+ \r
+ cursors = [WarpingCursor(None, cursorImages[i], durations, (300 * i, 300 * i),'../cursor/cursorImages/black/flash.png') for i in range(wiimoteCount)]\r
+ wiimotes = [Wiimote(i, i + portOffset, None, instruments[0], cursors[i]) for i in range(wiimoteCount)]\r
+ dummyInstrumentChoice = DummyInstrumentChoice(wiimotes, window, screen, clock, joys, portOffset, log.activeWiimotes)\r
+ if log.level < 2 :\r
+ familiarize = StaticFamiliarizer(wiimotes, window, screen, clock, joys, portOffset,log.activeWiimotes,level = log.level,eventLog = log.eventLog,replay = True)\r
+ self.fillStaticFamiliarizerStats(familiarize)\r
+ elif log.level == 2 :\r
+ familiarize = SongFamiliarizer(wiimotes, window, screen, clock, joys, portOffset,song,log.activeWiimotes,casc,extsc,easyMode,eventLog = log.eventLog,replay = True)\r
+ self.fillSongFamiliarizerStats(familiarize)\r
+ else :\r
+ familiarize = SongPlayingScreen(dummyInstrumentChoice,constants.songDict["clairdelalune"],easyMode = True,eventLog = log.eventLog,replay = True)\r
+ self.fillSongStats(familiarize) \r
+ \r
+ while familiarize.nextLevel != None :\r
+ if familiarize.nextLevel < 2 :\r
+ familiarize = StaticFamiliarizer(wiimotes, window, screen, clock, joys, portOffset,log.activeWiimotes,level = familiarize.nextLevel,eventLog = familiarize.eventLog,replay = True)\r
+ self.fillStaticFamiliarizerStats(familiarize)\r
+ elif familiarize.nextLevel == 2 :\r
+ familiarize = SongFamiliarizer(wiimotes, window, screen, clock, joys, portOffset,song,log.activeWiimotes,casc,extsc,easyMode,eventLog = familiarize.eventLog,replay = True)\r
+ self.fillSongFamiliarizerStats(familiarize)\r
+ else :\r
+ familiarize = SongPlayingScreen(dummyInstrumentChoice,constants.songDict["clairdelalune"],easyMode = True,eventLog = familiarize.eventLog,replay = True)\r
+ self.fillSongStats(familiarize)\r
+ \r
+ for wiimote in wiimotes:\r
+ del wiimote.port \r
+ \r
+ pygame.midi.quit()\r
+ self.printStatsToFile()\r
+ \r
+ def fillStaticFamiliarizerStats(self,familiarizer):\r
+ if familiarizer.level == 0 :\r
+ self.firstStepClicks.append(familiarizer.clicks)\r
+ self.firstStepClicksIn.append(familiarizer.clicksIn)\r
+ self.firstStepDurations.append(familiarizer.duration)\r
+ \r
+ if familiarizer.level == 1 :\r
+ self.secondStepClicks.append(familiarizer.clicks)\r
+ self.secondStepClicksIn.append(familiarizer.clicksIn)\r
+ self.secondStepDurations.append(familiarizer.duration)\r
+ \r
+ def fillSongFamiliarizerStats(self,familiarizer):\r
+ self.thirdStepClicks.append(familiarizer.clicks)\r
+ self.thirdStepClicksIn.append(familiarizer.clicksIn)\r
+ self.thirdStepDurations.append(familiarizer.duration)\r
+ \r
+ def fillSongStats(self,familiarizer):\r
+ self.songClicks.append(familiarizer.clicks)\r
+ self.songClicksIn.append(familiarizer.clicksIn)\r
+ self.songClicksPerMinute.append(familiarizer.clicksPerMinute)\r
+ self.songClicksInPerMinute.append(familiarizer.clicksInPerMinute)\r
+ self.songDurations.append(familiarizer.songDurations)\r
+ self.songTotalDurations.append(familiarizer.totalDuration)\r
+ \r
+ def statsToFormattedString(self):\r
+ return("First step durations :\n"+"\n"+\r
+ str(self.firstStepDurations)+"\n"+"\n"+\r
+ "First step clicks :\n"+"\n"+\r
+ str(self.firstStepClicks)+"\n"+"\n"+\r
+ "First step clicksIn :\n"+"\n"+\r
+ str(self.firstStepClicksIn)+"\n"+"\n"+\r
+ "Second step durations :\n"+"\n"+\r
+ str(self.secondStepDurations)+"\n"+"\n"+\r
+ "Second step clicks :\n"+"\n"+\r
+ str(self.secondStepClicks)+"\n"+"\n"+\r
+ "Second step clicksIn :\n"+"\n"+\r
+ str(self.secondStepClicksIn)+"\n"+"\n"+\r
+ "Third step durations :\n"+"\n"+\r
+ str(self.thirdStepDurations)+"\n"+"\n"+\r
+ "Third step clicks :\n"+"\n"+\r
+ str(self.thirdStepClicks)+"\n"+"\n"+\r
+ "Third step clicksIn :\n"+"\n"+\r
+ str(self.thirdStepClicksIn)+"\n"+"\n"+\r
+ "song durations :\n"+"\n"+\r
+ str(self.songDurations)+"\n"+"\n"+\r
+ "song clicks :\n"+"\n"+\r
+ str(self.songClicks)+"\n"+"\n"+\r
+ "song clicksIn :\n"+"\n"+\r
+ str(self.songClicksIn)+"\n"+"\n"+\r
+ "song clicks per minute:\n"+"\n"+\r
+ str(self.songClicksPerMinute)+"\n"+"\n"+\r
+ "song clicksIn per minute :\n"+"\n"+\r
+ str(self.songClicksInPerMinute)+"\n"+"\n"+\r
+ "song total durations :\n"+"\n"+\r
+ str(self.songTotalDurations)+"\n"+"\n")\r
+ \r
+ def printStatsToFile(self,path=None):\r
+ if path == None :\r
+ path = self.input_file.value.replace(".fmwi",".txt")\r
+ file = open(path,"w")\r
+ file.write("Log ID : "+self.input_file.value+"\n"+"\n")\r
+ file.write(self.statsToFormattedString())\r
+ file.close()\r
+ \r
+if __name__ == "__main__":\r
+ pygame.init()\r
+ modeResolution = (1024,768)\r
+ window = pygame.display.set_mode(modeResolution,pygame.FULLSCREEN)\r
+ logConfig = LogPGUPlayer(10000)\r
+ pygame.quit()\r
+
\ No newline at end of file