MIDI Javascript:如何在没有库的情况下用Javascript生成单个MIDI音符
MIDI Javascript: how to generate a single MIDI note in javascript without libraries?
我一直在阅读有关Web Midi API的文档,并尝试查看有关该主题的不同网站。有没有一种方法可以在不使用花哨的库之类的东西的情况下播放midi声音?假设我只想生成一个注释:我如何访问本地机器上的midi模块?有人能写一小段代码来播放一个音符,我可以简单地嵌入元素中吗?
Web Audio API不直接与MIDI设备接口,包括计算机上的软件MIDI合成器。为此,您需要使用(不太受支持的)WebMIDI API。
然而,如果你只想根据单个MIDI音符的参数播放一个简单的单声道音符,你可以将这些参数转换为与振荡器一起使用。来源:
audio = new (window.AudioContext || window.webkitAudioContext)()
function playNote(frequency, volume, duration)
{
var halfPeriod = 1/frequency/2
if(duration > halfPeriod) duration -= duration % halfPeriod
else duration = halfPeriod
var g = audio.createGain()
var o = audio.createOscillator()
o.connect(g)
g.connect(audio.destination) // so you actually hear the output
o.frequency.value = frequency
g.gain.value = volume
o.start(0)
o.stop(audio.currentTime + duration)
}
函数的前三行用于调整持续时间,以避免在波不为零时切断振荡器,因为这会导致令人不快的爆裂。
更新为最新的(2015年12月草案)WebAudio规范
MIDI是一种技术标准,用于描述连接各种电子音乐硬件的通信协议。
MIDI根本不描述音频和声音。您不能通过MIDI通道演奏乐器。相反,您可以向MIDI键盘或MIDI合成器发送命令。
如果你想从浏览器播放声音,你需要一些库。例如,带有1500种乐器的钢琴键或MIDI文件的复杂播放器。
W3C Web MIDI API工作草案包含一个简单合成器的代码:https://www.w3.org/TR/webmidi/#a-简单单声道正弦波中频合成器
此实现可在GitHub上获得:https://github.com/cwilso/monosynth
运行代码的演示:http://webaudiodemos.appspot.com/monosynth/
加载演示脚本后,您可以在没有物理MIDI设备的情况下播放音符。播放C4(MIDI中的#60)约1秒:
noteOn(60);
await new Promise(resolve => setTimeout(noteOff, 1000, 60));
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- MIDI Javascript:如何在没有库的情况下用Javascript生成单个MIDI音符
- Javascript:如何导出 MIDI 文件
- Javascript MIDI文件播放器
- 使用基于javascript浏览器的midi.js创建鼓声
- MIDI Keyboard with Javascript
- 如何将数据从javascript函数发送到MIDI.js API中的MIDI.noteOn()
- 用javascript连接midi键盘或其他实时midi输入
- 我如何使用javascript播放任意MIDI音符