-'''\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