|
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>