From 80160cd8b6eff9d36419d5be78b4098128f33ad1 Mon Sep 17 00:00:00 2001 From: Gonzalo Odiard Date: Tue, 09 Oct 2012 03:29:34 +0000 Subject: Use the keyboard in the screen to play sounds Signed-off-by: Gonzalo Odiard --- diff --git a/KeyboardStandAlone.py b/KeyboardStandAlone.py index 6a8272a..d661808 100644 --- a/KeyboardStandAlone.py +++ b/KeyboardStandAlone.py @@ -33,8 +33,11 @@ class KeyboardStandAlone: def setReverb(self , reverb): self.reverb = reverb - def onKeyPress(self,widget,event, volume): + def onKeyPress(self, widget, event, volume): key = event.hardware_keycode + self.do_key_press(key, event.state, volume) + + def do_key_press(self, key, state, volume): if key == 50 or key == 62: #Left Shift self.loopSustain = True @@ -100,7 +103,7 @@ class KeyboardStandAlone: playkey(36,100, self.instrumentDB.instNamed[instrumentName].kit[pitch]) else: - if event.state == Gdk.ModifierType.MOD1_MASK: + if state == Gdk.ModifierType.MOD1_MASK: pitch += 5 instrument = self.instrumentDB.instNamed[ instrumentName ] @@ -110,8 +113,11 @@ class KeyboardStandAlone: playkey( pitch, -1, instrument) - def onKeyRelease(self,widget,event): + def onKeyRelease(self, widget, event): key = event.hardware_keycode + self.do_key_release(key) + + def do_key_release(self, key): if key == 50 or key == 62: self.loopSustain = False diff --git a/activity.py b/activity.py index c140112..dc5b90f 100644 --- a/activity.py +++ b/activity.py @@ -82,7 +82,7 @@ class SimplePianoActivity(activity.Activity): self.set_toolbar_box(toolbar_box) toolbar_box.show_all() - self.keyboard_letters = ['Q2W3ER5T6Y7UI', 'ZSXDCVGBHNJM', ','] + self.keyboard_letters = ['ZSXDCVGBHNJM', 'Q2W3ER5T6Y7U', 'I'] notes = ['DO', 'DO#', 'RE', 'RE#', 'MI', 'FA', 'FA#', 'SOL', 'SOL#', 'LA', 'LA#', 'SI'] @@ -170,23 +170,17 @@ class SimplePianoActivity(activity.Activity): #self._recordToolbar.keyboardRecOverButton.set_sensitive( state ) def __key_pressed_cb(self, widget, octave_clicked, key_clicked, letter): - logging.debug('Pressed Octave: %d Key: %d Letter: %s' % + logging.error('Pressed Octave: %d Key: %d Letter: %s' % (octave_clicked, key_clicked, letter)) - - if key_clicked >= 9: - key = key_clicked - 9 - octave = octave_clicked + 1 - else: - key = key_clicked + 3 - octave = octave_clicked - freq = 440 * math.pow(2.0, octave + (key - 12.0) / 12.0) - logging.debug('Vales Octave: %d Key: %d Freq: %s' % (octave, key, - freq)) - self.tone_generator.set_values(freq, 1) - self.tone_generator.start() + if letter in Config.LETTERS_MAP_PIANO.keys(): + self.keyboardStandAlone.do_key_press( + Config.LETTERS_MAP_PIANO[letter], None, + math.sqrt(self.instVolume * 0.01)) def __key_released_cb(self, widget, octave_clicked, key_clicked, letter): - self.tone_generator.stop() + if letter in Config.LETTERS_MAP_PIANO.keys(): + self.keyboardStandAlone.do_key_release( + Config.LETTERS_MAP_PIANO[letter]) def onKeyPress(self, widget, event): diff --git a/common/Config.py b/common/Config.py index 7fa0ae5..cdb1a86 100644 --- a/common/Config.py +++ b/common/Config.py @@ -305,6 +305,38 @@ KEY_MAP_PIANO = {24: 36, # Q 58: 35, # M 59: 36} # , +LETTERS_MAP_PIANO = {'Q': 24, # Q + 'W': 25, # W + 'E': 26, # E + 'R': 27, # R + 'T': 28, # T + 'Y': 29, # Y + 'U': 30, # U + 'I': 31, # I + + '2': 11, # 2 + '3': 12, # 3 + '5': 14, # 5 + '6': 15, # 6 + '7': 16, # 7 + + 'S': 39, # S + 'D': 40, # D + 'G': 42, # G + 'H': 43, # H + 'J': 44, # J + 'L': 46, # L + + 'Z': 52, # Z + 'X': 53, # X + 'C': 54, # C + 'V': 55, # V + 'B': 56, # B + 'N': 57, # N + 'M': 58, # M + ',': 59} # , + + KEY_MAP_NOTPIANO = {24: 24, # Q 25: 25, # W 26: 26, # E diff --git a/draw_piano.py b/draw_piano.py index 36f2a47..b5f6954 100755 --- a/draw_piano.py +++ b/draw_piano.py @@ -110,18 +110,18 @@ class PianoKeyboard(Gtk.DrawingArea): for pressed_key in new_pressed_keys: if pressed_key not in self._pressed_keys: - octave_pressed = pressed_key[:pressed_key.find('_')] - key_pressed = pressed_key[pressed_key.find('_') + 1:] - self.emit('key_pressed', int(octave_pressed), int(key_pressed), + octave_pressed = int(pressed_key[:pressed_key.find('_')]) + key_pressed = int(pressed_key[pressed_key.find('_') + 1:]) + self.emit('key_pressed', octave_pressed, key_pressed, self.get_label(octave_pressed, key_pressed)) else: del self._pressed_keys[self._pressed_keys.index(pressed_key)] # the remaining keys were released for key in self._pressed_keys: - octave_released = key[:key.find('_')] - key_released = key[key.find('_') + 1:] - self.emit('key_released', int(octave_released), int(key_released), + octave_released = int(key[:key.find('_')]) + key_released = int(key[key.find('_') + 1:]) + self.emit('key_released', octave_released, key_released, self.get_label(octave_released, key_released)) self._pressed_keys = new_pressed_keys -- cgit v0.9.1