piano keyboard (v2)
by jmchen
HTML
<div id="info">Piano</div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
CSS
#info {
position: absolute;
top: 0px;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
body {
overflow: hidden;
}
JavaScript
//
// piano reference: http://codepen.io/noogn/pen/LAiDz
//
// problem:
// implement 刷琴鍵 event ...
//
var camera, scene, renderer, light, controls;
var keyboard_set;
// keyC, keyCprim, keyD, keyDprim, keyE, keyEprim;
var raycaster, mouse = new THREE.Vector2();
var pickables = [];
//var Cdown = false, Ddown = false, Edown = false;
//////////////////////////////////////////////////////////////
var keyNames = ['c4','d4','e4','f4','g4','a4'];
var noteTable = [
{name: 'c4', frequency: 261.63},
{name: 'd4', frequency: 293.7},
{name: 'e4', frequency: 329.63},
{name: 'f4', frequency: 349.2},
{name: 'g4', frequency: 392},
{name: 'a4', frequency: 440},
];
var keys = [];
var sounds = [];
var thiskey = null;
var ac = new (window.AudioContext || window.webkitAudioContext);
/////////////////////////////////////////////////////////////
initWebAudio();
init();
animate();
////////////////////////////////////////////////////////////
function Sound (frequency, type) {
this.osc = ac.createOscillator();
if (typeof frequency != 'undefined') {
this.osc.frequency.value = frequency;
}
this.osc.type = type || 'triangle';
this.osc.start(0);
};
Sound.prototype.noteOn = function() {
this.osc.connect(ac.destination);
};
Sound.prototype.noteOff = function() {
this.osc.disconnect();
};
/////////////////////////////////////////////////////////////////
function initWebAudio () {
for (var i = 0; i < noteTable.length; i++) {
var ss = new Sound (noteTable[i].frequency);
ss.name = noteTable[i].name;
sounds.push (ss);
}
}
function FindSound (name) {
debugger;
for (var i = 0; i < sounds.length; i++) {
if (sounds[i].name === name)
return sounds[i];
}
return null;
}
function Key(name, obj3d) {
this.name = name;
this.obj3d = obj3d; // for rotation
this.pressed = false;
debugger;
this.sound = FindSound (name);
}
function FindKey...