明確にする:私はMIDIファイルを生成したくないし、MIDIファイルを再生したくない。私はその場でMIDIノートを演奏したい。javascriptで任意のMIDIノートを再生するにはどうすればよいですか?
MIDIライブラリーとしてhttps://github.com/mudcube/MIDI.jsを使ってみましたが、多少動作します。
私はMIDI.noteOn(0,midiNumber,100);
に電話してノートを再生することができます。しかし、これは数秒間音符を鳴らし、私がMIDI.noteOff
に決して電話していなくてもテーパします。
私はこれがMIDIの動作を意図しているとは思いません。私はnoteOnを呼び出すことができ、noteOffが呼び出されるまでノートの再生と持続を望みます。
対象ブラウザ:現代のfirefox/chrome。あなたが与えられたノートをロードし、それを再生しますplayChannel
を見ることができるように
var playChannel = function (id) {
var note = notes[id];
if (!note) return;
var nid = (channel_nid + 1) % channels.length;
var time = (new Date()).getTime();
var audio = channels[nid];
channel_map[note.id] = audio;
audio.src = MIDI.Soundfont[note.id];
audio.volume = volume;
audio.play();
channel_nid = nid;
};
:
うわー。バグを発見してよかった。 +1、プルリクエストをしたいですか? –
@ H2CO3:私は現在私のPCにいません。私はまだgithubインターフェイスに慣れていません(私はbitbucketが好きです)。しかし、私はいくつかのアプリケーションがこのバグを使用し、 'noteOff'を使用しなかったので、動作しなくなると考えています(結局可能かもしれません)。おそらく〜11時(21時UTC + 1)。 – Zeta
ああ、私はコードを読んでいる間にこのバグに気づきましたが、その修正が何であるかあまりにもわかりませんでした。 noteOff()に実装されていないコードもありますので、このバグは意図した設計上の欠陥である可能性があります。私は、レガシー目的のためにコードを修正することに対するあなたの喜びに同意します。代わりにフォーク要求を行う必要があります。今のところ、私はこれを猿のパッチにして、それがうまくいくかどうかを見ます。 –