Skip to content

Instantly share code, notes, and snippets.

@dolpen
Created October 29, 2010 23:34
Show Gist options
  • Save dolpen/654655 to your computer and use it in GitHub Desktop.
Save dolpen/654655 to your computer and use it in GitHub Desktop.
<html>
<head>
<script type="text/javascript" src="http://svn.coderepos.org/share/lang/javascript/jsmml/trunk/src/JSMML.js"></script>
<script type="text/javascript">
<!--
var mml=null;
JSMML.swfurl = 'http://svn.coderepos.org/share/lang/javascript/jsmml/trunk/src/JSMML.swf';
JSMML.onLoad = function() {mml = new JSMML();}
var $=function(n){return document.getElementById(n);};
var FimmlConverter=function(){
this.base=8;
};
FimmlConverter.prototype.processSource=function(s,b,o,t){
var i,j,l=s.length,nts=0,eqs=-1,nte=-1,r='';
this.base=b;
r+='t'+t+' l'+b+' o'+o+' ';
for(i=0;i<l;i++){
switch(s.charAt(i)){
case '=':
if(eqs==-1)eqs=i;
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'r':
if(eqs>=0){
nte=i;
r+=this.NotetoMML(s.substring(nts,eqs),nte-eqs+1);
eqs=-1;
}else if(nts>=0){
r+=s.substring(nts,i);
}
nts=i;
break;
case '+':
case '-':
break;
default:
if(eqs>=0){
nte=i;
r+=this.NotetoMML(s.substring(nts,eqs),nte-eqs+1);
eqs=-1;
}else if(nts>=0){
r+=s.substring(nts,i);
}
nts=-1;
r+=s.charAt(i);
break;
}
}
if(eqs>=0){
nte=l;
r+=this.NotetoMML(s.substring(nts,eqs),nte-eqs+1);
}else if(nts>0){
r+=s.substring(nts,l);
}
return r;
};
// /:2a2a==a+b================:/
FimmlConverter.prototype.NotetoMML=function(e,l){
var r='',b=this.base;
while(l>0){
for(i=2;i<=b && i<=l;i*=2);
if(i>l||i>b)i/=2;
l-=i;
r+=e+((i>1)?(b/i):'')+((l>0)?'&':'');
}
return r;
};
var fc=new FimmlConverter();
window.onload=function(){
$('btn').onclick=function(){
$('to').value=fc.processSource(
$('from').value,
parseInt($('base').value,10),
parseInt($('octave').value,10),
parseInt($('tempo').value,10)
);
};
$('play').onclick=function(){mml.play($('to').value);};
$('pause').onclick=function(){mml.pause();};
$('stop').onclick=function(){mml.stop();};
};
--->
</script>
</head>
<body>
<textarea id="from" cols="88" rows="12"></textarea><br>
<input type="button" id="btn" value="↓変換"/>
t<input type="text" id="tempo" value="120" />
&nbsp;
<select id="base">
<option value="4">l4</option>
<option value="8">l8</option>
<option value="16">l16</option>
<option value="32">l32</option>
</select>
&nbsp;
<select id="octave">
<option value="1">o1</option>
<option value="2">o2</option>
<option value="3">o3</option>
<option value="4">o4</option>
<option value="5">o5</option>
<option value="6">o6</option>
<option value="7">o7</option>
<option value="8">o8</option>
</select>
&nbsp;
<input type="button" id="play" value=">"/>
<input type="button" id="pause" value=" | | "/>
<input type="button" id="stop" value="■"/>
<br>
<textarea id="to" cols="88" rows="12"></textarea>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment