操作方法がいまいち難しいという人は、Zkun Beat v1.0から順に体験していくと進化の流れがよくわかって一目瞭然になると思うyo 過去バージョンもすべて残してあるので、それぞれ
http://zkun.zouri.jp/beat10.html
http://zkun.zouri.jp/beat11.html
http://zkun.zouri.jp/beat12.html
http://zkun.zouri.jp/beat13.html
http://zkun.zouri.jp/beat14.html
http://zkun.zouri.jp/beat15.html
http://zkun.zouri.jp/beat16.html
http://zkun.zouri.jp/beat17.html
http://zkun.zouri.jp/beat18.html
http://zkun.zouri.jp/beat19.html
http://zkun.zouri.jp/beat20.html
のアドレスだから、末尾の数字だけ変更してリターンキーを押せば開くはずだyo
ついでにもう1つ「有名曲」をテストがてら打ち込んでみたyo 楽器屋では試奏禁止と言われる例の曲だyo ドラムは4インストしか使ってないけど、ハットが空いてる小節にタムを臨時指定して鳴らしているので、6インストと同等の音数が出ているyo こういうワザも使えるので参考にしてne
<header>,zd4,2.1,16,5,108,2,7,3,29,110,70,0,0,18,110,80,2,12,118,40,8,0,0,102,64,</header>,<#1>,<i1>,33,100,いのいて、かわい、しかい、うのい、にわい、のかい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,甘椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#1>,<#2>,<i1>,33,100,いのいて、かわい、しかい、ともん、にいん、たわい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#2>,<#3>,<i1>,33,100,いのいて、かわい、しかい、うがい、にいい、のおい、たのん、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,先先,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#3>,<#4>,<i1>,33,100,かもいて、しいい、とわい、うかい、にわい、のいい、たもい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,雨人,,</i3>,<i4>,38,100,甘鮎,,</i4>,<i5>,36,100,峠晴,,</i5>,</#4>,<#5>,<i1>,33,100,いのいて、かわい、しかい、うのい、にわい、のかい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,雨先,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,峠火,,</i5>,</#5>,<#6>,<i1>,33,100,いのいて、かわい、しかい、とわい、うかい、にわい、のかい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,先先,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,峠晴,,</i5>,</#6>,<#7>,<i1>,33,100,いのいて、かわい、しかい、うがい、にいい、のおい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,先先,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,峠晴,,</i5>,</#7>,<#8>,<i1>,33,100,いのいて、かわい、しじい、といい、うもい、にのい、のおい、たらい、,,</i1>,<i2>,46,74,先間,,</i2>,<i3>,48,100,間原,,</i3>,<i4>,38,100,甘雀,,</i4>,<i5>,36,100,晴年,,</i5>,</#8>,<#9>,<i1>,33,100,いのいて、かわい、しかい、うのい、にわい、のかい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,億先,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,峠晴,,</i5>,</#9>,<#10>,<i1>,33,100,いのいて、かかい、しがい、とわい、ういい、にもい、ののい、たおい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,先先,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#10>,<#11>,<i1>,33,100,いのいて、かわい、しかい、うがい、にいい、のおい、たおい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,先先,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#11>,<#12>,<i1>,33,100,いのんて、しかい、とがい、うわい、にいい、のもい、たいい、,,</i1>,<i2>,46,100,間甘,,</i2>,<i3>,42,100,先晴,,</i3>,<i4>,38,100,甘鮎,,</i4>,<i5>,36,100,峠晴,,</i5>,</#12>,<#13>,@#9,,,,,</#13>,<#14>,<i1>,33,100,いのいて、かかい、しいい、とわい、うがい、にわい、のいい、たわい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,先先,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#14>,<#15>,<i1>,33,100,いのいて、かわい、しかい、うがい、にいい、のおい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,先先,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴峠,,</i5>,</#15>,<#16>,<i1>,33,100,いのいて、かのい、しかい、とがい、うわい、にいい、のもい、たおい、,,</i1>,<i2>,50,100,間甘,,</i2>,<i3>,45,100,峠足,,</i3>,<i4>,38,100,戸晴,,</i4>,<i5>,36,100,峠青,,</i5>,</#16>,,,,,,,,,,,,,,,,
さらにベースパートのデータ量も大幅に圧縮したyo |C|D|A|などの簡易表示テキストの保存を廃止し、その都度ノートデータから生成させるようにしたyo さらにそのノートデータも圧縮書き込み時には「ひらがな変換」を行い、「かせいん、ふいん、こいて、」などのような独特のフレーズに変換して保存するように変更したyo データ量圧縮としては2バイト文字になるので微妙な感じもするけど、これでドラムの漢字変換、ベースのひらがな変換が揃ったので、日本語←→演奏データの相互変換にまた一歩前進したことになるyo
そのほか、オクターブ変更のセレクタをドラム以外のパートにすべて設置して、左上のミキサー表の中にまとめたyo あと、ミキサー表で設定した内容はすべて「演奏環境の一部」であるととらえて全部header部に保存し、ロードしたときは同じ環境を再現できるようにしたyo これでheader部のデータを改変したので、以後v2.1以前のファイルは読めなくなるyo まあ、まだリリースしてすぐで誰もデータを作り込んで保存してる人なんかいないと思うので大丈夫だろw(苦笑) 以後、このv2.1フォーマットで保存したテキストは当分の間読み込めるように配慮しようと思うので、とりあえずv2.1に全員移行しといてくれyo(一方的な笑)
先日掲載した「とある曲」のテキストデータをv2.1圧縮フォーマットで再掲するyo こんな感じで「和風」表記になっているんだyo このデータの場合、第5小節だけが第1小節と全く同じ内容なので、<#5>のところが@#1とだけ記載されてるだろw こんな感じでデータを短くする工夫をしてるyo(苦心笑)
<header>,zd4,2.1,8,6,110,0,0,0,29,110,70,0,0,33,110,80,2,0,110,40,8,0,0,90,64,</header>,<#1>,<i1>,34,90,いのいて、かのい、しのい、こかい、てがい、はわれ、のかれ、わわれ、たがい、,,</i1>,<i2>,46,106,峠間,,</i2>,<i3>,42,90,億先,,</i3>,<i4>,38,120,甘声,,</i4>,<i5>,36,120,火美,,</i5>,<i6>,49,100,峠間,,</i6>,</#1>,<#2>,<i1>,34,90,いもいて、かもい、しもい、こかい、てがい、はわれ、のかれ、わわれ、たがい、,,</i1>,<i2>,46,106,,,</i2>,<i3>,42,90,先先,,</i3>,<i4>,38,120,甘声,,</i4>,<i5>,36,120,火美,,</i5>,<i6>,49,100,,,</i6>,</#2>,<#3>,<i1>,34,90,いいいて、かいい、しいい、こかい、てがい、はわれ、のかれ、わわれ、たがい、,,</i1>,<i2>,46,106,,,</i2>,<i3>,42,90,先先,,</i3>,<i4>,38,120,甘声,,</i4>,<i5>,36,120,火美,,</i5>,<i6>,49,100,,,</i6>,</#3>,<#4>,<i1>,34,90,いのいて、かのい、しのい、こかい、てがい、はわれ、のわれ、わもい、きもれ、,,</i1>,<i2>,46,106,間美,,</i2>,<i3>,42,90,先椿,,</i3>,<i4>,38,120,甘心,,</i4>,<i5>,36,120,火美,,</i5>,<i6>,49,100,,,</i6>,</#4>,<#5>,@#1,,,,,,</#5>,<#6>,<i1>,34,90,いもいて、かもい、しもい、こかい、てがい、はわれ、のかれ、わわれ、たがい、,,</i1>,<i2>,46,106,間美,,</i2>,<i3>,42,90,先椿,,</i3>,<i4>,38,120,甘心,,</i4>,<i5>,36,120,火美,,</i5>,<i6>,49,100,,,</i6>,</#6>,<#7>,<i1>,34,90,いいいて、かいい、しいい、こかい、てがい、はわれ、のかれ、わわれ、たがい、,,</i1>,<i2>,46,106,峠美,,</i2>,<i3>,42,90,億椿,,</i3>,<i4>,38,120,甘心,,</i4>,<i5>,36,120,火美,,</i5>,<i6>,49,100,峠間,,</i6>,</#7>,<#8>,<i1>,34,90,いをいて、かをい、しをい、こかい、てがい、はわれ、のわれ、わいれ、たもい、,,</i1>,<i2>,46,106,,,</i2>,<i3>,42,90,先間,,</i3>,<i4>,38,120,甘全,,</i4>,<i5>,36,120,火間,,</i5>,<i6>,49,100,,,</i6>,</#8>,,,,,,,,,,,,,,,,,,,,,,,,
やっていることは、その都度乱数を発生させて、クロック間のインターバルを差し引きさせたり、指定するベロシティーの値を増減させているだけなので単純なんだけど、同時発音数が増えたり、テンポが速くなったりすると、ほかにもその都度配列を作ったり、クロックインジケーターを走らせたり、次の小節へ送る情報を書き込んだりと、色々な仕事を同時にやっているので追いつかなくなるみたいw(妥当笑) まあ、そこまで都度都度乱数を発生させず、ある程度大まかにうねらせるような形にすれば、もうちょっと処理はラクになるだろうけどne まあ、そんなにハイテンポで使うスタイルのソフトでもないので当面はいじらないと思うけどw(含み笑)
でもOldマックでHyperCardを動かしていた時にくらべれば処理速度は天地ほどの開きがあるne 速度的に処理が追いつかないから、いろいろなアイデアがあってもリアルタイムで演奏させるソフトを作るのは非常に制約だらけだった。ディスクに常に書き込みにいく方式だったせいもあって、HDDにもよくない感じだったしne(苦笑) 今はもの凄い速度でかなり大量のことがリアルタイムで処理できる。すごい時代になったyo(感心笑)
でも、使う側の人間にあまり工夫や進歩が見られないと思うyo ソーシャルゲームとかくだらないものは確実に昔のゲームより質が落ちていると思うし、ソフトにしてもハードにしても既存の製品の路線を継承した無難なものばっかり出てくるけど、革新的なものがほとんど出てこないよne ジョブズはやはりその点では凄かったんだと思うyo けっこう人のアイデアを奪ったりもしてたみたいだけどw(苦笑) 楽器業界も同じ。せっかくGKやGRといった画期的な器が登場しても、その先の展開が全然ない。ボクはずっと待ってたのに。ギターでシンセ音を出すだけのことにはそれほどの意味はない。むしろそうやって演奏データとして取り出せることによって生まれる次の展開を期待していたのに。何もない。5年待っても、10年待っても。バカなの? 何も開発しようという気がないの?と思ったyo その退屈な思いがずーっと引っかかってたんだよne(ため息笑)
さらに、ベースパート開発時に手抜きして「|A||C|D|#G||」とかの簡易表示はめんどくさいからそのまま保存させてたんだけど、これも元データさえあれば自動的に計算して生成できるんだから、「|A||C|D|#G||」などの文字列は保存せずに全部その都度生成させすることにしたyo
さらには、小節単位でまったく同じデータの場合は「◯◯小節の完コピである」という意味の符合だけ書き込んで、重複するデータを書き込まないようにするyo これはもう試作品ができあがっていて、なかなかクレバーに動作してくれてるyo
これらの改良を施して、クッキー保存するときもそのような形でデータ圧縮して書き込むようにすれば、せめて8小節ループくらいなら保存できるようになってもらいたいものだne まあ、クッキー以外で保存する場合でも圧縮・解凍技術を開発しておいて損はないからne
さらにあるアイデアがあって、「ひらがな変換」を導入しようと思ってるyo ドラムのグリッドパターンを2進数のビットに見立てて「漢字変換」をすることで圧縮表示に成功しているけど、今度はベースの演奏パターンを「ひらがな変換」して表示してみるyo 現行では発音のタイミング、音の高さ、音の長さ、音の強さ、という4要素を数字と配列上の位置で表しているけど、これをうまいこと変換してひらがなで表記しちゃおうというわけだyo ただし、圧縮保存時のみの変換で、演奏時や編集時は今のような数値表示でないとさすがに内容が理解できないからne(苦笑)
これらの「漢字変換」や「ひらがな変換」をなぜ強引に導入してるかというと、任意に与えられた日本語のテキストから、当該辞書にヒットする文字が得られるたびにデータを生成していくようなプログラムを作ることが簡単にできるようになるので、ゆくゆくはヤフーニュースの記事をコピペして貼るだけで、その文字列からスコアを生成して勝手にその記事をテーマにしたセッションループが始まるという、超お手軽インプットができるようになるので、あえて日本語にからめていく設計をしているというわけだyo(壮大な計画笑) カタカナやアルファベットも文章には登場するので、将来的にはそれらも辞書化して何らかのパートを担わせることになるかもしれないne 構想は無限に広がるyo(技術者笑)
感じたことは、とにかくまずはベースを先に打ち込んだほうがいいne そしてくり返しフレーズがあるなら「COPY MENU」のボタンをどんどん利用して複写するといい。そしてあとからドラムを入力するといいyo なぜかというと、ドラムは「イエローセレクタ」もあるから入力がラクだし、見た目そのままでクリックしていくこともできるから、8小節くらいならラクラク入力できるyo 一方、ベースは結構めんどくさいし見た目もわかりにくいので、とにかくコピー機能を最大限駆使してまずはベースパートを完成させるようにしたほうがラクだと思うyo
さて、そんなわけで8小節のループを完成させたんだけど、念のためにテキストデータからコピペしてバックアップテキストを用意しておいたyo さらにCOOKIEへSAVEして再LOADに挑戦したんだけど、何度やってもブラウザがフリーズして強制終了かけるしかなくなっちゃうw(大苦笑) ほかの小さなテストパターンではうまく動いているから、問題は「とある曲」のデータサイズにあるのかなと思い、ちょっと調べてみたyo
すると、COOKIEはブラウザにもよるけど、1件あたりだいたい4KBまでの容量しか処理できないらしいne(失笑) 「とある曲」のデータはすでに8KBあるから、COOKIEではオーバーフローしちゃって正しいデータのロードができないみたいだyo(残念笑)
つまり、COOKIEによる保存システムは4小節くらいまでのちっこいデータがせいぜいで、長いものはテキストファイルでのコピペ保存を考えないと駄目ということだne まあ、早い時点で気付いてよかったyo さっそく今後の対策を考えるとするyo(技術者笑)
ちなみにCOOKIEをオーバーフローさせた「とある曲」のデータを掲載しとくyo テキストとしてコピペして「READ from text」を実行するならちゃんと動くから試してみてw SAVEするのはやめといたほうがいいyo(失笑)
<header>,zd4,1.8,8,6,0,110,114,0,0,0,,</header>,<#1>,<inst1>,34,90,31#2#100;;31#2#100;;31#2#100;;;43#2#100;;41#2#100;;38#1#100;43#1#100;38#1#100;41#2#100,G||G||G|||G||F||D|G|D|F,</inst1>,<inst2>,46,106,峠間,,</inst2>,<inst3>,42,90,億先,,</inst3>,<inst4>,38,120,甘声,,</inst4>,<inst5>,36,120,火美,,</inst5>,<inst6>,49,100,峠間,,</inst6>,</#1>,<#2>,<inst1>,34,90,34#2#100;;34#2#100;;34#2#100;;;43#2#100;;41#2#100;;38#1#100;43#1#100;38#1#100;41#2#100,#A||#A||#A|||G||F||D|G|D|F,</inst1>,<inst2>,46,106,間間,,</inst2>,<inst3>,42,90,先先,,</inst3>,<inst4>,38,120,甘声,,</inst4>,<inst5>,36,120,火美,,</inst5>,<inst6>,49,100,間間,,</inst6>,</#2>,<#3>,<inst1>,34,90,36#2#100;;36#2#100;;36#2#100;;;43#2#100;;41#2#100;;38#1#100;43#1#100;38#1#100;41#2#100,C||C||C|||G||F||D|G|D|F,</inst1>,<inst2>,46,106,間間,,</inst2>,<inst3>,42,90,先先,,</inst3>,<inst4>,38,120,甘声,,</inst4>,<inst5>,36,120,火美,,</inst5>,<inst6>,49,100,間間,,</inst6>,</#3>,<#4>,<inst1>,34,90,31#2#100;;31#2#100;;31#2#100;;;43#2#100;;41#2#100;;38#1#100;38#1#100;34#2#100;;34#1#100,G||G||G|||G||F||D|D|#A||#A,</inst1>,<inst2>,46,106,間美,,</inst2>,<inst3>,42,90,先椿,,</inst3>,<inst4>,38,120,甘心,,</inst4>,<inst5>,36,120,火美,,</inst5>,<inst6>,49,100,間間,,</inst6>,</#4>,<#5>,<inst1>,34,90,31#2#100;;31#2#100;;31#2#100;;;43#2#100;;41#2#100;;38#1#100;43#1#100;38#1#100;41#2#100,G||G||G|||G||F||D|G|D|F,</inst1>,<inst2>,46,106,峠間,,</inst2>,<inst3>,42,90,億先,,</inst3>,<inst4>,38,120,甘声,,</inst4>,<inst5>,36,120,火美,,</inst5>,<inst6>,49,100,峠間,,</inst6>,</#5>,<#6>,<inst1>,34,90,34#2#100;;34#2#100;;34#2#100;;;43#2#100;;41#2#100;;38#1#100;43#1#100;38#1#100;41#2#100,#A||#A||#A|||G||F||D|G|D|F,</inst1>,<inst2>,46,106,間美,,</inst2>,<inst3>,42,90,先椿,,</inst3>,<inst4>,38,120,甘心,,</inst4>,<inst5>,36,120,火美,,</inst5>,<inst6>,49,100,間間,,</inst6>,</#6>,<#7>,<inst1>,34,90,36#2#100;;36#2#100;;36#2#100;;;43#2#100;;41#2#100;;38#1#100;43#1#100;38#1#100;41#2#100,C||C||C|||G||F||D|G|D|F,</inst1>,<inst2>,46,106,峠美,,</inst2>,<inst3>,42,90,億椿,,</inst3>,<inst4>,38,120,甘心,,</inst4>,<inst5>,36,120,火美,,</inst5>,<inst6>,49,100,峠間,,</inst6>,</#7>,<#8>,<inst1>,34,90,39#2#100;;39#2#100;;39#2#100;;;43#2#100;;41#2#100;;38#1#100;38#1#100;36#1#100;34#2#100,#D||#D||#D|||G||F||D|D|C|#A,</inst1>,<inst2>,46,106,間間,,</inst2>,<inst3>,42,90,先間,,</inst3>,<inst4>,38,120,甘全,,</inst4>,<inst5>,36,120,火間,,</inst5>,<inst6>,49,100,間間,,</inst6>,</#8>,,,,,,,,,,,,,,,,,,,,,,,,
画面折りたたみ機構を応用して、上部の各種表示部分もページ切り替え式に改造してスッキリさせたyo おかげでテキストエリアをまた広く表示できるようになったので、ベースパートが増えて一気に文字数が増えたパターンデータを見るのに便利になったyo(苦笑)
ここまで出来上がったら、次はもう単なる「複数小節ループ」だけではなく、「曲進行」を制御できないかということが視野に入ってくるよne 小節単位でデータを切り出すことが簡単にできるようになっているから、「仮想曲配列」をつくってそこに小節を並べていき、合体物を再生する命令を実行すれば何も考えなくても「曲進行」どおりに演奏してくれるw まあ、その進行を指定する行為自体が煩雑であったり、コードやら色々考慮しなくちゃならないので敷居が高いんだけどne それで機械的なループシークエンサーみたいなものが隆盛なんだろうけどne
まあ、いきなり「曲進行」はきついので、まずは「コード指定」あたりを今のループマシンに導入して、ついでに白玉のコードも鳴らさせたりするのはたぶん簡単にできるだろうw(余裕笑) その次によくあるコード進行なんかを勝手に入れる機能をつくり、ちょうどいいあたりで勝手にオカズを入れてくれる機能をつくり、そういうのが熟成したあたりで、ループから離れて自由に進行させる構造へと手を出そうか。とりあえず、「自宅練習の友w」的なジャムマシーンを作る!というのが当面の目標なので、オカズつきでいい感じのループ演奏が半自動でバンバン作れるくらいのところまでもっていこうと思ってるyo 入力の手間さえかければ今のBeat v2.0でもかなりのことはできるんだけど、まだまだ「半自動」からはほど遠いからne(苦笑) そんな感じの構想で開発を進めてるyo(技術者笑)
一番悩むのが音符入力方法をどう作るかだよne ボクの考えた方式は、まずクロックインジケータが走るラインが真上にあるので、それを位置指定ボタンがわりにクリックするyo その位置にどの高さの音を入れるかを「Note」セレクタで選ぶyo そしてクロックいくつ分の長さにするかを「Length」セレクタで選ぶyo 音の強さベロシティーは枠の右下に表示されている数値で入力されるyo この数値はBeatと同様に画面左端のスライダーで増減することができるyo これらの指定が終われば「Enter」ボタンをクリックすると指定したパラメータでデータが書き込まれるyo 詳細データは画面右上のテキストエリアの中に表示されるyo 詳細はそっちで見るとして、スコアシート上ではパッと見でわかりやすい表示がほしいよne そこで「C|A||#G|」といった感じのアルファベットだけの簡易表示で入力されている内容を示すようにしたyo これがあるのとないのとでは作業性がかなり違うと思うのでナイスアイデアだと思うんだよne(画期的笑)
入力を削除するときは、音符単体を削除するなら、クロックインジケータをクリックしてタイミングを指定し、「Length」セレクタにある「DEL」を選んでEnterを押せばいいyo 小節全体の入力をクリアしたいときは、「Length」セレクタにある「CLR」を選んでEnterだyo(明快笑)
あと、これはモノモードで発音させるように作っているので、仮に音の長さの指定で音が重なるように入力していたとしても、次の音が発音するときに前の音は消されるようになってるyo あと、かなり頑張ったところでは、小節をまたぐ長い音符やループの終わりから先頭にかけてまたがるような長い音符でも、切れずに正しいタイミングで消音されるように処理を継承させてるyo 小節ごとにブツ切りなんてことはないので安心してくれw(当然笑)
その成果の1つとして、「COPY #→#」というボタンを追加したyo クリックするとダイアログが開いてコピー元とコピー先の小節番号をきいてくるので順に入力するとその小節のデータが丸ごとコピー完了するというものだyo 従来の画面上のパーツ番号方式で管理していると何段も折り返している場合のその操作を記述するだけで頭がこんがらがりそうだけど、配列関数で管理していると割と単純な操作でコピー自体は完了し、それを画面に展開するお決まりのルーチンにを実行させるだけで終わっちゃうyo(あっけない笑)
そのついでに、これまでは各インスト横1列(4小節分)単位でしか指定できなかったハットやスネアなどの音色選択とベロシティーを、各小節ごとに細分指定してデータを持たせるようにしたyo 漢字ボックスの左の2つがそれで、前が音色、後がベロシティだyo これによって、はじめに定義するインスト数が4であっても、途中で5つ目のインストを3番と入れ替えて使ったり、6つ目のインストを4番と入れ替えたりというようにかなり細かく入れ替えできるようになったyo
それにあわせて、左端のインスト指定ブロックの一番上にセレクタを追加したyo こいつは通常はこれまで通り横1列の小節に対して効くんだけど、「to second bar only」などを選択すると、個別の小節に対してのみ変更指定が送れるようになるyo また、一番上段のセレクタのみ末尾に「to all bars」という特別メニューがあり、これを選択しているとそのインストは曲の最後の小節まで音色とベロシティを一括設定できるという便利機能だyo
2次元配列を使ってややこしい操作を行うのは初めてなのでかなり苦戦したyo JavaScriptにおける配列特有の挙動のクセみたいなものもあるみたいで、エラー表示は出ないけど正しく動かないという暗黙のルールに泣かされることもしばしばだったyo とりあえず、最初にいったん必要数だけ定義した配列をつくっておくこと、親配列ごと代入せず、最小単位の配列を個数分繰り返して代入することなど、どこに書いてあるのかよくわからないようなローカルルールのトラップにはまりながらも、なんとか安定して動く段階までバグとりできたと思うのでリリースしたyo
パッチメイカーシリーズのときとは比べ物にならないくらい複雑な仕組みで動かしているので、内部構造の大改革はかなりたいへんだったけど、これでこの先はかなりラクになりそうな気がするyo(技術者笑)
こうしてだいたい詰め込むべきものが出そろってみると、各小節に必要な最大データはだいたいこんな感じかというのが見えてきたyo そうすると、当初この先どうなるかわからないから、とりあえず今ある画面どおりに左上から順番にデータを書き出して、各インスト1行=4小節分単位で改行するかたちで扱ってきたけど、これだと1小節単位でデータを扱ってコピーしたりするときに使い勝手がよくないんだよne
なので、データの読み書きをする際に階層構造にして、ループパターン全体の情報→各小節の情報→小節内の各インストの情報→各インストごとのグリッド情報のようにして記述するようにすれば、今後何をするにしてもデータが扱いやすくなることは自明だよne(正論笑) そうすれば、全く中身が同一の小節が続く場合は、中身=あれと全く同じ、と記述することでデータ量をめちゃくちゃ圧縮することも可能になるよne さらに言えば、現状では4小節単位でしか変更できない各インストも、データ的には各小節ごとに定義させることができるようになるよne まあ、画面上でそれをどのように見やすく表示させるかという問題は新たに発生するけれどw(苦笑) さらに突っ込んで言えば、各グリッドごとのベロシティ情報も個別にもたせることができるので、それの表示方法や設定方法をどうするかということと、それを扱う手間を別にしても、より細かな演奏データを持たせることが可能になるというものだよne 現時点でそこまで実装しなくても、階層を増やすとともに、それを扱えるスクリプトを追加すればいいことになるから将来的にもいいことづくめだよne(秀逸笑)
というわけで、次のバージョンはデータ構造改革を実行しようと思うyo ほとんどの部分でスクリプトの大幅な書き換えが必要になると思うけど、トータルの行数はかなり減ると思うし、今後の開発もラクになると思うyo ここが開発全体の中で一番の踏ん張りどころかもしれないne まあ、ここまでの開発のおかげで具体的に何をどのように動作させればいいのかということが明確になってきているから、それを新基準でイチから記述していくという感じかもne まあコツコツ頑張るとするyo(含み笑)