这次我无意间了解到了Tonejs这个库。
Tone.js 是一个用于在浏览器中创建交互式音乐的 Web 音频框架。Tone.js 的架构旨在让创建基于 Web 的音频应用程序的音乐家和音频程序员都熟悉它。在高层次上,Tone 提供了常见的 DAW(数字音频工作站)功能,例如用于同步和安排事件的全局传输以及预建的合成器和效果。此外,Tone 还提供高性能构建块来创建您自己的合成器、效果和复杂的控制信号。
然而这个库我用下来的体验就是非常庞大和实用。
1 | const synth = new Tone.Synth().toDestination(); |
这样短短几行代码就可以播放C4音高的音频了。
而且其甚至于还能根据赫兹来生成并播放音频,甚至官方的文档上好像说还可以根据采样几个钢琴的音,然后自动变调补全全部的声音。
如果我早点发现这个,我之前写音乐计算器就不用造轮子写一大堆东西了。我现在用的方法还是收集钢琴每个键的ogg音频,转换成base64组成列表来播放,实际操作非常麻烦。
虽然是这样,但是重构这东西我还是太懒了。不过重点是但是我发现其中的midi部分的功能可以解析并生成midi文件。所以说我立马想到了拿来做记录功能。直接记录用户的输入,然后生成midi,来达到录制效果。那就加点新东西在里面好了。
这两个方法用来记录Midi的演奏事件,其实很简单,只要根据你按下键盘的时间和松开的时间,就可以计算出音符持续的时间。
1 | //这个列表来存储所有的midi事件 |
那么,不妨来试玩一下?
点击record按钮就可以开始录制了,再点一次就会停止录制,下载记录好的midi文件。