我一直在阅读有关 Web Midi API 的文档,并尝试查看有关该主题的不同网站。有没有办法在不使用花哨的库和东西的情况下播放 MIDI 声音?假设我只想生成一个注释:如何访问本地机器上存在的 midi 模块?任何人都可以编写一小段代码来播放单个音符并且我可以简单地嵌入到元素中吗?

最佳答案

Web Audio API 不直接与 MIDI 设备接口(interface),包括计算机上的软件 MIDI 合成器。为此,您需要使用(不太受支持) Web MIDI API

但是,如果您只想根据单个 MIDI 音符的参数播放简单的单音音符,您可以将这些参数转换为与 Oscillator 源一起使用:

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 规范

关于javascript - MIDI Javascript : how to generate a single MIDI note in javascript without libraries?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28778163/

10-14 17:33