Tiny MML
Posted feedbacks - JavaScript
これはなかなか素晴らしいツール。
see: SFC mini
1 2 3 4 5 6 7 8 9 10 11 12 | (function playbeep(scr, quaver, beep){
if(!beep) (beep = WSH.CreateObject("SfcMini.DynaCall")).Declare("kernel32", "Beep");
if(!quaver) quaver = 250;
var S = { c:262, d:294, e:330, f:349, g:392, a:440, b:494, r:0 };
with(Math) scr.replace(/([a-grA-G])(\d?)(\+*)(-*)(\.?)/g, function($, s, t, p, m, d){
var hz = s.charCodeAt(0) > 96 ? S[s] : round(S[s.toLowerCase()] * 1.06);
var dr = round(quaver * pow(2, p.length) * pow(2, -m.length) * (d ? 1.5 : 1));
if(hz) beep(t ? hz * pow(2, t - 3) : hz, dr);
else WSH.Sleep(dr);
});
})("e+g+c4++g+a+g++r.c-e.g-c4+b.a-g++.r++");
// 大文字は半音上,0~9で高さ指定(省略で3),+-.で長さ調整(伸び|縮み|付点)。
|
ADODB.Streamでsmfを吐いて、関連付けされたプレイヤーで再生。「音を鳴らすプログラム」・・・ではない。
-----------------------------------
C:\temp>cscript /nologo tinymml.js cdefedcrefgagfercrcrcrcrcdefedcr
-----------------------------------
C:\temp>cscript /nologo tinymml.js cdefedcrefgagfercrcrcrcrcdefedcr
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');
|


にしお
#3387()
Rating0/0=0.00
入力はcがド、dがレ、eがミ、fがファ、gがソ、aがラ、bがシ、rが休符とします。この8文字以外の文字は入力に含まれていないと仮定して構いません。おのおのの音符・休符は八分音符・八分休符とします。
オクターブや音の長さの変更、同時発音などの機能は不要です。
サンプル入力(カエルの歌)
[ reply ]