Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamEdit.activity/Edit/KeyboardInput.py
diff options
context:
space:
mode:
Diffstat (limited to 'TamTamEdit.activity/Edit/KeyboardInput.py')
-rw-r--r--TamTamEdit.activity/Edit/KeyboardInput.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/TamTamEdit.activity/Edit/KeyboardInput.py b/TamTamEdit.activity/Edit/KeyboardInput.py
new file mode 100644
index 0000000..d1a0d83
--- /dev/null
+++ b/TamTamEdit.activity/Edit/KeyboardInput.py
@@ -0,0 +1,97 @@
+import pygtk
+pygtk.require( '2.0' )
+import gtk
+
+from Framework import Note
+from Framework.CSound.CSoundConstants import CSoundConstants
+from Framework.Generation.GenerationConstants import GenerationConstants
+from GUI.Core.KeyMapping import KEY_MAP
+
+
+class KeyboardInput:
+ def __init__( self , getCurrentTick , getTrackInstruments , getTrackDictionary , getSelectedTrackIDs , mainWindowUpdateCallback , pagePlayerUpdateCallback , getCurrentPageIDCallback ):
+ self.active = False
+ self.record = False
+ self.monophonic = False
+ self.key_dict = dict()
+
+ self.getCurrentTick = getCurrentTick
+ self.getTrackInstruments = getTrackInstruments
+ self.getTrackDictionary = getTrackDictionary
+ self.getSelectedTrackIDs = getSelectedTrackIDs
+ self.mainWindowUpdateCallback = mainWindowUpdateCallback
+ self.pagePlayerUpdateCallback = pagePlayerUpdateCallback
+ self.getCurrentPageIDCallback = getCurrentPageIDCallback
+
+ def onKeyPress(self,widget,event):
+ if not self.active:
+ return
+ if self.record:
+ self.monophonic = False
+
+ key = event.hardware_keycode
+ # If the key is already in the dictionnary, exit function (to avoir key repeats)
+ if self.key_dict.has_key(key):
+ return
+ # Assign on which track the note will be created according to the number of keys pressed
+ track = len(self.key_dict)+10
+ if self.monophonic:
+ track = 10
+ # If the pressed key is in the keymap
+ if KEY_MAP.has_key(key):
+ # CsoundNote parameters
+ onset = self.getCurrentTick()
+ pitch = KEY_MAP[key]
+ duration = -1
+ instrument = self.getTrackInstruments()[0]
+ # get instrument from top selected track if a track is selected
+ if self.getSelectedTrackIDs():
+ instrument = self.getTrackInstruments()[min(self.getSelectedTrackIDs())]
+
+ if instrument == 'drum1kit':
+ if GenerationConstants.DRUMPITCH.has_key( pitch ):
+ instrument = CSoundConstants.DRUM1INSTRUMENTS[ GenerationConstants.DRUMPITCH[ pitch ] ]
+ else:
+ instrument = CSoundConstants.DRUM1INSTRUMENTS[ pitch ]
+ pitch = 36
+ duration = 100
+
+ if CSoundConstants.INSTRUMENTS[instrument].csoundInstrumentID == 102:
+ duration = 100
+
+ # Create and play the note
+ self.key_dict[key] = Note.note_new(onset = 0,
+ pitch = pitch,
+ amplitude = 1,
+ pan = 0.5,
+ duration = duration,
+ trackID = track,
+ fullDuration = False,
+ instrument = instrument,
+ instrumentFlag = instrument)
+ Note.note_play(self.key_dict[key])
+
+ def onKeyRelease(self,widget,event):
+ if not self.active:
+ return
+ key = event.hardware_keycode
+
+ if KEY_MAP.has_key(key):
+ self.key_dict[key]['duration'] = 0
+ self.key_dict[key]['amplitude'] = 0
+ self.key_dict[key]['dirty'] = True
+ Note.note_play(self.key_dict[key])
+ self.key_dict[key]['duration'] = self.getCurrentTick() - self.key_dict[key]['onset']
+ #print "onset",self.key_dict[key].onset
+ #print "dur",self.key_dict[key].duration
+ if self.record and len( self.getSelectedTrackIDs() ) != 0:
+ self.key_dict[key]['amplitude'] = 1
+ self.getTrackDictionary()[min(self.getSelectedTrackIDs())][self.getCurrentPageIDCallback()].append(self.key_dict[key])
+ self.mainWindowUpdateCallback()
+ self.pagePlayerUpdateCallback()
+ del self.key_dict[key]
+
+
+ def onButtonPress(self,widget,event):
+ pass
+