使用midi.js写一个可视化钢琴

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Synthesia 也叫作Synthesia Piano,是一款由国外开发的专业的电脑钢琴模拟软件,软件支持MIDI的导入和弹奏,为线谱提供一个弹奏的信息平台,软件界面美观简洁、简单全面、实用方便,无需培训,即可快速上手,即使是不懂钢琴演奏的用户也可以使用。软件自带了上百首MID曲子,你可以把它看做为一个娱乐消遣的小游戏,也可以花心思研究一下,轻轻松松完成钢琴演奏的学习过程,真正做到简单全面实用。是用户实现钢琴演奏学习好帮手。 Synthesia 的安装 把下载好的安装包解压到当前文件夹,之后双击Synthesia-10.2-installer.exe运行文件进行安装,打开的时候会出现安装框,依次开始INtyALL,依照步骤点击下一步,并选择同意协议和软件安装位置即可。     点击close按钮,Synthesia的安装过程就完成了。 Synthesia的使用   安装完成后,点击Synthesia快捷方式即可进入Synthesia软件。如图所示,这是软件的主界面,用户可以点击打开图片按钮来实现所需功能。     如图所示,点击演奏歌曲按钮,即进入选择歌曲的页面。     如图所示,选择好歌曲后进入一个选择演奏模式的界面,用户可按自己所需选择。     如图所示,之后进入演奏界面。其他的软件操作和功能就有小伙伴们自己去发掘吧。 Synthesia的卸载   依次选择开始-> 所有程序 ->Synthesia ->卸载Synthesia。 或者依次打开我的电脑->卸载或更改程序->卸载你所卸载的软件,您可以用 Window XP控制面板中的添加或删除程序功能,或用 Windows Vista、Windows 7中的程序和功能删除Synthesia, 然后点击开始卸载,按步骤依次点击下一步,直至完成。
MIDI.js一个JavaScript库,可以用来生成和播放MIDI音乐文件。以下是使用MIDI.js生成乐谱的步骤: 1. 引入MIDI.js库 在HTML文件中引入MIDI.js库的JavaScript文件。 ```html <script src="https://cdn.jsdelivr.net/npm/midijs/dist/midi.min.js"></script> ``` 2. 加载MIDI文件 使用MIDI.js的`MIDIjs.player.loadFile`方法加载MIDI文件。例如: ```javascript MIDIjs.player.loadFile("music.mid"); ``` 3. 解析MIDI文件 使用MIDI.js的`MIDIjs.Player`类解析MIDI文件。例如: ```javascript var player = new MIDIjs.Player(); player.load("music.mid", function() { var track = player.tracks[0]; console.log(track.events); }); ``` 4. 生成乐谱 根据MIDI文件中的事件信息,生成乐谱。例如: ```javascript var events = track.events; var notes = []; for (var i = 0; i < events.length; i++) { var event = events[i]; if (event.type === "channel") { if (event.subtype === "noteOn") { notes.push({ pitch: event.param1, start: event.playTime, duration: 0 }); } else if (event.subtype === "noteOff") { for (var j = notes.length - 1; j >= 0; j--) { if (notes[j].pitch === event.param1 && notes[j].duration === 0) { notes[j].duration = event.playTime - notes[j].start; break; } } } } } console.log(notes); ``` 以上代码将MIDI文件中的音符事件转换为一个包含音高、开始时间和持续时间的数组。 5. 显示乐谱 将生成的乐谱显示在网页中。可以使用HTML和CSS来创建一个表格,并使用JavaScript来将乐谱数据填充到表格中。例如: ```html <div id="sheet-music"></div> <style> table { border-collapse: collapse; } td { border: 1px solid black; width: 10px; height: 20px; } </style> <script> var sheetMusic = document.getElementById("sheet-music"); var table = document.createElement("table"); for (var i = 0; i < notes.length; i++) { var note = notes[i]; var tr = document.createElement("tr"); var td = document.createElement("td"); td.innerHTML = note.pitch; tr.appendChild(td); for (var j = 0; j < note.duration / 100; j++) { var td = document.createElement("td"); td.style.backgroundColor = "gray"; tr.appendChild(td); } table.appendChild(tr); } sheetMusic.appendChild(table); </script> ``` 以上代码将生成一个包含音符音高和持续时间的表格,每个音符的持续时间用灰色单元格表示。可以使用CSS样式来自定义乐谱的外观。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值