snakeware

Python-based Linux distro for x86-64 and RPi
git clone git://squid-tech.com/snakeware.git
Log | Files | Refs | README

commit 2decc76eb514c80a98251b1215d08c26f69f8c0b
parent 36ee8e3caefb455a6fa1cb67bec188a3a51564ee
Author: Josh Moore <jxm5210@g.rit.edu>
Date:   Thu, 11 Jun 2020 17:14:30 -0400

Merge pull request #111 from mdoege/piano2

Add sustain, octave shift, and volume control
Diffstat:
Msnakewm/apps/fun/piano/README.md | 8++++++--
Msnakewm/apps/fun/piano/img/piano.png | 0
Msnakewm/apps/fun/piano/piano.py | 197++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
Msnakewm/apps/fun/piano/snd/piano_00.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_01.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_02.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_03.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_04.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_05.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_06.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_07.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_08.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_09.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_10.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_11.ogg | 0
Msnakewm/apps/fun/piano/snd/piano_12.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_00.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_01.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_02.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_03.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_04.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_05.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_06.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_07.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_08.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_09.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_10.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_11.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_12.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_00.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_01.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_02.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_03.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_04.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_05.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_06.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_07.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_08.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_09.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_10.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_11.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_high_sustain_12.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_00.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_01.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_02.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_03.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_04.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_05.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_06.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_07.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_08.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_09.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_10.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_11.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_12.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_00.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_01.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_02.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_03.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_04.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_05.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_06.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_07.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_08.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_09.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_10.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_11.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_low_sustain_12.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_00.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_01.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_02.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_03.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_04.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_05.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_06.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_07.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_08.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_09.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_10.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_11.ogg | 0
Asnakewm/apps/fun/piano/snd/piano_sustain_12.ogg | 0
81 files changed, 167 insertions(+), 38 deletions(-)

