# playingscreen
FRAMERATE = 100
# playingscreen
FRAMERATE = 100
FIRST_HUE = 0.6
OFF_LUMINANCE = 0.2
OFF_SATURATION = 1
FIRST_HUE = 0.6
OFF_LUMINANCE = 0.2
OFF_SATURATION = 1
NOTES_FONT = pygame.font.Font(font_file, 50)
LYRICS_FONT = pygame.font.Font(None, 80)
FONT_COLOR = (0,0,0)
NOTES_FONT = pygame.font.Font(font_file, 50)
LYRICS_FONT = pygame.font.Font(None, 80)
FONT_COLOR = (0,0,0)
-DEFAULT_MIDI_VELOCITY = 96
+MIDI_VELOCITY_RANGE = (64, 127)
+MIDI_PAN_RANGE = (32, 96)
SONG_FILE_PATH = _computePath('../../chansons')
SONG_FILE_PATH = _computePath('../../chansons')
from musicxml import Tone
from config import FRAMERATE
from musicxml import Tone
from config import FRAMERATE
-from config import BORDER
from config import FIRST_HUE
from config import FIRST_HUE
-from config import DEFAULT_MIDI_VELOCITY
+from config import MIDI_VELOCITY_RANGE
+from config import MIDI_PAN_RANGE
from globals import BACKGROUND_LAYER
from globals import CURSOR_LAYER
from globals import BACKGROUND_LAYER
from globals import CURSOR_LAYER
screen = pygame.display.get_surface()
# taille de la zone d'affichage utile (bordure autour)
screen = pygame.display.get_surface()
# taille de la zone d'affichage utile (bordure autour)
- self.dispWidth = dispWidth = screen.get_width() - 2 * BORDER
- self.dispHeight = dispHeight = screen.get_height() - 2 * BORDER
+ self.dispWidth = dispWidth = screen.get_width()
+ self.dispHeight = dispHeight = screen.get_height()
columnWidth = int(round(float(dispWidth) / self.keyboardLength))
rects = []
for i in range(self.keyboardLength) :
columnWidth = int(round(float(dispWidth) / self.keyboardLength))
rects = []
for i in range(self.keyboardLength) :
- upperLeftCorner = (i*columnWidth + BORDER, BORDER)
+ upperLeftCorner = (i*columnWidth, 0)
rect = pygame.Rect(upperLeftCorner, (columnWidth, dispHeight))
rects.append(rect)
rect = pygame.Rect(upperLeftCorner, (columnWidth, dispHeight))
rects.append(rect)
def raiseColOver(self, col, pos) :
evt = pygame.event.Event(events.COLOVER, column=col, pos=pos)
pygame.event.post(evt)
def raiseColOver(self, col, pos) :
evt = pygame.event.Event(events.COLOVER, column=col, pos=pos)
pygame.event.post(evt)
+
+ def getVelocity(self, pos) :
+ vel = (float(self.dispWidth) - pos[1]) / self.dispWidth
+ vel = int(vel * (MIDI_VELOCITY_RANGE[1] - MIDI_VELOCITY_RANGE[0])) + MIDI_VELOCITY_RANGE[0]
+ return vel
+
+ def getPan(self, index) :
+ pan = float(index) / (self.keyboardLength -1)
+ pan = int(pan * (MIDI_PAN_RANGE[1] - MIDI_PAN_RANGE[0])) + MIDI_PAN_RANGE[0]
+ return pan
class PlayingScreen(_PlayingScreenBase) :
class PlayingScreen(_PlayingScreenBase) :
@event_handler(events.NOTEON)
def noteon(self, evt) :
tone = evt.tone
@event_handler(events.NOTEON)
def noteon(self, evt) :
tone = evt.tone
- self.synth.noteon(0, tone.midi, DEFAULT_MIDI_VELOCITY)
+ self.synth.noteon(0, tone.midi, 96)
@event_handler(events.NOTEOFF)
def noteoff(self, evt) :
@event_handler(events.NOTEOFF)
def noteoff(self, evt) :
def handleColumnDown(self, event) :
col = event.column
if col.state:
def handleColumnDown(self, event) :
col = event.column
if col.state:
- self.synth.noteon(0, col.tone.midi, DEFAULT_MIDI_VELOCITY)
+ pan = self.getPan(col.index)
+ self.synth.cc(0, 10, pan)
+ vel = self.getVelocity(event.pos)
+ self.synth.noteon(0, col.tone.midi, vel)
self.currentNotePlayed = True
def handleColumnUp(self, event) :
self.currentNotePlayed = True
def handleColumnUp(self, event) :
def handleColumnOver(self, event) :
col = event.column
if col.state and not self.currentNotePlayed :
def handleColumnOver(self, event) :
col = event.column
if col.state and not self.currentNotePlayed :
- self.synth.noteon(0, col.tone.midi, DEFAULT_MIDI_VELOCITY)
+ pan = self.getPan(col.index)
+ self.synth.cc(0, 10, pan)
+ vel = self.getVelocity(event.pos)
+ self.synth.noteon(0, col.tone.midi, vel)
SongPlayingScreen.setNoteTimeout(
int(self.currentNote.duration * \
self.quarterNoteDuration)
SongPlayingScreen.setNoteTimeout(
int(self.currentNote.duration * \
self.quarterNoteDuration)