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...