diff --git a/snakewm/apps/fun/piano/README.md b/snakewm/apps/fun/piano/README.md @@ -1,8 +1,12 @@ # Piano -Piano is combination of a toy piano which you can play with your mouse or keyboard and a Hasbro Simon/Atari Touch Me game in which you have to repeat a sequence of notes the computer plays. +Piano is combination of a toy piano which you can play with your mouse or keyboard and a Hasbtro Simon/Atari Touch Me game in which you have to repeat a sequence of notes the computer plays. -The keys on the keyboard's home row (S to L) play the white keys, the black keys are on E, R, Y/Z, U, I. (So this should work with QWERTY, QWERTZ, and AZERTY keyboard layouts.) The C major chord keys needed for Simon mode can also be played with the 1, 2, 3, 4 and cursor keys. +The keys on the keyboard's home row (S to L) play the white keys, the black keys are on E, R, Y/Z, U, I. (So this should work with QWERTY, QWERTZ, and AZERTY keyboard layouts.) The C mjaor chord keys needed for Simon mode can also be played with the 1, 2, 3, 4 and cursor keys. + +Volume can be adjusted with the V and B keys, the octave can be changed with N and M. C toggles sustain mode. + +Press Space to stop all sounds. If you click a key with the mouse, move the mouse away and release the button, you can create a note that plays permanently. There is no way to really win or lose in Simon mode, your score in the title bar simply keeps increasing if you get a sequence right. If you want to generate a different melody, just switch to piano mode and back again. diff --git a/snakewm/apps/fun/piano/img/piano.png b/snakewm/apps/fun/piano/img/piano.png Binary files differ. diff --git a/snakewm/apps/fun/piano/piano.py b/snakewm/apps/fun/piano/piano.py @@ -21,10 +21,13 @@ LW = 10 # outline width BKW = 22 # black key width BKH = 200 # black key height H = 350 # white key height +XADJ, YADJ = 16, 40 # shift needed due to window decoration when interpreting mouse position bkeys = {1: 1, 2: 3, 4: 6, 5: 8, 6: 10} wkeys = {0: 0, 1: 2, 2: 4, 3: 5, 4: 7, 5: 9, 6: 11, 7: 12} RECT_NORMAL = pygame.Rect((236, 432, 130, 55)) # button rects RECT_SIMON = pygame.Rect((400, 432, 150, 55)) +RECT_VOL = pygame.Rect((25, 432, 200, 22)) +RECT_OCT = pygame.Rect((570, 432, 210, 22)) NOTELEN = 0.6 SIMONCOL = ( RED, @@ -57,13 +60,15 @@ class Piano(pygame_gui.elements.UIWindow): parent_element=self, ) pygame.mixer.init() + self.path = os.path.dirname(os.path.abspath(__file__)) + self.volume = 5 + self.octave = 1 + self.sust = True + self.load_inst() + self.setvol() self.win = pygame.Surface(self.res) - self.audio = {} - path = os.path.dirname(os.path.abspath(__file__)) - for n in range(13): - self.audio[n] = pygame.mixer.Sound(path + "/snd/piano_%02u.ogg" % n) - self.audio["buzz"] = pygame.mixer.Sound(path + "/snd/buzz.ogg") - self.overlay = pygame.image.load(path + "/img/piano.png") + self.overlay = pygame.image.load(self.path + "/img/piano.png") + self.keys = 13 * [False] self.playnote = None self.playtime = 0 self.simon = False @@ -74,6 +79,30 @@ class Piano(pygame_gui.elements.UIWindow): self.lastplayed = -1 self.userseq = [] + def load_inst(self): + "Load instrument samples" + self.audio, self.sustain = {}, {} + if self.octave == 0: + o = "_low" + elif self.octave == 2: + o = "_high" + else: + o = "" + for n in range(13): + self.audio[n] = pygame.mixer.Sound(self.path + "/snd/piano%s_%02u.ogg" % (o, n)) + self.sustain[n] = pygame.mixer.Sound(self.path + "/snd/piano%s_sustain_%02u.ogg" % (o, n)) + self.audio["buzz"] = pygame.mixer.Sound(self.path + "/snd/buzz.ogg") + + def setvol(self): + "Set volume for all loaded sounds" + for n in range(13): + self.audio[n].set_volume(self.volume / 10) + self.sustain[n].set_volume(self.volume / 10) + + def setoct(self): + "Change octave" + self.load_inst() + def process_event(self, event): super().process_event(event) r = super().get_abs_rect() @@ -81,11 +110,17 @@ class Piano(pygame_gui.elements.UIWindow): self.running = False if event.type == pygame.MOUSEBUTTONDOWN: x, y = pygame.mouse.get_pos() - x -= r[0] + 16 - y -= r[1] + 40 + x -= r[0] + XADJ + y -= r[1] + YADJ p = self.pos2key(x, y) if p != None: self.play(p) + if RECT_VOL.collidepoint(x, y): + self.volume = int(1 + 10 * (x - RECT_VOL.left) / RECT_VOL.width) + self.setvol() + if RECT_OCT.collidepoint(x, y): + self.octave = int(3 * (x - RECT_OCT.left) / RECT_VOL.width) + self.setoct() if RECT_NORMAL.collidepoint(x, y) and self.simon: self.simon = False super().set_display_title("piano") @@ -96,7 +131,43 @@ class Piano(pygame_gui.elements.UIWindow): self.simonplay = True self.simonstart = time.time() super().set_display_title("simon") + + if event.type == pygame.MOUSEBUTTONUP: + x, y = pygame.mouse.get_pos() + x -= r[0] + XADJ + y -= r[1] + YADJ + p = self.pos2key(x,y) + if p != None: + self.stop(p) + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_SPACE: + self.stopall() + + if event.key == pygame.K_c: + self.sust = not self.sust + + # volume + if event.key == pygame.K_b: + if self.volume < 10: + self.volume += 1 + self.setvol() + if event.key == pygame.K_v: + if self.volume > 1: + self.volume -= 1 + self.setvol() + + # octave + if event.key == pygame.K_m: + if self.octave < 2: + self.octave += 1 + self.setoct() + if event.key == pygame.K_n: + if self.octave > 0: + self.octave -= 1 + self.setoct() + + # piano key press if ( event.key == pygame.K_s or event.key == pygame.K_1 @@ -143,39 +214,76 @@ class Piano(pygame_gui.elements.UIWindow): if event.key == pygame.K_i: self.play(10) - def play(self, k, user=True): + # piano key release + if event.type == pygame.KEYUP: + if event.key == pygame.K_s or event.key == pygame.K_1 or event.key == pygame.K_LEFT: + self.stop(0) + if event.key == pygame.K_d: + self.stop(2) + if event.key == pygame.K_f or event.key == pygame.K_2 or event.key == pygame.K_DOWN: + self.stop(4) + if event.key == pygame.K_g: + self.stop(5) + if event.key == pygame.K_h or event.key == pygame.K_3 or event.key == pygame.K_RIGHT: + self.stop(7) + if event.key == pygame.K_j: + self.stop(9) + if event.key == pygame.K_k: + self.stop(11) + if event.key == pygame.K_l or event.key == pygame.K_4 or event.key == pygame.K_UP: + self.stop(12) + + if event.key == pygame.K_e: + self.stop(1) + if event.key == pygame.K_r: + self.stop(3) + if event.key == pygame.K_y or event.key == pygame.K_z: # QWERTY/QWERTZ layout + self.stop(6) + if event.key == pygame.K_u: + self.stop(8) + if event.key == pygame.K_i: + self.stop(10) + + def play(self, k, user = True): "Play a note" self.audio[k].play() - self.playnote = k - self.playtime = time.time() + if user and self.sust: + self.sustain[k].play(loops = -1) + self.keys[k] = True + + def stop(self, k, user = True): + "Stop playing a note" + self.audio[k].stop() + self.sustain[k].stop() + self.keys[k] = False + + # check if user melody matches Simon's if self.simon and user == True: self.userseq.append(k) - if self.userseq == self.simonseq[: self.simonlen]: + if self.userseq == self.simonseq[:self.simonlen]: print(self.simonlen, "CORRECT!") self.update(NOTELEN) time.sleep(NOTELEN) - self.playnote = None - self.update(NOTELEN) - time.sleep(NOTELEN) if self.simonlen < len(self.simonseq): self.simonlen += 1 self.simonplay = True self.simonstart = time.time() - super().set_display_title( - "simon (%u notes correct)" % (self.simonlen - 1) - ) - if ( - self.userseq - and self.userseq[-1] != self.simonseq[len(self.userseq) - 1] - ): + super().set_display_title('Simon (%u notes correct)' % (self.simonlen - 1)) + if self.userseq and self.userseq[-1] != self.simonseq[len(self.userseq) - 1]: print("WRONG!") - time.sleep(NOTELEN) self.audio["buzz"].play() - time.sleep(0.8) + self.update(NOTELEN) + time.sleep(1.5) self.simonplay = True self.simonstart = time.time() self.userseq = [] + def stopall(self): + "Stop all notes" + for k in range(13): + self.sustain[k].stop() + self.keys[k] = False + def draw_wkey(self, k, c): "Draw white key" pygame.draw.rect(self.win, BLACK, (100 * k, 0, 100, H)) @@ -186,7 +294,7 @@ class Piano(pygame_gui.elements.UIWindow): pygame.draw.rect(self.win, c, (100 * k - BKW, 0, 2 * BKW, BKH)) def pos2key(self, x, y): - "Get key num from mouse click position" + "Get key number from mouse click position" for k in 1, 2, 4, 5, 6: if y < BKH and (100 * k - BKW < x < 100 * k + BKW): return bkeys[k] @@ -196,7 +304,11 @@ class Piano(pygame_gui.elements.UIWindow): def update(self, delta): super().update(delta) + # Simon plays its melody if self.simon and self.simonplay: + f = ((time.time() - self.simonstart) / NOTELEN) % 1 + if f > 0.8: + self.keys = 13 * [False] n = int((time.time() - self.simonstart) / NOTELEN) if n >= self.simonlen: self.simonplay = False @@ -204,19 +316,16 @@ class Piano(pygame_gui.elements.UIWindow): self.lastplayed = -1 self.userseq = [] elif n > self.lastplayed: - self.play(self.simonseq[n], user=False) + self.stopall() + self.play(self.simonseq[n], user = False) self.lastplayed = n + + # draw keyboard self.win.fill(BACKGROUND) - if not self.simon: - if time.time() - self.playtime > 0.2: - self.playnote = None - else: - if time.time() - self.playtime > 0.85 * NOTELEN: - self.playnote = None for k in range(8): c = WHITE for x in wkeys.keys(): - if x == k and wkeys[x] == self.playnote: + if x == k and self.keys[wkeys[x]]: if self.simon: c = SIMONCOL[k] else: @@ -225,16 +334,32 @@ class Piano(pygame_gui.elements.UIWindow): for k in 1, 2, 4, 5, 6: c = BLACK for x in bkeys.keys(): - if x == k and bkeys[x] == self.playnote: + if x == k and self.keys[bkeys[x]]: c = ORANGE self.draw_bkey(k, c) - pygame.draw.rect(self.win, GRAY, RECT_NORMAL) - pygame.draw.rect(self.win, GRAY, RECT_SIMON) + # draw buttons if not self.simon: pygame.draw.rect(self.win, ORANGE, RECT_NORMAL, 3) else: pygame.draw.rect(self.win, ORANGE, RECT_SIMON, 3) + + # draw volume indicator + for i in range(1, 11): + if self.volume >= i: + c = ORANGE + else: + c = GRAY + pygame.draw.rect(self.win, c, (20*i+5, 432, 18, 22)) + + # draw octave indicator + for i in 0, 1, 2: + if self.octave == i: + c = ORANGE + else: + c = GRAY + pygame.draw.rect(self.win, c, (70*i+570, 432, 65, 22)) + self.win.blit(self.overlay, (0, 0)) self.dsurf.image.blit(self.win, (0, 0)) diff --git a/snakewm/apps/fun/piano/snd/piano_00.ogg b/snakewm/apps/fun/piano/snd/piano_00.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_01.ogg b/snakewm/apps/fun/piano/snd/piano_01.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_02.ogg b/snakewm/apps/fun/piano/snd/piano_02.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_03.ogg b/snakewm/apps/fun/piano/snd/piano_03.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_04.ogg b/snakewm/apps/fun/piano/snd/piano_04.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_05.ogg b/snakewm/apps/fun/piano/snd/piano_05.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_06.ogg b/snakewm/apps/fun/piano/snd/piano_06.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_07.ogg b/snakewm/apps/fun/piano/snd/piano_07.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_08.ogg b/snakewm/apps/fun/piano/snd/piano_08.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_09.ogg b/snakewm/apps/fun/piano/snd/piano_09.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_10.ogg b/snakewm/apps/fun/piano/snd/piano_10.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_11.ogg b/snakewm/apps/fun/piano/snd/piano_11.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_12.ogg b/snakewm/apps/fun/piano/snd/piano_12.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_00.ogg b/snakewm/apps/fun/piano/snd/piano_high_00.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_01.ogg b/snakewm/apps/fun/piano/snd/piano_high_01.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_02.ogg b/snakewm/apps/fun/piano/snd/piano_high_02.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_03.ogg b/snakewm/apps/fun/piano/snd/piano_high_03.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_04.ogg b/snakewm/apps/fun/piano/snd/piano_high_04.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_05.ogg b/snakewm/apps/fun/piano/snd/piano_high_05.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_06.ogg b/snakewm/apps/fun/piano/snd/piano_high_06.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_07.ogg b/snakewm/apps/fun/piano/snd/piano_high_07.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_08.ogg b/snakewm/apps/fun/piano/snd/piano_high_08.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_09.ogg b/snakewm/apps/fun/piano/snd/piano_high_09.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_10.ogg b/snakewm/apps/fun/piano/snd/piano_high_10.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_11.ogg b/snakewm/apps/fun/piano/snd/piano_high_11.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_12.ogg b/snakewm/apps/fun/piano/snd/piano_high_12.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_00.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_00.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_01.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_01.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_02.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_02.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_03.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_03.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_04.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_04.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_05.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_05.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_06.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_06.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_07.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_07.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_08.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_08.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_09.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_09.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_10.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_10.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_11.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_11.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_high_sustain_12.ogg b/snakewm/apps/fun/piano/snd/piano_high_sustain_12.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_00.ogg b/snakewm/apps/fun/piano/snd/piano_low_00.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_01.ogg b/snakewm/apps/fun/piano/snd/piano_low_01.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_02.ogg b/snakewm/apps/fun/piano/snd/piano_low_02.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_03.ogg b/snakewm/apps/fun/piano/snd/piano_low_03.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_04.ogg b/snakewm/apps/fun/piano/snd/piano_low_04.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_05.ogg b/snakewm/apps/fun/piano/snd/piano_low_05.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_06.ogg b/snakewm/apps/fun/piano/snd/piano_low_06.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_07.ogg b/snakewm/apps/fun/piano/snd/piano_low_07.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_08.ogg b/snakewm/apps/fun/piano/snd/piano_low_08.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_09.ogg b/snakewm/apps/fun/piano/snd/piano_low_09.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_10.ogg b/snakewm/apps/fun/piano/snd/piano_low_10.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_11.ogg b/snakewm/apps/fun/piano/snd/piano_low_11.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_12.ogg b/snakewm/apps/fun/piano/snd/piano_low_12.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_00.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_00.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_01.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_01.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_02.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_02.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_03.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_03.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_04.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_04.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_05.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_05.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_06.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_06.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_07.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_07.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_08.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_08.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_09.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_09.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_10.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_10.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_11.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_11.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_low_sustain_12.ogg b/snakewm/apps/fun/piano/snd/piano_low_sustain_12.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_00.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_00.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_01.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_01.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_02.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_02.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_03.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_03.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_04.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_04.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_05.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_05.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_06.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_06.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_07.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_07.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_08.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_08.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_09.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_09.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_10.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_10.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_11.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_11.ogg Binary files differ. diff --git a/snakewm/apps/fun/piano/snd/piano_sustain_12.ogg b/snakewm/apps/fun/piano/snd/piano_sustain_12.ogg Binary files differ.