Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2012-10-09 03:29:34 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2012-10-09 03:29:34 (GMT)
commit80160cd8b6eff9d36419d5be78b4098128f33ad1 (patch)
tree1048d3a5bd64ab937d7ea766257bcb18086b78ed
parent70f861a21b026057b5642ca9c7c9b125acf62be8 (diff)
Use the keyboard in the screen to play sounds
Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r--KeyboardStandAlone.py12
-rw-r--r--activity.py24
-rw-r--r--common/Config.py32
-rwxr-xr-xdraw_piano.py12
4 files changed, 56 insertions, 24 deletions
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