commit par sécurité.
authorpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Wed, 3 Mar 2010 16:06:30 +0000 (16:06 +0000)
committerpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Wed, 3 Mar 2010 16:06:30 +0000 (16:06 +0000)
git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@63 fe552daf-6dbe-4428-90eb-1537e0879342

src/app/config.py
src/app/events.py
src/app/minwii.py
src/app/widgets/playingscreen.py

index 9e27584..aaf51a0 100755 (executable)
@@ -5,6 +5,9 @@ $Id$
 $URL$
 """
 
+import pygame
+pygame.font.init()
+
 # playingscreen
 BORDER = 0 # 5px
 FIRST_HUE = 0.6
@@ -14,3 +17,6 @@ ON_TOP_LUMINANCE = 0.6
 ON_BOTTOM_LUMINANCE = 0.9
 ON_SATURATION = 1
 ON_COLUMN_OVERSIZING = 1.75
+ON_COLUMN_ALPHA = 0.98
+FONT = pygame.font.Font(None, 80)
+FONT_COLOR = (0,0,0)
index b271c1f..149c2ff 100755 (executable)
@@ -1,2 +1,4 @@
 from pygame.locals import USEREVENT
 TIMEOUT = USEREVENT + 1
+NOTEON = USEREVENT + 2
+NOTEOFF = USEREVENT + 3
index 6e29cd9..2cc4988 100755 (executable)
@@ -9,10 +9,10 @@ $URL$
 #from pgu.gui import Desktop
 #from pgu.gui import QUIT
 from widgets.home import Home
-from widgets.playingscreen import _PlayingScreenBase, SongPlayingScreenTest
+from widgets.playingscreen import PlayingScreen
 
 class MinWii(object):
     
     def __init__(self) :
-        playingScreen = SongPlayingScreenTest()
+        playingScreen = PlayingScreen()
         playingScreen.run()
index f881433..b4d5cb4 100755 (executable)
@@ -13,6 +13,7 @@ from cursors import WarpingCursor
 from eventutils import event_handler, EventDispatcher, EventHandlerMixin
 from math import floor
 import types
+from musicxml import Tone
 
 from config import BORDER
 from config import FIRST_HUE
@@ -22,7 +23,9 @@ from config import ON_TOP_LUMINANCE
 from config import ON_BOTTOM_LUMINANCE
 from config import ON_SATURATION
 from config import ON_COLUMN_OVERSIZING
-
+from config import ON_COLUMN_ALPHA
+from config import FONT
+from config import FONT_COLOR
 
 class _PlayingScreenBase(pygame.sprite.LayeredUpdates, EventHandlerMixin) :
 
@@ -75,19 +78,14 @@ class _PlayingScreenBase(pygame.sprite.LayeredUpdates, EventHandlerMixin) :
         hueStep = FIRST_HUE / (self.keyboardLength - 1)
         for i, rect in enumerate(self.keyboardRects) :
             hue = FIRST_HUE - hueStep * i
-            c = Column(hue, rect)
+            tone = self.distinctNotes[i]
+            c = Column(self, hue, rect, tone)
             self.add(c, layer=0)
     
     def _initCursor(self) :
         self.cursor = WarpingCursor(blinkMode=True)
         self.add(self.cursor, layer=2)
         
-        
-    def highlightColumn(self, index) :
-        for i, sprite in enumerate(self.sprites()) :
-            sprite.update(i==index)
-        self.draw(pygame.display.get_surface())
-    
     def run(self):
         self._running = True
         clock = pygame.time.Clock()
@@ -97,22 +95,30 @@ class _PlayingScreenBase(pygame.sprite.LayeredUpdates, EventHandlerMixin) :
             dirty = self.draw(pygame.display.get_surface())
             pygame.display.update(dirty)
             clock.tick(50)
-    
+
     @event_handler(pygame.KEYDOWN)       
     def handleKeyDown(self, event) :
         if event.key == pygame.K_q:
             self._running = False
-        uni = event.unicode
+
         
-        if uni.isdigit() and int(uni) <=8 :
-            self.highlightColumn(int(uni))
-    
     @event_handler(pygame.MOUSEMOTION)
     def handleMouseMotion(self, event) :
         pass
         
         
-    
+class PlayingScreen(_PlayingScreenBase) :
+    "fenêtre de jeu pour improvisation"
+    scale = [55, 57, 59, 60, 62, 64, 65, 67, 69, 71, 72]
+
+    def __init__(self) :
+        distinctNotes = []
+        for midi in self.scale :
+            tone = Tone(midi)
+            distinctNotes.append(tone)
+        
+        super(PlayingScreen, self).__init__(distinctNotes)        
+        
 
 class SongPlayingScreen(_PlayingScreenBase) :
     
@@ -130,16 +136,16 @@ class SongPlayingScreenTest(_PlayingScreenBase) :
 
 class Column(pygame.sprite.Sprite, EventHandlerMixin) :
     
-    def __init__(self, hue, rect) :
-        pygame.sprite.Sprite.__init__(self)
+    def __init__(self, group, hue, rect, tone) :
+        pygame.sprite.Sprite.__init__(self, group)
         sur = pygame.surface.Surface(rect.size)
         rgba = hls_to_rgba_8bits(hue, OFF_LUMINANCE, OFF_SATURATION)
         sur.fill(rgba)
         self.stateOff = sur
         self.rectOff = rect
         
-        topRgba = hls_to_rgba_8bits(hue, ON_TOP_LUMINANCE, ON_SATURATION)
-        bottomRgba = hls_to_rgba_8bits(hue, ON_BOTTOM_LUMINANCE, ON_SATURATION)
+        topRgba = hls_to_rgba_8bits(hue, ON_TOP_LUMINANCE, ON_SATURATION, ON_COLUMN_ALPHA)
+        bottomRgba = hls_to_rgba_8bits(hue, ON_BOTTOM_LUMINANCE, ON_SATURATION, ON_COLUMN_ALPHA)
         onWidth = rect.width * ON_COLUMN_OVERSIZING
         onLeft = rect.centerx - onWidth / 2
         rectOn = pygame.Rect((onLeft, 0),
@@ -149,6 +155,7 @@ class Column(pygame.sprite.Sprite, EventHandlerMixin) :
         
         self.image = self.stateOff
         self.rect = rect
+        self.toneName = FONT.render(tone.nom, True, (0,0,0))
     
     def update(self, state) :
         group = self.groups()[0]
@@ -169,8 +176,16 @@ class Column(pygame.sprite.Sprite, EventHandlerMixin) :
     @event_handler(pygame.MOUSEBUTTONUP)
     def onMouseUp(self, event) :
         self.update(False)
+    
+    def raiseNoteOn(self) :
+        pass
+    
+    def raiseNoteOff(self) :
+        pass
+
+
         
-def hls_to_rgba_8bits(h, l, s) :
+def hls_to_rgba_8bits(h, l, s, a=1) :
     #convert to rgb ranging from 0 to 255
-    rgba = [floor(255 * i) for i in hls_to_rgb(h, l, s) + (1,)]
+    rgba = [floor(255 * i) for i in hls_to_rgb(h, l, s) + (a,)]
     return tuple(rgba)