3 4 6 7 8 0 - W E R T Y U I O P @ |
|
S D G H J L ; Z X C V B N M , . / |
全てを
拍の先頭以外を
|
|
|
||||
|
|
<body> <form> <tr align=center> <td class=p10>Bass Ptn.Nmb</td> // 各小節のベースパターンナンバー <td><input type=number min=0 max=7 value=0 class=keta1></td> <td><input type=number min=0 max=7 value=1 class=keta1></td> (中略) <td><input type=number min=0 max=7 value=7 class=keta1></td> </tr> </form> <td rowspan=2 width=100px class=p10> <label> Ptn.Nmb:</label><br> <select id=bsptnb onchange='changebspt();'></select> <br><br> <button id=bsplay onclick='play(3);'>Play</button> // ベースのみのPlayボタン </td> <script><!-- var currbsptnb=0; // 現在選ばれているベースパターンナンバー function loopplay(){ if(playing!=0){ playing=0; document.getElementById('play').innerHTML='Play'; document.getElementById('loopplay').innerHTML='Play'; document.getElementById('bsplay').innerHTML='Play'; // 追加 clearTimeout(timeout); Jazz.MidiOut(0x81,mbn+36,0); }else{ playing=2; document.getElementById('play').innerHTML='Stop'; document.getElementById('loopplay').innerHTML='Stop'; document.getElementById('bsplay').innerHTML='Stop'; // 追加 currdrptnb=document.forms[1].elements[currbar-1].value; select_drpt.selectedIndex=currdrptnb; drartoscr(); currbsptnb=document.forms[2].elements[currbar-1].value; // 追加 select_bspt.selectedIndex=currbsptnb; // 追加 bsartoscr(); // 追加 count=0; tick(); } } function play(n){ // nが1のときがドラムのみ再生、3のときがベースのみ再生 if(playing!=0){ playing=0; document.getElementById('play').innerHTML='Play'; document.getElementById('loopplay').innerHTML='Play'; document.getElementById('bsplay').innerHTML='Play'; // 追加 clearTimeout(timeout); Jazz.MidiOut(0x81,mbn+36,0); }else{ playing=parseInt(n); // playingが1のときがドラムのみ再生、3のときがベースのみ再生 document.getElementById('play').innerHTML='Stop'; document.getElementById('loopplay').innerHTML='Stop'; document.getElementById('bsplay').innerHTML='Stop'; // 追加 count=0; tick(); } } function tick(){ bpp=0; if(playing==2){ // 全体ループプレイのときのみ。進行表からパターンナンバーを取得 document.forms[0].elements[currbar-1].checked=true; currdrptnb=document.forms[1].elements[currbar-1].value; currbsptnb=document.forms[2].elements[currbar-1].value; } if(playing>=2){ // 全体ループまたはベースのみ演奏のとき。つまり、ベースを演奏するとき cht=document.forms[5].elements[currbar-1].value; bpp=bsar[currbsptnb][count][0]; // このカウントで鳴らすならbppに0以外が入る bvel=bsar[currbsptnb][count][1]; boc=bsar[bpn][16][0]; born=bsar[bpn][17][0]; if(bpp!=0)Jazz.MidiOut(0x81,mbn+36,0); if(count==0){ cbn=document.forms[3].elements[currbar-1].selectedIndex; }else{ if(count==cht){ kcbn=document.forms[4].elements[currbar-1].selectedIndex; if(kcbn!=17){ cbn=document.forms[4].elements[currbar-1].selectedIndex; } } } if(bpp!=0){ tx=0; if((boc==0)||(count%4!=0)){ if(born==1){ tix=Math.floor( Math.random() * 12 ); tx=octs[tix]; } if(born==2){ tix=Math.floor( Math.random() * 14 ); tx=tha[tix]; } if(born==3){ tix=Math.floor( Math.random() * 16 ); tx=thb[tix]; } } Jazz.MidiOut(0x91,cbn+tx+36,bvel); mbn=cbn+tx; } } if(playing==1){ // ドラムのみ演奏のとき currdrptnb=select_drpt.selectedIndex; } if(playing==3){ // ベースのみ演奏のとき currbsptnb=select_bspt.selectedIndex; } if(playing!=3){ // 全体ループまたはドラムのみ演奏のとき。つまり、ドラムを演奏するとき for(j=0;j<6;j++){ din=drar[currdrptnb][count][j][0]; dvl=drar[currdrptnb][count][j][1]; Jazz.MidiOut(0x99,din,dvl); } } count++; if(count>=(beat*4)){ count=0; if(playing==2){ currbar++; if(currbar>8)currbar=1; currdrptnb=document.forms[1].elements[currbar-1].value; select_drpt.selectedIndex=currdrptnb; currbsptnb=document.forms[2].elements[currbar-1].value; // 追加 select_bspt.selectedIndex=currbsptnb; // 追加 drartoscr(); bsartoscr(); // 追加 } } timeout=setTimeout(tick,interval); } function changebspt(){ // 画面に表示するベースパターンを手動で切り替える currbsptnb=select_bspt.selectedIndex; bsartoscr(); } function changecurrbar(n){ currbar=parseInt(n); currdrptnb=document.forms[1].elements[currbar-1].value; currbsptnb=document.forms[2].elements[currbar-1].value; // 追加 select_drpt.selectedIndex=currdrptnb; select_bspt.selectedIndex=currbsptnb; // 追加 drartoscr(); bsartoscr(); // 追加 } var select_bspt=document.getElementById('bsptnb'); for(var i=0;i<=7;i++){ select_bspt[i]=new Option(i,i,i==0,i==0);} var bsar=new Array(); // ベースパターンが格納されるbsar配列をつくる for(bpn=0;bpn<8;bpn++){ bsar[bpn]=new Array(); for(i=0;i<18;i++){ bsar[bpn][i]=new Array(); for(w=0;w<2;w++){ bsar[bpn][i][w]=0; } } } function bed(){ // ベースパターンが編集されたときにbsar配列を更新する bpn=currbsptnb; for(i=0;i<16;i++){ bvl=document.forms[6].elements[16].value; if(document.forms[6].elements[i].checked){ bsar[bpn][i][0]=current_snd2; bsar[bpn][i][1]=bvl; }else{ bsar[bpn][i][0]=0; bsar[bpn][i][1]=0; } } born=document.getElementById('bporn').selectedIndex; if(document.getElementById('bpoc1').checked){ boc=0; }else{ boc=1; } bsar[bpn][16][0]=boc; bsar[bpn][17][0]=born; bsar[bpn][16][1]=0; bsar[bpn][17][1]=0; bsjn=bsar.join(','); localStorage.setItem('bsarjoin16',bsjn); // bsar配列を保存する } function bsartoscr(){ // 画面をbsar配列の内容に更新する bpn=currbsptnb; for(i=0;i<16;i++){ for(w=0;w<2;w++){ if(bsar[bpn][i][1]>0){ document.forms[6].elements[i].checked=true; document.forms[6].elements[16].value=bsar[bpn][i][1]; }else{ document.forms[6].elements[i].checked=false; } } } boc=bsar[bpn][16][0]; born=bsar[bpn][17][0]; document.getElementById('bporn').selectedIndex=born; if(boc==0){ document.getElementById('bpoc1').checked=true; }else{ document.getElementById('bpoc2').checked=true; } } bsjn=localStorage.getItem('bsarjoin16'); // bsar配列を起動時に読み込む if(bsjn){ exbsjn=bsjn.split(','); }else{ bsjn="33,120,0,0,0,0,0,0,33,120,0,0,0,...(中略)...,33,120,33,120,33,120,1,0,3,0,"; exbsjn=bsjn.split(','); } ct=0; for(bpn=0;bpn<8;bpn++){ for(i=0;i<18;i++){ for(w=0;w<2;w++){ bsar[bpn][i][w]=exbsjn[ct]; ct++; } } } bsartoscr(); --></script>