サンプル16(ベースパターンを切り替える)

Playing Bar 1 2 3 4 5 6 7 8  
 

 
Drum Ptn.Nmb
Bass Ptn.Nmb
Root Note1
Root Note2
Rt.Chg.Timing


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




 ,




 .




 /
全てを 拍の先頭以外を

 

 

 
Bass Pattern


 

 

 

サンプル15に追加したソース

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