Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os, curses, pygame, traceback
- from pygame.locals import *
- class Key:
- def __init__(self, y, x, screen, keytype, label):
- self.screen = screen
- self.y = y
- self.x = x
- self.keytype = keytype
- self.label = label
- self.draw(0)
- def draw(self, pressed):
- if pressed == 0:
- key = " "
- fill = curses.A_STANDOUT
- else:
- key = "="
- fill = curses.A_NORMAL
- for row in range(10):
- if self.keytype in ["r", "a"]: self.screen.addch(self.y+row, self.x, key, fill)
- self.screen.addch(self.y+row, self.x+1, key, fill)
- if self.keytype in ["l", "a"]: self.screen.addch(self.y+row, self.x+2, key, fill)
- if row > 5:
- if self.keytype in ["l", "a", "m"]: self.screen.addch(self.y+row, self.x, key, fill)
- self.screen.addch(self.y+row, self.x+1, key, fill)
- if self.keytype in ["r", "a", "m"]: self.screen.addch(self.y+row, self.x+2, key, fill)
- if pressed == 0: self.screen.addch(self.y+8, self.x+1, self.label, curses.A_NORMAL)
- else: self.screen.addch(self.y+8, self.x+1, self.label, curses.A_NORMAL)
- if __name__ == '__main__':
- try:
- stdscr=curses.initscr()
- curses.noecho()
- curses.cbreak()
- curses.curs_set(0)
- stdscr.keypad(1)
- pygame.init()
- pygame.mixer.init()
- # rows, cols = stdscr.getmaxyx()
- screen = stdscr.subwin(11, 156, 0, 0)
- screen.nodelay(1)
- piano = [("r", "A0", "`"), ("l", "B0", " "), ("r", "C1", "1"), ("m", "D1", "q"), ("l", "E1", "a"), ("r", "F1", "z"), ("m", "G1", "2"), ("m", "A1", "w"),
- ("l", "B1", "s"), ("r", "C2", "x"), ("m", "D2", "3"), ("l", "E2", "e"), ("r", "F2", "d"), ("m", "G2", "c"), ("m", "A2", "4"), ("l", "B2", "r"), ("r", "C3", "f"),
- ("m", "D3", "v"), ("l", "E3", "5"), ("r", "F3", "t"), ("m", "G3", "g"), ("m", "A3", "b"), ("l", "B3", " "), ("r", "C4", "5"), ("m", "D4", "t"), ("l", "E4", "g"),
- ("r", "F4", "b"), ("m", "G4", "6"), ("m", "A4", "y"), ("l", "B4", "h"), ("r", "C5", "n"), ("m", "D5", "7"), ("l", "E5", "u"), ("r", "F5", "j"), ("m", "G5", "m"),
- ("m", "A5", "8"), ("l", "B5", "i"), ("r", "C6", "k"), ("m", "D6", ","), ("l", "E6", "9"), ("r", "F6", "o"), ("m", "G6", "l"), ("m", "A6", "."), ("l", "B6", "0"),
- ("r", "C7", "p"), ("m", "D7", ";"), ("l", "E7", "/"), ("r", "F7", "-"), ("m", "G7", "["), ("m", "A7", "'"), ("l", "B7", "="), ("a", "C8", "]")]
- x = 0
- y = 0
- keys = []
- keydir = os.getcwd() + '/Keys/'
- keyfiles = os.listdir(keydir)
- keymap = {}
- for ktype, key, label in piano:
- keys.append((Key(y, x, screen, ktype, label)))
- if key+".wav" in keyfiles:
- keymap[ord(label)] = [pygame.mixer.Sound(keydir+key+".wav"), keys[-1]]
- x += 3
- derpnum = 0
- #keydir = os.getcwd() + '/Keys/'
- #for subdir, dirs, files in os.walk(keydir):
- #for file in files:
- #keyfiles.append(file)
- #keyfiles.sort()
- #for type, key in piano:
- #try:
- #keydict[keys[derpnum]] = [pygame.mixer.Sound(keydir + file), file.replace('.wav', '')]
- #derpnum += 1
- #except:
- #pass
- #hurr = 0
- lastkey = 100
- while 1:
- c = screen.getch()
- if c != -1:
- #hurr += 1
- if keymap.has_key(c):
- #screen.erase()
- keymap[lastkey][1].draw(0)
- keymap[c][1].draw(1)
- screen.refresh()
- keymap[c][0].play()
- lastkey = c
- #screen.addstr(0, 0, keydict[c][1])
- except:
- stdscr.keypad(0)
- curses.echo()
- curses.nocbreak()
- curses.endwin()
- traceback.print_exc()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement