异步播放midi文件?

时间:2017-11-18 18:36:56

标签: javascript midi

有没有办法按音符播放MIDI文件?例如,当按下某个键时,它只播放midi文件的第一个音符。

我已尝试过midi.js,但我只能播放,暂停和恢复文件。

1 个答案:

答案 0 :(得分:0)

我目前正在研究midi事件监听器,因此制作了一个简单的midi解析器。您可以下载项目here,然后将/ build中的MidiParser.js文件复制到您的项目中。

您可以像这样使用它(完整示例here):

// Create midi parser
var parser = new MidiParser();

// Load file and parse midi
var fileReader = new FileReader();
var midiFileInput = document.getElementById('midiFileInput');
midiFileInput.addEventListener('change', function(inputEvent) {
    if (!inputEvent.target.files.length)
        return false;

    fileReader.readAsArrayBuffer(inputEvent.target.files[0]);
    fileReader.onload = function(file) {
        var uint8Midi = new Uint8Array(file.target.result);
        var parsedMidi = parser.parseUint8(uint8Midi);
        // Use parsed midi
        document.body.innerHTML += '<pre>' + JSON.stringify(parsedMidi, null, 2) + '</pre>';
    };
});

它的输出将是格式化的noteOn和noteOff事件的数组。

关于您的示例,每次按下该键时,您都可以使用var event = parsedMidi.shift()获取下一个事件,或使用升序索引(var event = parsedMidi[yourIndex])访问该事件。

如果您想播放声音,可以使用midi.js或sample-player。 (尚未测试过这个)

修改

教程:https://github.com/Otto-AA/MidiPlayer/blob/master/tutorials/MidiParser.md

文档:https://github.com/Otto-AA/MidiPlayer/blob/master/docs/MidiParser.md