在电脑上弹钢琴是什么体验?

简介: 在电脑上弹钢琴是什么体验?

学钢琴?用电脑就够了,实现网页版钢琴88音弹奏

一、起因

其实自己想学钢琴很久了,一直没有机会,偶然看到了网上有人做了网页版的钢琴,我试玩了一下,发现大多只有10多个音,这是完全无法满足我的,对此有了想要自己制作一个网页版钢琴的想法。

二、准备工作

为了制作这个钢琴,我首先是去查找了很多琴键的相关信息资料,知道了钢琴琴键的88个音,之后收集了88个琴键的音效就可以开始写代码了。

三、撸代码

1、创建黑白琴键

var m = document.getElementById("main");
var bk = [2,3,5,6,7];
for(var i = 1;i<53;i++){
    //创建元素
    var newNode = document.createElement("div");
    //添加元素
    newNode.id = "key" + i;
    newNode.className = "white";
    newNode.style.width = 100/52 + "vw";
    // newNode.innerText = (i+5)%7;
    m.appendChild(newNode)
    if(i==1){
        newNode = document.createElement("div");
        newNode.id = "key" + 53;
        newNode.className = "black";
        newNode.style.left = 75/52 + "vw";
        newNode.style.width = 50/52 + "vw";
        // newNode.innerText = i;
        m.appendChild(newNode)
    }
}
var bb = 54;
for(i=1;i<8;i++){
    for(var j = 0;j<bk.length;j++){
        //创建元素
        var newNode = document.createElement("div");
        //添加元素
        newNode.id = "key" + bb;
        bb++;
        newNode.className = "black";
        newNode.style.left = ((bk[j]+(i-1)*7)*100/52+75/52)+"vw";
        newNode.style.width = 50/52 + "vw";
        // newNode.innerText = i*(j+1);
        newNode.style.color = "white";
        m.appendChild(newNode)
    }
}

2、曲谱导入功能

//导入文件
var readAsText = document.getElementById("readAsText");
readAsText.addEventListener('click',function(){
    showDataByText();
},false)
//通过文件读取数据
function showDataByText(){
    var that = this;
    var resultFile = document.getElementById("fileUpload").files[0];
    if (resultFile) {
        var reader = new FileReader();
        //以GBK编码读取文件
        reader.readAsText(resultFile,'GBK'); 
        reader.onload = function (e) {
            // console.log("e",e);
            //获取上传文件名
            var a = document.getElementById("fileUpload").value;
            //截取文件名后缀
            var atype = a.substring(a.length-3);
            //获取文件文本内容
            var urlData = this.result;
            //判断上传文件类型
            if(atype != "txt"){
                alert("请选择txt文件");
            }
            else{
                // document.getElementById("result").innerHTML += urlData;
                // console.log(urlData);
                autoPlayMusic(urlData);
            }
        };
    }
}

3、琴键声音播放

function playSound(noteNumber){
    var soundId = 'sound' + noteNumber;
    var keyId = 'key' + noteNumber;
    var key = document.getElementById(keyId);
    var audio = null;
    if(key){
        audio = new Audio("sound/"+noteNumber+".mp3");
        audio.play();
        key.style.backgroundColor = '#9cf';
        setTimeout('setOriginColor(' + noteNumber + ')', 100);
    }
}

4、自动读取琴谱弹奏功能实现

var ii = 0,music;
var autoplay = function(){
    playSound(keyfrom[music[ii]]);
    ii++;
    if(ii<music.length)
        if(music[ii] == 0 ) {
            setTimeout('autoplay()', 300);
        }
        else {
            setTimeout('autoplay()', 320);
        }
}
var autoPlayMusic = function(e){
    ii = 0;
    e.replace("/n","");
    music = e.split(',');
    setTimeout('autoplay()', 2000);
    console.log(music);
}

5、键盘监听

