先頭へ | 1つ前へ | 次へ |
【解説】 全プログラムを表示して解説していくよ。それぞれのパーツに追加されているテキストとvalueなどは自分でソース を開いて確認してね。一応やり方の一つを書いておくと、ファイルメニューから「別名で保存」を選んで、フォーマット というセレクトメニューで「ページのソース」というのを選んで保存を実行すると、ソースファイルが保存できるから それをテキストエディタで開けばHTMLの中身を見ることができるよw(Safariの場合笑) <script language="JavaScript"> function g3xpm(){ PGX=""; //パッチを10個後ろに足し込んでいくための空っぽの変数を用意する for(ct=0;ct<10;ct++){ //★★★ここから10回ループしますという目印 NRU=edu.NRsel.value; //NRセクションのユニット番号を読み込む NRT=edu.Thrsh.value; //Thrshの値を読み込む //◆もしNRTの値が999の場合、NRTには0-24のいずれかの整数を入れる if(NRT==999)NRT=Math.floor(Math.random()*25); NRL=edu.lev1.value; //LEVELの値を読み込む DRU=edu.DRIVEsel.value; //DRIVEセクションのユニット番号を読み込む DRG=edu.Gain.value; //Gainの値を読み込む //◆もしDRGの値が999の場合、DRGには0-100のいずれかの整数を入れる if(DRG==999)DRG=Math.floor(Math.random()*101); DRT=edu.Tone.value; //Toneの値を読み込む //◆もしDRTの値が999の場合、DRTには0-100のいずれかの整数を入れる if(DRT==999)DRT=Math.floor(Math.random()*101); DRL=edu.lev2.value; //LEVELの値を読み込む //Module0にNRセクションの値を書き込む px="<Module0><Prm0>1</Prm0><Prm1>"+NRU+"</Prm1>"; px=px+"<Prm2>"+NRT+"</Prm2><Prm3>"+NRL+"</Prm3></Module0>"; //Module1に値を書き込む px=px+"<Module1><Prm0>1</Prm0><Prm1>"+DRU+"</Prm1>"; px=px+"<Prm2>"+DRG+"</Prm2><Prm3>"+DRT+"</Prm3><Prm4>"+DRL+"</Prm4></Module1>"; //パッチ音量を所定の場所に書き込む px=px+"<Module6><Prm0>100</Prm0></Module6>"; //パッチヘッダーの書き込み header="<PatchData><Name>TestPatch</Name>"; header=header+"<Tooltip></Tooltip><Keywords></Keywords><Version>0.12</Version>"; //パッチフッターの書き込み footer="</PatchData>"; //ヘッダー(header)と本体(px)とフッター(footer)を合体 patch=header+px+footer; //できたパッチ1個を変数PGXの末尾に足し込む PGX=PGX+patch; } //★★★ここまでの処理を10回ループしますよという終わりの括弧がコレ! //パッチグループヘッダーの書き込み gheader="<PatchSet><Product>G3X</Product>"; gheader=gheader+"<Version>1</Version><Name>TestGroup</Name><Patches>"; //パッチグループフッターの書き込み gfooter="</Patches></PatchSet>"; //ヘッダー(gheader)と本体(PGX)とフッター(gfooter)を合体 PatchGroup=gheader+PGX+gfooter; //テキストエリアに出来上がったパッチグループを書き込んで完成 edu.kekka.value=PatchGroup; } </script> 行数は増えたけど、ヘッダーやフッターを書き込んだり合体させたりしてる行も多いので、実際はまだそうたいした ことはしてないよw 新しい処理をしているところに★と◆のマークをつけているから注目してくれyo まず、★★★印をつけてるループ処理だね。これは、 for(ct=0;ct<10;ct++){ } という構造になっていて、ctという変数が0から1周ごとに1ずつ増えて10になる前までの間(つまりctが9までの間) 大括弧でくくられた行の処理を繰り返すという意味だよ。あらゆるコンピュータープログラムに出てくる基本中の基本 のループ処理だから必ず覚えておいてne あっ、このforを書いてる行と、最後の閉じ括弧の行は行末に「;」をつけ なくていい例外的な行だということも覚えておいてね。 次は◆印をつけてる行だね。代表として一番最初にでてくる行を取り上げるよ。 if(NRT==999)NRT=Math.floor(Math.random()*25); まず前半部分だけど、「もし変数NRTが999なら」行の後ろに書いてある処理をする、という意味だよ。「==」と 2つ続けて書くルールになっているのでこれはしっかり覚えておいてね。ちなみに(NRT<999)と書けば「もしNRTが 999より小さいなら」、(NRT>999)と書けば「もしNRTが999より大きいなら」、(NRT!=999)と書けば「もしNRTが 999ではないなら」という意味になるよ。このifを使った条件文もコンピュータープログラムの基本中の基本なので 覚えておく必要があるyo そして後半部分。まず「Math.random()」が何を意味しているかというと、これこそ乱数の発生装置で、0から1未満 の数を毎回不規則に決定するランダム関数とよばれるものだyo とる値は、「0」「0.013528」「0.1715」「0.4343」 「0.773211」「0.911522」「0.999999201」などさまざまだけど、絶対に「1」という値にはなれないことに注意が必要 だよ。次に、「Math.floor()」という部分。これは、()の中に入った数の小数部分を切り捨てるという処理をする関数 だよ。つまり、単純にMath.floor(Math.random())としたら、常に0にしかならないことになるよw このプログラムでは そうならないように先にMath.random()に25を掛けているね。あっ、「*」というのはパソコンでは算数の「掛ける」の 意味で使われるというルールだからねw つまりMath.random()*25は最小で0、最大で限りなく25に近いけど25に はならない数ということになるよ。こいつの小数部分を切り捨ててやると0から24までのいずれかの整数ということ になるよ。こいつをNRTに代入してやることで、NRセクションのThresholdの値が1から25までのいずれかの値にな るというわけだよ。乱数を掛け算して大きくしてやってから小数切り捨てすることで、ほしい範囲の乱数値を得ると いう手法はよく使うので覚えておくといいyo あとはStep3で解説したとおりだから分からないところがあればStep3をおさらいしてne パッチグループヘッダーが出てきたけど、Step4をしっかり理解していれば難しくないよね。単にパッチデータ内の 入れ子構造の定義だけの話なので、まあこういう風にパッチグループファイルが構成されてるんだって理解してよ。 「MAKE PATCH DATA!」ボタンを押して出来上がったデータファイルは実際にG3X用のパッチグループとして動くの で試しにインポートしてみるといいよ。なぜか10個だけの保存エリアしかないEdit&Share上でしっかり動くからw しかも、残りのユニットはなぜかすべてM-filterがoffでつながってるからw これらの謎もいずれ解説するyo(微笑)
先頭へ | 1つ前へ | 次へ |