2017-11-18 5 views
-2

ノートでMIDIファイルを再生する方法はありますか?例えばキーが押されたときのように、それはMIDIファイルの最初の音符だけを再生します。midiファイルを非同期で再生しますか?

Iveはmidi.jsを試しましたが、再生、一時停止、再開しかできません。

+0

はい方法 – pokeybit

答えて

0

私は現在、midiイベントリスナーで作業していますので、簡単なMIDIパーサーを作成しました。 hereプロジェクトをダウンロードし、MidiParser.jsファイルを/ buildからプロジェクトにコピーすることができます。

あなたは(完全な例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[yourIndex])でアクセスするためにvar event = parsedMidi.shift()を使用できます。

サウンドを再生する場合は、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

+0

おかげであります!本当に役に立ちました。私はパースされたミディをするのに少し問題があります。どのくらい正確に私はmidi jsプレーヤーにイベントを渡すことができます。私はキー入力が検出されたときにノートで全MIDIノートを進めようとしています。 さらなる助けをいただき、ありがとうございます。 –

+0

'MIDI.noteOn(チャンネル、音符、ベロシティ、ディレイ)のようなもの ' https://github.com/mudcube/MIDI.js#midipluginjs---controls-midi-output またはhttps:// githubを参照してください。 com/mudcube/MIDI.js/blob/master/examples/Basic.html –

+0

サー! const parsedMidiは無名関数の内部で作成され、どのようにグローバルスコープでそれにアクセスできますか?だから私はそれで動作することができます。私はparsedMidiを返そうとしましたが、うまくいきませんでした。 –

関連する問題