Forum Archive

more notes in piano

PKHG

Hi,
I like to play with the piano.py ==> it shows C3 until and including C4.
On Github there ar C4# until A4 (and two more?!) ... to be found.
How to make them available on Ipad for the piano.py script?

And how to find out where the existing ones live (with stash e.g.)?

omz

You can find the list of included sounds with the [+] button in the editor.

PKHG

OK, found, already available ;-), Thanks.

PeterG
#! python2
# Piano
# 
# A simple multi-touch piano.

from scene import *
import sound
from itertools import chain

class Key (object):
    def __init__(self, frame):
        self.frame = frame
        self.name = None
        self.touch = None
        self.color = Color(1, 1, 1)
        self.highlight_color = Color(0.9, 0.9, 0.9)

    def hit_test(self, touch):
        return touch.location in self.frame

class Piano (Scene):
    def setup(self):
        self.white_keys = []
        self.black_keys = []
        white_key_names = ['Piano_C3','Piano_D3', 'Piano_E3',
                           'Piano_F3', 'Piano_G3', 'Piano_A3', 
                           'Piano_B3', 'Piano_C4', 'Piano_D4',
                           'Piano_E4', 'Piano_F4', 'Piano_G4']
        #white_key_names_nogniiet = #['Piano_02','Piano_D2','Piano_E2','Piano_F2','Piano_G2','Piano_A2','Piano_B2','Piano_C3']
        black_key_names = ['Piano_C3#', 'Piano_D3#', 'Piano_F3#', 
                           'Piano_G3#', 'Piano_A3#', 'piano:C4#',
                           'Piano_D4#', 'Piano_F4#']
        for key_name in chain(white_key_names, black_key_names):
            sound.load_effect(key_name)
        white_positions = range(12)
        black_positions = [0.5, 1.5, 3.5, 4.5, 5.5, 7.5, 8.5, 10.5]
        key_w = self.size.w / 2# pkhg factor 0.5 
        key_h = self.size.h / 8 /2
        for i in range(len(white_key_names)):
            pos = white_positions[i]
            key = Key(Rect(0, pos * key_h, key_w, key_h))
            key.name = white_key_names[i]
            self.white_keys.append(key)
        for i in range(len(black_key_names)):
            pos = black_positions[i]
            key = Key(Rect(0, pos * key_h + 10, key_w * 0.6, key_h - 20))
            key.name = black_key_names[i]
            key.color = Color(0, 0, 0)
            key.highlight_color = Color(0.2, 0.2, 0.2)
            self.black_keys.append(key)

    def draw(self):
        stroke_weight(1)
        stroke(0.5, 0.5, 0.5)
        for key in chain(self.white_keys, self.black_keys):
            if key.touch is not None:
                fill(*key.highlight_color.as_tuple())
            else:
                fill(*key.color.as_tuple())
            rect(*key.frame.as_tuple())

    def touch_began(self, touch):
        for key in chain(self.black_keys, self.white_keys):
            if key.hit_test(touch):
                key.touch = touch
                sound.play_effect(key.name)
                return

    def touch_moved(self, touch):
        hit_key = None
        for key in chain(self.black_keys, self.white_keys):
            hit = key.hit_test(touch)
            if hit and hit_key is None:
                hit_key = key
                if key.touch is None:
                    key.touch = touch
                    sound.play_effect(key.name)
            if key.touch == touch and key is not hit_key:
                key.touch = None

    def touch_ended(self, touch):
        for key in chain(self.black_keys, self.white_keys):
            if key.touch == touch:
                key.touch = None

run(Piano(), PORTRAIT)

Append the Piano till G4