Javascript 将MIDI文件解析为二进制文件,然后用JS客户端保存

Javascript 将MIDI文件解析为二进制文件,然后用JS客户端保存,javascript,browser,base64,blob,midi,Javascript,Browser,Base64,Blob,Midi,从几天以来,我一直试图将二进制文件保存回一个普通的MIDI文件。 我想我正在处理base64和blob以返回MIDI文件。 我设法从MIDI文件中获取值,但无法 生成MIDI文件以在修改后保存。 我的目标是编写一个多音轨midi录音机。 这是我最后一次尝试: function parseMidi(file) { const reader = new FileReader(); var fl = reader.readAsText(file, 'UTF-8'); reader.ad

从几天以来,我一直试图将二进制文件保存回一个普通的MIDI文件。 我想我正在处理base64和blob以返回MIDI文件。 我设法从MIDI文件中获取值,但无法 生成MIDI文件以在修改后保存。 我的目标是编写一个多音轨midi录音机。 这是我最后一次尝试:

function parseMidi(file)
{   
const reader = new FileReader();

var fl =   reader.readAsText(file, 'UTF-8'); 

reader.addEventListener('loadend', () => {  

var data =  reader.result; 

var arr =  [];

var utf8 = unescape(encodeURIComponent( data ));

  for (var i = 0; i < utf8.length; i++) 
  {

  arr.push(utf8.charCodeAt(i));     

  } 

  rebuildMidiFile(arr); 

 });
    
}


function rebuildMidiFile(arr)
{
    
var str64 = [];
    
for (var i = 0; i < arr.length; i++) 
{
   
 var st =  String.fromCharCode( arr[i] );
 
 str64 += st.toString('base64');
    
}

var ab = new ArrayBuffer(str64.length);

for (var i = 0; i < str64.length; ++i) 
{
    ab[i] = str64[i];
}


var midiFile =
URL.createObjectURL(new Blob([ ab.buffer ], {type: 'audio/midi' }));


}
函数parseMidi(文件)
{   
const reader=new FileReader();
var fl=reader.readAsText(文件“UTF-8”);
reader.addEventListener('loadend',()=>{
var数据=reader.result;
var-arr=[];
var utf8=unescape(编码组件(数据));
对于(变量i=0;i