6

私はこの MIDI.js ライブラリを使用しています: https://github.com/mudcube/MIDI.js

プラグインをロードして midi ファイルを再生するには、次のようにします。

window.onload = function () {
    MIDI.loadPlugin({
        soundfontUrl: "./soundfont/",
        instruments: [ "acoustic_grand_piano" ],
        callback: function() {
            MIDI.programChange(0, 0);   
                    _player = MIDI.Player;

        }
    });

};

function playSong(){            
        _player.timeWarp = 1; // speed the song is played back
        _player.loadFile(song[songid], _player.start);

        _player.addListener(function(data) {
            var now = data.now; // where we are now
            var end = data.end; // time when song ends
            var channel = data.channel; // channel note is playing on
            var message = data.message; // 128 is noteOff, 144 is noteOn
            var note = data.note; // the note
            var velocity = data.velocity; // the velocity of the note


        });
}

var songid = 0;
var song = ['data:audio/mid;base64,TVRoZAAAAA...

私の質問は、再生する前にこの midi ファイルを移調する方法はありますか? 基本的に、midi ファイル (.mid ファイルまたは base64 形式) を解析し、すべてのノートを +1 で変更してから、プレーヤーに送信したいと考えています。JavaScriptでこれを行う方法はありますか?

4

2 に答える 2

0

Player にリスナーを追加するには、

addListener(
  data => {
     data.note += 1;
  }
);

メモ自体の前に呼び出されると思います。

midicube [https://github.com/mscuthbert/midicube] と呼ばれる私のマッドキューブの MIDI.js の ES6 フォークを使用する場合、すべて ES6 モジュールに含まれているため、Player をより簡単にサブクラス化し、再生前にデータを操作できます。

于 2022-02-20T11:28:11.810 に答える