From cab0e98d29b3b91e1a1f1d39c31866f55e351fff Mon Sep 17 00:00:00 2001 From: Robert Kaiser Date: Sat, 30 Mar 2013 21:28:44 +0100 Subject: [PATCH] add initial version of MaKey MaKey piano --- .gitignore | 0 LICENSE | 5 ++ README | 14 +++++ index.html | 77 +++++++++++++++++++++++++++ js/piano.js | 81 +++++++++++++++++++++++++++++ manifest.appcache | 21 ++++++++ manifest.webapp | 17 ++++++ sound/piano_a1.opus | Bin 0 -> 5701 bytes sound/piano_b1.opus | Bin 0 -> 5855 bytes sound/piano_c1.opus | Bin 0 -> 5251 bytes sound/piano_c2.opus | Bin 0 -> 5968 bytes sound/piano_d1.opus | Bin 0 -> 5330 bytes sound/piano_e1.opus | Bin 0 -> 5332 bytes sound/piano_f1.opus | Bin 0 -> 5690 bytes sound/piano_g1.opus | Bin 0 -> 5351 bytes style/piano.css | 123 ++++++++++++++++++++++++++++++++++++++++++++ 16 files changed, 338 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README create mode 100644 index.html create mode 100644 js/piano.js create mode 100644 manifest.appcache create mode 100644 manifest.webapp create mode 100644 sound/piano_a1.opus create mode 100644 sound/piano_b1.opus create mode 100644 sound/piano_c1.opus create mode 100644 sound/piano_c2.opus create mode 100644 sound/piano_d1.opus create mode 100644 sound/piano_e1.opus create mode 100644 sound/piano_f1.opus create mode 100644 sound/piano_g1.opus create mode 100644 style/piano.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..802ba10 --- /dev/null +++ b/LICENSE @@ -0,0 +1,5 @@ +This project is subject to the terms of the Mozilla Public License, v. 2.0 +(MPL2). +MPL2 applies per file so there is a license boilerplate in every file pointing +to the license. +See http://mozilla.org/MPL/2.0/. \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..74ca343 --- /dev/null +++ b/README @@ -0,0 +1,14 @@ +This web app is mainly targeted at people playing with a MaKeyMaKey - +see http://makeymakey.com/ - and maps certain keys to piano sounds. + +The keys space, left, up, right, down, w, a, s are mapped to C major pitches. + + +This app is running on http://piano.kairo.at/ + + +The main repo is http://git-public.kairo.at/?p=makeypiano.git;a=summary but +it's listed on GitHub at https://github.com/KaiRo-at/makeypiano for convenience +for potential contributors. See the TODO for tasks that you can help with. + +Please don't use GitHub for issue tracking but http://bugzilla.kairo.at/ diff --git a/index.html b/index.html new file mode 100644 index 0000000..054137c --- /dev/null +++ b/index.html @@ -0,0 +1,77 @@ + + + + + + + + + MaKey MaKey Piano + + + + + +

MaKey MaKey Piano

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CDEFGABC
+ + +
+

Connect a MaKey MaKey to Bananas or +whatever you like, keys will match C major pitches as follows:

