Ajout d'une option pour afficher / masquer les noms de notes en bas du clavier.
[minwii.git] / src / minwii / app.py
index da2bcb8..ab10bdf 100755 (executable)
@@ -50,6 +50,7 @@ class MinWii(object):
         self.initWiimotes()
         self.firstSong = True
         self.screen = SCREEN_HOME
         self.initWiimotes()
         self.firstSong = True
         self.screen = SCREEN_HOME
+        self.playingScreen = None
     
     def initWiimotes(self) :
         if self.wiimoteSupport :
     
     def initWiimotes(self) :
         if self.wiimoteSupport :
@@ -58,7 +59,7 @@ class MinWii(object):
             global pygame_wiimouse
             from pywiiuse import pygame_wiimouse
             from minwii.config import IR_POSITION
             global pygame_wiimouse
             from pywiiuse import pygame_wiimouse
             from minwii.config import IR_POSITION
-            pygame_wiimouse.init(2, 5, self.screenResolution, IR_POSITION) # look for 4, wait 5 seconds
+            pygame_wiimouse.init(5, 5, self.screenResolution, IR_POSITION) # look for 5, wait 5 seconds
             self.nwiimotes = nwiimotes = pygame_wiimouse.get_count()
             console.debug('wiimotes found : %d', nwiimotes)
             self.WT = WT = pygame_wiimouse.WT
             self.nwiimotes = nwiimotes = pygame_wiimouse.get_count()
             console.debug('wiimotes found : %d', nwiimotes)
             self.WT = WT = pygame_wiimouse.WT
@@ -70,13 +71,27 @@ class MinWii(object):
     def _wiimotesEventCallBack(self, wt, id, wmp) :
         if self.screen == SCREEN_PLAY :
             pygame_wiimouse._default_event_cb(wt, id, wmp)
     def _wiimotesEventCallBack(self, wt, id, wmp) :
         if self.screen == SCREEN_PLAY :
             pygame_wiimouse._default_event_cb(wt, id, wmp)
+            
             wm = wmp[0]
             wm = wmp[0]
-            if id == self.nwiimotes - 1 and \
-                wiiuse.is_just_pressed(wm, wiiuse.button['Home']) :
+            if id == self.nwiimotes - 1 :
+                # le bouton Home de la télécommande permet de sortir
+                # (envoi d'un événement clavier « q »)
+                if wiiuse.is_just_pressed(wm, wiiuse.button['Home']) :
                     event = pygame.event.Event(pygame.KEYDOWN,
                                                key = pygame.K_q,
                                                unicode = u'q')
                     pygame.event.post(event)
                     event = pygame.event.Event(pygame.KEYDOWN,
                                                key = pygame.K_q,
                                                unicode = u'q')
                     pygame.event.post(event)
+                elif wiiuse.is_just_pressed(wm, wiiuse.button['+']) :
+                    self.synth.inc_gain()
+                elif wiiuse.is_just_pressed(wm, wiiuse.button['-']) :
+                    self.synth.dec_gain()
+                elif wiiuse.is_just_pressed(wm, wiiuse.button['1']) and self.playingScreen :
+                    self.playingScreen.tempoTrimUp()
+                elif wiiuse.is_just_pressed(wm, wiiuse.button['2']) and self.playingScreen :
+                    self.playingScreen.tempoTrimDown()
+
+        elif self.screen in (SCREEN_HOME, SCREEN_INSTRUMENTS) :
+            pygame_wiimouse._full_mouse_event_cb(wt, id, wmp)
     
     def run(self) :
         "séquençage de l'affichage des écrans"
     
     def run(self) :
         "séquençage de l'affichage des écrans"
@@ -87,16 +102,16 @@ class MinWii(object):
         pygame.display.set_caption('MINWii')
         WT = self.WT
         
         pygame.display.set_caption('MINWii')
         WT = self.WT
         
-        songFile, playMode, wiimoteIndex = '', 'NORMAL', 0
+        songFile, playMode, displayNotes, wiimoteIndex = '', 'NORMAL', True, 0
 
         while True :
             WT.resume()
 
         while True :
             WT.resume()
+            WT.selectWiimote(self.nwiimotes - 1) # la télécommande est la souris
             self.screen = SCREEN_HOME
             self.screen = SCREEN_HOME
