1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
function arrayToFile(filename, array){
  var stream = WScript.CreateObject('ADODB.Stream');
  stream.Charset = 'iso-8859-1';
  stream.Open();
  for (var i=0; i < array.length; i++)
    stream.WriteText(String.fromCharCode(array[i]));
  stream.SaveToFile(filename, 2);
  stream.Close();
}

var note = {r:0,c:60,d:62,e:64,f:65,g:67,a:69,b:71};
var body = [];
WScript.Arguments.Item(0).toLowerCase().replace(/([a-gr])/g, function(n){
  body = body.concat([0,144,note[n],n=='r'?0:90,24,144,note[n],0]);});
var size = body.length + 4;
head = [77,84,104,100,0,0,0,6,0,0,0,1,0,48,77,84,114,107,
        size>>24&0xff, size>>16&0xff, size>>8&0xff, size&0xff];
arrayToFile('sample.mid', head.concat(body.concat([0,255,47,0])));
WScript.CreateObject('WScript.Shell').run('sample.mid');