论坛有人发了matlab实现的董小姐,于是想在自己熟悉的领域也试试看。之前用Python做过发出指定频率的声音,但是这个对第三方库的依赖较大。于是准备在JavaScript中实现。
先发一个不错的参考资料:http://www.html5rocks.com/zh/tutorials/webaudio/intro/
首先需要处理Web Audio API名称的问题,并取得AudioContext的实例:
try {
// Fix up for prefixing
window.AudioContext = window.AudioContext || window.webkitAudioContext;
context = new AudioContext();
} catch (e) {
alert('Web Audio API is not supported in this browser. Chrome is strongly recommended!');
}
目前对Web Audio的支持,Chrome做的最好,Firefox正在努力,测试版已经实现,IE大家都明白,还不支持。
然后是声音的来源,我选择了MIDI.js中的钢琴声音,引入这个js文件,里面是base64编码后的钢琴各个按键的声音。对编码解码需要用到base64binary.js。用上面取得的context做音频解码。解码后回调函数中,将AudioBuffer存到数组中。这里MIDI.keyToNote是做钢琴