-            exit, songFile, playMode, wiimoteIndex = \
-                self.selectSongAndOptions(songFile, playMode, wiimoteIndex)
+            exit, songFile, playMode, displayNotes, wiimoteIndex = \
+                self.selectSongAndOptions(songFile, playMode, displayNotes, wiimoteIndex)
             if exit : break
             
             if exit : break
             
-            WT.selectWiimote(wiimoteIndex)
             
             self.screen = SCREEN_INSTRUMENTS
             instrumentDescription = self.selectInstrument()
             
             self.screen = SCREEN_INSTRUMENTS
             instrumentDescription = self.selectInstrument()
@@ -104,20 +119,23 @@ class MinWii(object):
                 continue
             
             self.screen = SCREEN_PLAY
                 continue
             
             self.screen = SCREEN_PLAY
-            self.runPlayingScreen(songFile, playMode, instrumentDescription)
+            WT.selectWiimote(wiimoteIndex)
+            self.runPlayingScreen(songFile, playMode, displayNotes, instrumentDescription)
             WT.pause()
     
     
             WT.pause()
     
     
-    def selectSongAndOptions(self, songFile, playMode, wiimoteIndex) :
+    def selectSongAndOptions(self, songFile, playMode, displayNotes, wiimoteIndex) :
         """ lance l'écran de paramétrage et retourne un tuple comportant :
             - drapeau de sortie de l'application (booléen)
             - chemin du fichier de la chanson
             - mode (entier)
         """ lance l'écran de paramétrage et retourne un tuple comportant :
             - drapeau de sortie de l'application (booléen)
             - chemin du fichier de la chanson
             - mode (entier)
+            - affichage des notes (booléen)
             - wiimote sélectionnée (entier)
         """
         home = Home(songPath=SONG_FILE_PATH,
                     songFile=songFile,
                     playMode=playMode,
             - wiimote sélectionnée (entier)
         """
         home = Home(songPath=SONG_FILE_PATH,
                     songFile=songFile,
                     playMode=playMode,
+                    displayNotes=displayNotes,
                     wiimoteIndex=wiimoteIndex,
                     nwiimotes=self.nwiimotes)
         app = self.app
                     wiimoteIndex=wiimoteIndex,
                     nwiimotes=self.nwiimotes)
         app = self.app
@@ -147,6 +165,7 @@ class MinWii(object):
         return (home.exitApp,
                 home.songFile,
                 home.selectedPlayMode,
         return (home.exitApp,
                 home.songFile,
                 home.selectedPlayMode,
+                home.displayNotes,
                 home.selectedWiimoteIndex)
     
     def selectInstrument(self) :
                 home.selectedWiimoteIndex)
     
     def selectInstrument(self) :
@@ -166,7 +185,7 @@ class MinWii(object):
             console.info('ajustement octave : %d', instru['octave'])
         return instru
     
             console.info('ajustement octave : %d', instru['octave'])
         return instru
     
-    def runPlayingScreen(self, songFile, playMode, instrumentDescription) :
+    def runPlayingScreen(self, songFile, playMode, displayNotes, instrumentDescription) :
         """ Lance l'écran de jeu principal avec la chanson 'songFile' dans le mode 'playMode'
             avec l'instrument midi 'instrumentDescription'.
         """
         """ Lance l'écran de jeu principal avec la chanson 'songFile' dans le mode 'playMode'
             avec l'instrument midi 'instrumentDescription'.
         """
@@ -176,13 +195,14 @@ class MinWii(object):
         self.synth.adjust_octave(0, octave)
         self.synth.program_select(0, bank, preset)
         if playMode == PLAYING_MODES_DICT['IMPRO'] :
         self.synth.adjust_octave(0, octave)
         self.synth.program_select(0, bank, preset)
         if playMode == PLAYING_MODES_DICT['IMPRO'] :
-            playingScreen = PlayingScreen(self.synth)
+            playingScreen = PlayingScreen(self.synth, displayNotes=displayNotes)
         else :
             song = musicXml2Song(songFile)
         else :
             song = musicXml2Song(songFile)
-            playingScreen = SongPlayingScreen(self.synth, song, mode=playMode)
+            self.playingScreen = playingScreen = SongPlayingScreen(self.synth, song, mode=playMode, displayNotes=displayNotes)
         playingScreen.run()
         pygame.event.clear()
         EventDispatcher.reset()
         playingScreen.run()
         pygame.event.clear()
         EventDispatcher.reset()
+        self.playingScreen = None
 
 
 class _WTFacade :
 
 
 class _WTFacade :