document.onkeydown = function(e) {
    var pressEvent = e || window.event;
    var keyCode = '';
    if(pressEvent.keyCode){
        keyCode = pressEvent.keyCode;
    }else if(pressEvent.charCode){
        keyCode = pressEvent.charCode;
    }else if(pressEvent.which){
        keyCode = pressEvent.which;
    }
    switch(keyCode){
        case 97:    //1
            playSound(24);
            break;
        case 98:    //2
            playSound(25);
            break;
        case 99:    //3
            playSound(26);
            break;
        case 100:    //4
            playSound(27);
            break;
        case 101:    //5
            playSound(28);
            break;
        case 102:    //6
            playSound(29);
            break;
        case 103:    //7
            playSound(30);
            break;
        case 104:    //8
            playSound(31);
            break;
        case 105:    //9
            playSound(32);
            break;
        case 111:    ///
            playSound(33);
            break;
        case 106:    //*
            playSound(34);
            break;
        case 109:    //-
            playSound(35);
            break;
        case 107:    //+
            playSound(36);
            break;
        case 13:    //enter
            playSound(37);
            break;
        case 65:  // a
            playSound(17);
            break;
        case 83:  // s
            playSound(18);
            break;
        case 68:  // d
            playSound(19);
            break;
        case 70:  // f
            playSound(20);
            break;
        case 71:  // g
            playSound(21);
            break;
        case 72:  // h
            playSound(22);
            break;
        case 74:  // j
            playSound(23);
            break;
        case 75:  // k
            break;
        case 87:  // w
            playSound(64);
            break;
        case 69:  // e
            playSound(65);
            break;
        case 84:  // t
            playSound(66);
            break;
        case 89:  // y
            playSound(67);
            break;
        case 85:  // u
            playSound(68);
            break;
        case 86:  // v
            playSound(38);
            break;
        case 66:  // b
            playSound(39);
            break;
        case 78:  // n
            playSound(40);
            break;
        case 77:  // m
            playSound(41);
            break;
        case 188: // ,
            playSound(42);
            break;
        case 190: // .
            playSound(43);
            break;
        case 191: // /
            playSound(44);
            break;
        case 49:  //1
            playSound(10);
            break;
        case 50:  //2
            playSound(11);
            break;
        case 51:  //3
            playSound(12);
            break;
        case 52:  //4
            playSound(13);
            break;
        case 53:  //5
            playSound(14);
            break;
        case 54:  //6
            playSound(15);
            break;  
        case 55:  //7
            playSound(16);
            break;
        default:
            break;
    }
}

四、实现效果

可以通过键盘弹奏,也可以通过上传乐谱实现自动演奏,总的来说还是实现得很不错的,奈何自己弹奏水平有限,无法弹出很好的音乐。由于电脑键盘不是很够,所以暂时我只是放了五组音调进去,希望有想法的可以跟我反馈反馈,感谢大家的观看。

五、玩法

六、试玩地址

1、试玩地址

http://jdhnv787.xyz/JYeontu/#/cssEffects/piano

2、GitHub代码

https://github.com/yongtaozheng/html-css-js-Achieve-cool-results

3、个人博客

http://47.113.84.128:8090/

目录
相关文章
|
6月前
|
编解码 运维 Android开发
iPad真生产力?你的下一台电脑何必是电脑
iPad真生产力?你的下一台电脑何必是电脑
64 0
无影云电脑使用感受
简单谈谈无影云电脑使用的感受
594 0
无影云电脑使用感受
|
15天前
|
存储 人工智能 自然语言处理
每帧纵享丝滑——ToDesk云电脑、网易云游戏、无影云评测分析及ComfyUI部署
作为一种新兴的虚拟电脑服务方式,云电脑将传统电脑的计算、存储和应用服务等功能迁移到云端,打破了传统电脑的物理限制,通过云端连接,即可享受到高效、稳定的资源与服务,为人们提供了更加灵活、便捷、安全的工作与娱乐模式。 今天,本篇文章将带来ToDesk云电脑、网易云游戏、无影云三款云电脑的性能测评、AIGC科研测评和软件应用实测分析。
|
8月前
|
存储 搜索推荐
无影云电脑使用体验
无影作为云电脑,本身会给我们的办公场景带来云电脑的优势。 通过云端存储和计算,解决了传统个人电脑在性能、数据同步、多终端协同等方面的痛点,使计算更个性化、便捷和高效。 解决了多地办公不便以及其他不稳定的因素
684 1
|
8月前
|
存储 人工智能 安全
能多端登录的无影云电脑玩的就是“花样”!
众所周知,无影办公是近年来较为流行的一种新型办公方式,其采用云计算、虚拟化、网络传输等技术,实现了办公终端的全面云化。这种方式在传统的办公场景中,具有很多优势,使用无影硬件终端可以让员工更加高效地完成工作,提高了企业的生产效率。那么本文就来简单分享一下能多端登录的无影云电脑。
837 2
能多端登录的无影云电脑玩的就是“花样”!
|
Web App开发 存储 监控
如何提升电脑使用体验?试试这5款免费软件吧
今天推荐5款实用的开源软件,它们可以极大地提高你的工作和生活效率,让你办公学习的体验更加舒适。
85 0
|
编解码 自然语言处理 安全
电脑小白必备的五款软件,让你的电脑变身神器
你想让你的电脑更好用吗?这里有五款电脑软件可以帮你,它们可以让你的电脑更高效、美观、安全,快来看看吧!
114 1
电脑小白必备的五款软件,让你的电脑变身神器
|
编解码 前端开发 机器人
阿里云体验(一)无影云电脑
关于阿里云【无影云电脑】的产品体验。
1178 1
|
存储 Ubuntu 安全
电脑双系统--我想体验不一样的感觉
电脑双系统--我想体验不一样的感觉
114 0
电脑双系统--我想体验不一样的感觉
|
存储 安全 Android开发
无影云电脑的体验及其他平台的比较
本篇将介绍无影云电脑作为个人电脑的体验,说明其优缺点,并与其他平台的云电脑比较(主要是云游戏平台)。

热门文章

最新文章