#Mathematica 319 259 255
Mathematica 319 259 255
Edit: Keys now depress (as buttons) when clicked.
This will play the grand piano notes {"C","C#","D","D#","E"}, where "C" is middle C. z[n_]
plays the note.
z@n_ := EmitSound@Sound[SoundNote[n, .3, 1]]; w = {10, 300}; b = {35, 180};
Graphics[Inset[Button["", z[#[[1]]], Background -> If[#[[2]] == w, None, Black],
ImageSize -> #〚2〛], #〚3〛] & /@ {{"C", w, {-.4, 0}}, {"D", w, {0, 0}}, {"E", w, {.4, 0}},
{"C#", b, {-.2, 0.31}}, {"D#", b, {.2, 0.31}}}, PlotRange -> 1]
The keyboard can be extended to 18-keys by using fewer than double the characters:
z@n_ := EmitSound@Sound@SoundNote[n, .3, 1];
w = {"C", "D", "E", "F", "G", "A", "B", "C5", "D5", "E5", "F5"};
b = {"C#", "D#", "", "F#", "G#", "A#", "", "C#5", "D#5"}; i = ImageSize; t = Thread;
l = List; s = Inset; m = Table; u = Button;
Graphics[Join[t[s[u @@@ t[l["", y /@ w, i -> {5, 350}]] /. y -> z, m[{90 k, 0}, {k, -5, 5}]]],
Delete[t[s[u @@@ t[l["", y /@ b, Background -> Black, i -> {28, 212}]] /.
y -> z, m[{90 k + 45, 220}, {k, -5, 3}]]], {{3}, {7}}]],
AspectRatio -> .45, PlotRange -> {{-500, 500}, {-610, 610}}, i -> {800, 430}]