+ + + + + + + + + + + +
KeyPitch
SpaceC'
RightD'
UpE'
LeftF'
DownG'
WA'
AB'
SC''
+
+
+ + + \ No newline at end of file diff --git a/js/piano.js b/js/piano.js new file mode 100644 index 0000000..8066d1c --- /dev/null +++ b/js/piano.js @@ -0,0 +1,81 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var gSounds = {}; + +window.onload = function() { + // Create objects, makes sure that all the audio gets loaded. + gSounds.c1 = new Audio("sound/piano_c1.opus"); + gSounds.d1 = new Audio("sound/piano_d1.opus"); + gSounds.e1 = new Audio("sound/piano_e1.opus"); + gSounds.f1 = new Audio("sound/piano_f1.opus"); + gSounds.g1 = new Audio("sound/piano_g1.opus"); + gSounds.a1 = new Audio("sound/piano_a1.opus"); + gSounds.b1 = new Audio("sound/piano_b1.opus"); + gSounds.c2 = new Audio("sound/piano_c2.opus"); + + document.getElementById("body").addEventListener("keydown", eventHandler, false); +} + +var eventHandler = { + handleEvent: function(aEvent) { + switch (aEvent.type) { + case "keydown": + // Should use aEvent.key instead of aEvent.which but needs bug 680830. + // See https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/keydown + switch (aEvent.which) { + case 32: // space + gPitches.play("c1"); + break; + case 39: // right + gPitches.play("d1"); + break; + case 38: // up + gPitches.play("e1"); + break; + case 37: // left + gPitches.play("f1"); + break; + case 40: // down + gPitches.play("g1"); + break; + case 87: // w + gPitches.play("a1"); + break; + case 65: // a + gPitches.play("b1"); + break; + case 83: // s + gPitches.play("c2"); + break; + default: // not supported + console.log("key not supported: " + aEvent.which); + break; + } + } + } +}; + +var gPitches = { + play: function(aPitchName) { + gPitches.flash(aPitchName); + var pitchSound = new Audio(gSounds[aPitchName].src); + pitchSound.play(); + }, + + flash: function(aPitchName) { + document.getElementById(aPitchName + "-upper").classList.add("active"); + document.getElementById(aPitchName + "-lower").classList.add("active"); + setTimeout(gPitches.unflash, 200, aPitchName); + }, + + unflash: function(aPitchName) { + document.getElementById(aPitchName + "-upper").classList.remove("active"); + document.getElementById(aPitchName + "-lower").classList.remove("active"); + } +}; + +function toggleHelp() { + document.getElementById("helpdesc").classList.toggle("hidden"); +} diff --git a/manifest.appcache b/manifest.appcache new file mode 100644 index 0000000..6f557ac --- /dev/null +++ b/manifest.appcache @@ -0,0 +1,21 @@ +CACHE MANIFEST + +# 2013-03-30 +manifest.webapp +js/piano.js +sound/piano_c1.opus +sound/piano_d1.opus +sound/piano_e1.opus +sound/piano_f1.opus +sound/piano_g1.opus +sound/piano_a1.opus +sound/piano_b1.opus +sound/piano_c2.opus +style/piano.css +style/pianoIcon16.png +style/pianoIcon32.png +style/pianoIcon64.png +style/pianoIcon128.png + +NETWORK: +* diff --git a/manifest.webapp b/manifest.webapp new file mode 100644 index 0000000..6c270e5 --- /dev/null +++ b/manifest.webapp @@ -0,0 +1,17 @@ +{ + "name": "MaKey MaKey Piano", + "description": "Play piano pitches as a reaction to MaKey MaKey signals.", + "launch_path": "/index.html", + "appcache_path": "/manifest.appcache" + }, + "developer": { + "name": "Robert Kaiser", + "url": "http://www.kairo.at/" + }, + "icons": { + "16": "/style/pianoIcon16.png", + "32": "/style/pianoIcon32.png", + "64": "/style/pianoIcon64.png", + "128": "/style/pianoIcon128.png" + } +} diff --git a/sound/piano_a1.opus b/sound/piano_a1.opus new file mode 100644 index 0000000000000000000000000000000000000000..bc4379fe8983e5fe37b23cd2d34c49353459c026 GIT binary patch literal 5701 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 literal 0 HcmV?d00001 diff --git a/sound/piano_b1.opus b/sound/piano_b1.opus new file mode 100644 index 0000000000000000000000000000000000000000..fde821d97ad09a7d113db35f0cc1f27a79a79874 GIT binary patch literal 5855 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 J(vU~+*|%YGEeiku literal 0 HcmV?d00001 diff --git a/sound/piano_c2.opus b/sound/piano_c2.opus new file mode 100644 index 0000000000000000000000000000000000000000..c1b1df1158450989a6ddc08bfec7692aa21ab21a GIT binary patch literal 5968 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 literal 0 HcmV?d00001 diff --git a/sound/piano_f1.opus b/sound/piano_f1.opus new file mode 100644 index 0000000000000000000000000000000000000000..fe2aa9d6270a75e52974d8d40634f6e6a3e51607 GIT binary patch literal 5690 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�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 D0FqJ< literal 0 HcmV?d00001 diff --git a/style/piano.css b/style/piano.css new file mode 100644 index 0000000..927b589 --- /dev/null +++ b/style/piano.css @@ -0,0 +1,123 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +body { + font-family: sans-serif; + background-color: #222222; + color: white; + margin: 0; + padding: 0; +} + +h1 { + display: none; +} + +#keyboard { + margin: auto; + margin-top: 10em; + padding: 0; + border: none; + width: 48em; + height: 20em; + border-collapse: collapse; + border-spacing: 0 0; +} + +.key { + transition: background-color 100ms; +} + +.key.upper, +.key.black { + border: 1px solid black; + border-bottom: none; + height: 50%; + width: 8.33%; +} + +.key.upper.small, +.key.black.small { + width: 4.17%; +} + +.key.lower { + border: 1px solid black; + border-top: none; + vertical-align: bottom; + text-align: center; + font-size: 2em; + font-weight: bold; + height: 50%; +} + +.key.white { + background-color: white; + color: gray; +} + +.key.black { + background-color: black; + color: gray; +} + +.key.active { + background-color: yellow; +} + +#helptoggle { + position: absolute; + right: 1em; + bottom: 1em; + font-size: 1.5em; +} + +#helpdesc { + position: absolute; + left: 0; + right: 0; + top: 10em; + background-color: rgba(204, 204, 204, .95); + color: #222222; + width: 24em; + margin: auto; + padding: 1em; + border: 1px solid black; + border-radius: 1em; + z-index: 10; +} + +#helpdesc.hidden { + display: none; +} + +#helpdesc > p { + margin-top: 0; + margin-bottom: 1em; +} + +#helptable, +#helphide { + margin: auto; + padding: 0; + width: 8em; +} + +#helptable { + border: 0; + border-collapse: collapse; + border-spacing: 0 0; +} + +#helptable td { + text-align: center; +} + +#helphide { + margin-top: 1em; +} + +#helphide > button { + width: 8em; +} -- 2.35.3