zkunがいろんなことを横書きするブログのようですw(含み笑)
v1.7から外観上大きな変化はないけど、内部構造が激変したyo これまでは、画面上に配置されたチェックボックスなどのパーツを基準にすべてを動かしていたけど、v1.8からは内部に持つ2次元配列を基準に管理するようにしたので、コピーとか並べ替えとかが非常に柔軟にできるようになったyo このシステムを発展させていく上では非常に大きな「脱皮」を行ったことになるyo
その成果の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(技術者笑)
その成果の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(技術者笑)
PR
Beat v1.7でとりあえず考えられるような機構をだいたい詰め込んだyo まだ3拍子や6連符といった3の倍数系のパターンには対応させてないけど、これはあえて後回しにしてるyo なぜなら16ビート系が完全に完成してから移植したほうが途中の手間がかからないからne シャッフルパターンなんかは共用できないし、ページ自体を別に分けて構成したほうが画面もスッキリするし、スクリプト動作も無駄に重くならなくていいのかなと思うyo
こうしてだいたい詰め込むべきものが出そろってみると、各小節に必要な最大データはだいたいこんな感じかというのが見えてきたyo そうすると、当初この先どうなるかわからないから、とりあえず今ある画面どおりに左上から順番にデータを書き出して、各インスト1行=4小節分単位で改行するかたちで扱ってきたけど、これだと1小節単位でデータを扱ってコピーしたりするときに使い勝手がよくないんだよne
なので、データの読み書きをする際に階層構造にして、ループパターン全体の情報→各小節の情報→小節内の各インストの情報→各インストごとのグリッド情報のようにして記述するようにすれば、今後何をするにしてもデータが扱いやすくなることは自明だよne(正論笑) そうすれば、全く中身が同一の小節が続く場合は、中身=あれと全く同じ、と記述することでデータ量をめちゃくちゃ圧縮することも可能になるよne さらに言えば、現状では4小節単位でしか変更できない各インストも、データ的には各小節ごとに定義させることができるようになるよne まあ、画面上でそれをどのように見やすく表示させるかという問題は新たに発生するけれどw(苦笑) さらに突っ込んで言えば、各グリッドごとのベロシティ情報も個別にもたせることができるので、それの表示方法や設定方法をどうするかということと、それを扱う手間を別にしても、より細かな演奏データを持たせることが可能になるというものだよne 現時点でそこまで実装しなくても、階層を増やすとともに、それを扱えるスクリプトを追加すればいいことになるから将来的にもいいことづくめだよne(秀逸笑)
というわけで、次のバージョンはデータ構造改革を実行しようと思うyo ほとんどの部分でスクリプトの大幅な書き換えが必要になると思うけど、トータルの行数はかなり減ると思うし、今後の開発もラクになると思うyo ここが開発全体の中で一番の踏ん張りどころかもしれないne まあ、ここまでの開発のおかげで具体的に何をどのように動作させればいいのかということが明確になってきているから、それを新基準でイチから記述していくという感じかもne まあコツコツ頑張るとするyo(含み笑)
こうしてだいたい詰め込むべきものが出そろってみると、各小節に必要な最大データはだいたいこんな感じかというのが見えてきたyo そうすると、当初この先どうなるかわからないから、とりあえず今ある画面どおりに左上から順番にデータを書き出して、各インスト1行=4小節分単位で改行するかたちで扱ってきたけど、これだと1小節単位でデータを扱ってコピーしたりするときに使い勝手がよくないんだよne
なので、データの読み書きをする際に階層構造にして、ループパターン全体の情報→各小節の情報→小節内の各インストの情報→各インストごとのグリッド情報のようにして記述するようにすれば、今後何をするにしてもデータが扱いやすくなることは自明だよne(正論笑) そうすれば、全く中身が同一の小節が続く場合は、中身=あれと全く同じ、と記述することでデータ量をめちゃくちゃ圧縮することも可能になるよne さらに言えば、現状では4小節単位でしか変更できない各インストも、データ的には各小節ごとに定義させることができるようになるよne まあ、画面上でそれをどのように見やすく表示させるかという問題は新たに発生するけれどw(苦笑) さらに突っ込んで言えば、各グリッドごとのベロシティ情報も個別にもたせることができるので、それの表示方法や設定方法をどうするかということと、それを扱う手間を別にしても、より細かな演奏データを持たせることが可能になるというものだよne 現時点でそこまで実装しなくても、階層を増やすとともに、それを扱えるスクリプトを追加すればいいことになるから将来的にもいいことづくめだよne(秀逸笑)
というわけで、次のバージョンはデータ構造改革を実行しようと思うyo ほとんどの部分でスクリプトの大幅な書き換えが必要になると思うけど、トータルの行数はかなり減ると思うし、今後の開発もラクになると思うyo ここが開発全体の中で一番の踏ん張りどころかもしれないne まあ、ここまでの開発のおかげで具体的に何をどのように動作させればいいのかということが明確になってきているから、それを新基準でイチから記述していくという感じかもne まあコツコツ頑張るとするyo(含み笑)
再生関係で実にいろいろな機能を搭載したyo これらは往年のドラムマシン専用機なんかによく搭載されていた機能を単純なプログラム改造で実現したものだyo
まず、「Shuffle」セレクタ。これは表拍と裏拍のタイミングをずらすことによって、シャッフルやスイングのパターンをつくれるもの。ON GRID(0%)から100%まで10%刻みで選べるyo まあ、50%くらいがゆったりしたテンポなら気持ちいいシャッフルになるyo
次は「Human Tempo」セレクタ。これは人が叩いてるように、本来のタイミングから誤差を発生させるものだyo これもON GRID(誤差なし)、Both(ジャストから前後両方にぶれる)3段階、Before(ジャストよりも先走る)3段階、After(ジャストより遅れる)3段階から選べるyo これは各クロックにその都度当該条件でランダムを発生させて誤差を差し引きさせているので、平均でみればそのような感じの人が叩いているような雰囲気が出てると思うyo
次は「Velocity Random」セレクタ。各インストを叩くベロシティは各行左端のスライダーで指定できるんだけど、それもずっと同じ一定の強さで叩いているとマシンっぽさが強くなるよne 人が叩けば必ず強さに微妙なむらができるものだから、これも乱数を発生させてすべての発音都度に差し引きさせるようにしたyo つまり、同じクロックでも各インストごとに差し引きされる数値がそれぞれバラバラになるので、いかにも一斉に変化しましたという感じにはならないyo これも0から10までの段階で選べるyo この3つは、まさに人間が叩いてるっぽさを出すための繊細で膨大な微調整を単純なプログラムで代行させているものだyo(納得笑)
その次は細かな追加。「Play from Top」のチェックボックスは、これがチェックされていれば必ず第1小節から再生されるyo それは今までどおりなんだけど、これをオフにしたときが新しいyo クロックインジケータが止まっている位置から再生をスタートするyo つまり、一時停止させるのと同じように使えるyo しかも、止まった位置とは別のラジオボタンをクリックすると、そこから再生をスタートさせることもできちゃうyo なかなか優れモノだろw 複数のラジオボタンがチェックされてる場合は、一番後のクロックの位置からスタートするyo(妥当笑)
次はコピー機能に「COPY #4 ↓」を追加したyo これは4小節単位の終わりに細かなオカズを叩いて変化をつけることが多いと思うけど、複雑なパターンを入力したものをまた何回も指定し直すのはダルいよne しかも全体コピーしたくても途中をすでにいじってるから、やり直しになっちゃうんだよな〜というようなときに、4小節目の倍数だけを縦方向にコピーできる機能だyo 細かい機能だけどあれば助かるよne(微笑)
そして最後に、画面上部の空きスペースにミニ鍵盤を押し込んだyo こいつはPCのキーボードで演奏するタイプなので、MacのUS Keyboard配列でキミも演奏してくれyo(互換性無視笑) まあ、USB MIDIでつないだキーボードからも演奏できるので持ってる人はそちらでw Zkun Keyboardでは鍵盤画面にオマケでリズムマシンをつけたけど、今度はドラムマシン画面にオマケでキーボードをつけたyo(苦笑) ヒューマンテンポのシャッフルを聴いてると思わず何か演奏したくなるだろ? そのために鍵盤をつけたというわけだyo ただし今回のやつはマウスクリックでの演奏は割愛したyo あれは正直言って実用的じゃないからne(失笑)
いやあ、我ながら物凄い量の小ネタをねじ込んだものだyo(呆れ笑) でも、やればやるほど、まだまだアイデアがわいて来る状態だyo この先の展開を左右するようなコロンブスの卵的発想のアイデアもひらめいたけどそれはまだ秘密にしておくyo いつか、「どうだい、これがあの時ちらっとほのめかしてた『コロたま』だyo(ドヤ顔笑)」と書く日がくると思うので楽しみにしててくれyo(含み笑)
まず、「Shuffle」セレクタ。これは表拍と裏拍のタイミングをずらすことによって、シャッフルやスイングのパターンをつくれるもの。ON GRID(0%)から100%まで10%刻みで選べるyo まあ、50%くらいがゆったりしたテンポなら気持ちいいシャッフルになるyo
次は「Human Tempo」セレクタ。これは人が叩いてるように、本来のタイミングから誤差を発生させるものだyo これもON GRID(誤差なし)、Both(ジャストから前後両方にぶれる)3段階、Before(ジャストよりも先走る)3段階、After(ジャストより遅れる)3段階から選べるyo これは各クロックにその都度当該条件でランダムを発生させて誤差を差し引きさせているので、平均でみればそのような感じの人が叩いているような雰囲気が出てると思うyo
次は「Velocity Random」セレクタ。各インストを叩くベロシティは各行左端のスライダーで指定できるんだけど、それもずっと同じ一定の強さで叩いているとマシンっぽさが強くなるよne 人が叩けば必ず強さに微妙なむらができるものだから、これも乱数を発生させてすべての発音都度に差し引きさせるようにしたyo つまり、同じクロックでも各インストごとに差し引きされる数値がそれぞれバラバラになるので、いかにも一斉に変化しましたという感じにはならないyo これも0から10までの段階で選べるyo この3つは、まさに人間が叩いてるっぽさを出すための繊細で膨大な微調整を単純なプログラムで代行させているものだyo(納得笑)
その次は細かな追加。「Play from Top」のチェックボックスは、これがチェックされていれば必ず第1小節から再生されるyo それは今までどおりなんだけど、これをオフにしたときが新しいyo クロックインジケータが止まっている位置から再生をスタートするyo つまり、一時停止させるのと同じように使えるyo しかも、止まった位置とは別のラジオボタンをクリックすると、そこから再生をスタートさせることもできちゃうyo なかなか優れモノだろw 複数のラジオボタンがチェックされてる場合は、一番後のクロックの位置からスタートするyo(妥当笑)
次はコピー機能に「COPY #4 ↓」を追加したyo これは4小節単位の終わりに細かなオカズを叩いて変化をつけることが多いと思うけど、複雑なパターンを入力したものをまた何回も指定し直すのはダルいよne しかも全体コピーしたくても途中をすでにいじってるから、やり直しになっちゃうんだよな〜というようなときに、4小節目の倍数だけを縦方向にコピーできる機能だyo 細かい機能だけどあれば助かるよne(微笑)
そして最後に、画面上部の空きスペースにミニ鍵盤を押し込んだyo こいつはPCのキーボードで演奏するタイプなので、MacのUS Keyboard配列でキミも演奏してくれyo(互換性無視笑) まあ、USB MIDIでつないだキーボードからも演奏できるので持ってる人はそちらでw Zkun Keyboardでは鍵盤画面にオマケでリズムマシンをつけたけど、今度はドラムマシン画面にオマケでキーボードをつけたyo(苦笑) ヒューマンテンポのシャッフルを聴いてると思わず何か演奏したくなるだろ? そのために鍵盤をつけたというわけだyo ただし今回のやつはマウスクリックでの演奏は割愛したyo あれは正直言って実用的じゃないからne(失笑)
いやあ、我ながら物凄い量の小ネタをねじ込んだものだyo(呆れ笑) でも、やればやるほど、まだまだアイデアがわいて来る状態だyo この先の展開を左右するようなコロンブスの卵的発想のアイデアもひらめいたけどそれはまだ秘密にしておくyo いつか、「どうだい、これがあの時ちらっとほのめかしてた『コロたま』だyo(ドヤ顔笑)」と書く日がくると思うので楽しみにしててくれyo(含み笑)
またバグ発見したけどすぐ直したyo 2進数、16進数、10進数が入り乱れて、桁揃えのためにゼロを足したりといろいろやっていて、前のバージョンではちゃんと動いていたものが、スクリプトを短くするために式をまとめたり、一度に記述したりすると、なぜか特定の値が出てきたときだけ予期せぬ挙動をしたりするので難解だyo まあ、とりあえず前のバージョンの記述方法に戻すことで正常に動くようになったけど、まだ理屈が把握できないyo まあ、まだボクの分からないマイナーなルールがあるんだと思うyo(苦笑) とりあえず正しく動いてくれれば細かな理屈はわからなくてもいいけど、こういうこともあるから正常に動いている時点のバージョンをこまめに保存して、いつでも元のスクリプトを参照できるようにしておくことは重要だよne 今、Beat v1.6で約1090行のソースになっているから、バグを直すのもかなりたいへんになってきてるyo 開発をドンドン進めてるけど、製品テストの時間をあまりとってないので、もうちょっと試用時間を多くすれば、まだまだ細かなバグがみつかるかもしれないne バグを潰しきってから次のステップへ進まないと、あとあと修正するのはたいへんかもねw もうちょっと思いついてることがあるので、それを搭載したらしばらく実用テストに時間をかけようと思うyo 漢字辞書ももう少し字の意味と内容の関係性をもたせたいと思うので、ちょっと時間をかけて調整してから仕様を確定させたいと思うんだよne(野心的笑)
Zkun Beatの進化は止まらないyo 入力簡略化の機能をさらに強化したyo 第1小節を全体にコピーするボタン、第1〜4小節を全体にコピーするボタンをつけたyo これで基本となるリズムをいったん全体に仮コピーしておいて、変化をつけるところだけいじればよくなるから、入力の手間がますます省けるようになったyo(優れ笑)
あと、黄色いセレクタは横方向に自動コピー入力できて便利なんだけど、時にはコピーしない方が助かる場合もあるよne そんなときのために黄色いセレクタの機能をON/OFFできるボタンもつくったyo OFFにすると黄色い着色が消えるので、見た目上もすぐ区別がついてわかりやすい機能だyo(賢い笑)
さらに面白機能として、テキストをコピペしてパターンデータを入出力する機能をつけたyo クッキー保存はすでに導入しているけど、テキストでパターンのやり取りができるようになると、掲示板上に文字列を貼るだけでファイル交換ができるので便利じゃないかなw メールでパターンを送ることもできるしne(未来的笑) えらく高機能になってきたyo(ドヤ顔笑)
あと、黄色いセレクタは横方向に自動コピー入力できて便利なんだけど、時にはコピーしない方が助かる場合もあるよne そんなときのために黄色いセレクタの機能をON/OFFできるボタンもつくったyo OFFにすると黄色い着色が消えるので、見た目上もすぐ区別がついてわかりやすい機能だyo(賢い笑)
さらに面白機能として、テキストをコピペしてパターンデータを入出力する機能をつけたyo クッキー保存はすでに導入しているけど、テキストでパターンのやり取りができるようになると、掲示板上に文字列を貼るだけでファイル交換ができるので便利じゃないかなw メールでパターンを送ることもできるしne(未来的笑) えらく高機能になってきたyo(ドヤ顔笑)
とりあえず長い小節数をループできるようにしてしまおうということで改造したyo 最初はひたすら右へ伸ばして横に移動しながら操作するものを作ってみたyo それだけならほんの3分で改造が完了したyo(失笑) もともとそういう構造になっていたから、右へむかってリピート回数を増やすだけw ただ、それだとリピートの状況とかもわかりにくいし、パターンを見通しにくいからあまり使い勝手のいいものにはならないよne やはり4小節単位でのループを考えるならば画面を折り返さなくちゃねw
ところが、これを実際にプログラムしようとすると、めちゃくちゃ面倒くさいw(大苦笑) 柔軟構造でインスト数を自由に増減できるようにしているから、何小節にしてインストいくつにした場合の各行の先頭小節に作るFORMはいったい何番目のFORMになるか、とか細かい設定をシミュレーションして作らないといけないので、なかなか骨の折れる作業になったyo v1.4のバグ取りで非常に鍛えられたせいか、かなり完成度の高いv1.5に仕上がったyo
内部構造を完璧に構築したので、4の倍数ならば理論上何百小節でも増設可能だyo まあ、操作がめんどくさいし、動作も重くなるから実際は無茶な話だろうけどne とりあえず32小節までのループができるようにしてあるので、童謡とか短いオールディーズならこれで直入力可能かもねw
ところが、これを実際にプログラムしようとすると、めちゃくちゃ面倒くさいw(大苦笑) 柔軟構造でインスト数を自由に増減できるようにしているから、何小節にしてインストいくつにした場合の各行の先頭小節に作るFORMはいったい何番目のFORMになるか、とか細かい設定をシミュレーションして作らないといけないので、なかなか骨の折れる作業になったyo v1.4のバグ取りで非常に鍛えられたせいか、かなり完成度の高いv1.5に仕上がったyo
内部構造を完璧に構築したので、4の倍数ならば理論上何百小節でも増設可能だyo まあ、操作がめんどくさいし、動作も重くなるから実際は無茶な話だろうけどne とりあえず32小節までのループができるようにしてあるので、童謡とか短いオールディーズならこれで直入力可能かもねw
Beat v1.4でクッキー保存がなんだか途中からおかしくなって、どこをどう検証してみてもおかしいところはないように思われる。セレクトとオプションの動作自体は論理的に正しく反応しているし、idとかinnerHTMLもずれてるわけでもない。じゃあ、なんでクッキーが崩れるの? と不思議に思い、変数を片っ端から表示させてみても特に異常はない。最終的にクッキーを読み書きする汎用ルーチンの部分になにか問題があると考えた。
この汎用ルーチン自体は以前から別のスクリプトで安定して動いていたもので信頼を置いていたのだが、どう考えてもここでトラブっているとしか考えられない。document.cookieそのものを大きなテキストエリアに表示して挙動を見てみた。すると、こちらの読み込み動作に反応して、キーワードにひっかかる部分がその都度前へ送り出されているようだ。こんな挙動をしているとは夢にも思ってなかったw そして、Keyword=という行が出てくるよりも前に、なんだかよくわからんkeyword%、、、みたいな行があって、それが邪魔をしているようだった。その行にはoptionという単語や、ほかのキーワード名がいくつか並んでいたので、ははあ!と勘づいたyo
その行は、おそらくパターン名をつけてクッキーに書き込みを行い、その名前で<option>をつくってidをその名前でつけて、<select>の内部に入れこむ作業を行ったときになぜか生成される一時的な文字列で、そいつもdocument.cookieを仮置き場に使っていたということのようなのだw それでいくらやっても途中から正しく読み込めなくなっていたみたい。こんなの、どんな本を読んでも調べることも気付くこともできないよwww(無理ゲー笑)
そこで、これまではそんな妨害を受けたことがなかったので正常に機能していたクッキー読み書き汎用ルーチンを一部改造して、「keyword=」まで「=」を含めて検索させるようにしたら、document.cookieの先頭にほしいデータが現れるようになり、正しくパターンデータを取り出せるようになったyo かなり焦ったけど、原因を着実につきとめていけば、直せないバグはないよne こんなことをしてるうちに、Safariのメニューで「開発」というところをいろいろいじっていくと、どこでエラーが発生しているか、どんなタイプのエラーなのかがある程度表示されるということもわかってきたし、なかなか便利な時代になってきたなあと実感したyo まあ、以前はほんとにテキストエディタのみで書いていたのでバグとりは鬼だったけどw(死笑)
でも、今回のクッキーの不具合は、文法自体にエラーがあったものではなく、勝手に違う場所から見当はずれなデータを読もうとして、結果期待する処理が完了しないという不具合なので、システム上のエラーメッセージが発生せず、いったいどこが悪さしてるのかがさっぱりわからないものだったyo(大苦笑) それでも解決しちゃうんだからボクの分析能力もなかなかたいしたものだと思わないかい?(ドヤ顔笑)
この汎用ルーチン自体は以前から別のスクリプトで安定して動いていたもので信頼を置いていたのだが、どう考えてもここでトラブっているとしか考えられない。document.cookieそのものを大きなテキストエリアに表示して挙動を見てみた。すると、こちらの読み込み動作に反応して、キーワードにひっかかる部分がその都度前へ送り出されているようだ。こんな挙動をしているとは夢にも思ってなかったw そして、Keyword=という行が出てくるよりも前に、なんだかよくわからんkeyword%、、、みたいな行があって、それが邪魔をしているようだった。その行にはoptionという単語や、ほかのキーワード名がいくつか並んでいたので、ははあ!と勘づいたyo
その行は、おそらくパターン名をつけてクッキーに書き込みを行い、その名前で<option>をつくってidをその名前でつけて、<select>の内部に入れこむ作業を行ったときになぜか生成される一時的な文字列で、そいつもdocument.cookieを仮置き場に使っていたということのようなのだw それでいくらやっても途中から正しく読み込めなくなっていたみたい。こんなの、どんな本を読んでも調べることも気付くこともできないよwww(無理ゲー笑)
そこで、これまではそんな妨害を受けたことがなかったので正常に機能していたクッキー読み書き汎用ルーチンを一部改造して、「keyword=」まで「=」を含めて検索させるようにしたら、document.cookieの先頭にほしいデータが現れるようになり、正しくパターンデータを取り出せるようになったyo かなり焦ったけど、原因を着実につきとめていけば、直せないバグはないよne こんなことをしてるうちに、Safariのメニューで「開発」というところをいろいろいじっていくと、どこでエラーが発生しているか、どんなタイプのエラーなのかがある程度表示されるということもわかってきたし、なかなか便利な時代になってきたなあと実感したyo まあ、以前はほんとにテキストエディタのみで書いていたのでバグとりは鬼だったけどw(死笑)
でも、今回のクッキーの不具合は、文法自体にエラーがあったものではなく、勝手に違う場所から見当はずれなデータを読もうとして、結果期待する処理が完了しないという不具合なので、システム上のエラーメッセージが発生せず、いったいどこが悪さしてるのかがさっぱりわからないものだったyo(大苦笑) それでも解決しちゃうんだからボクの分析能力もなかなかたいしたものだと思わないかい?(ドヤ顔笑)
4小節までのループならこれでオッケーだyo 最大16インストまで同時使用できるように改造したyo 小節数(Bars)とインスト数(Instruments)をセレクトして「Redraw」ボタンを押せば画面が更新されて新しいグリッドが出現するyo
各インストはセレクタで自由に指定できるyo しかも、各インストごとにベロシティー調整のスライダーをつけたので、音量バランスの調整ができるyo どうしてもシンバルの「強」と「弱」を鳴らしたいと思ったら、シンバルを2つ別々にインストにアサインして、ベロシテイーで差をつけてやればいいyo(解決笑)
さらに進化させたのは、クッキー保存に対応させたことだyo 作ったパターンに名前をつけて保存して画面上のリストウインドウに名前を表示し、そいつを選択してロードボタンを押せば、そのパターンの設定が画面上に展開されるようにしたyo これで手軽にいくつものパターンを切り替えて演奏できるようになったne ちなみにPLAY中でもリアルタイムでパターンが切り替わるのでなかなかよく動いてるyo
4小節までならほぼバッチリというところまで完成したので、英語版も作って海外向けリリースをするyo 英語版のほうでは意味不明と思われるので「漢字表示」は非表示にしてるyo(苦笑) まあ、内部ではバッチリ漢字変換しながら動いてるんだけどne(含み笑)
各インストはセレクタで自由に指定できるyo しかも、各インストごとにベロシティー調整のスライダーをつけたので、音量バランスの調整ができるyo どうしてもシンバルの「強」と「弱」を鳴らしたいと思ったら、シンバルを2つ別々にインストにアサインして、ベロシテイーで差をつけてやればいいyo(解決笑)
さらに進化させたのは、クッキー保存に対応させたことだyo 作ったパターンに名前をつけて保存して画面上のリストウインドウに名前を表示し、そいつを選択してロードボタンを押せば、そのパターンの設定が画面上に展開されるようにしたyo これで手軽にいくつものパターンを切り替えて演奏できるようになったne ちなみにPLAY中でもリアルタイムでパターンが切り替わるのでなかなかよく動いてるyo
4小節までならほぼバッチリというところまで完成したので、英語版も作って海外向けリリースをするyo 英語版のほうでは意味不明と思われるので「漢字表示」は非表示にしてるyo(苦笑) まあ、内部ではバッチリ漢字変換しながら動いてるんだけどne(含み笑)
v1.3での追加点は、作成できるループ長を1〜4小節にのばしたことと、4つのインストをそれぞれ自由に選択指定できるようにしたことだyo それに伴い、先頭小節でセレクタを使ってパターンを入力すると、そのインストの後続小節にも自動的に同じパターンが仮入力される「オートコピー機能」を搭載してみたyo ほとんどの場合、基本となるビートパターンは同じで一部に変化を入れるというのがセオリーだから、この「オートコピー機能」は入力の手間を省くのに絶大な効果を発揮すると思うyo もちろん、仮入力された後も各小節についているセレクタで独自に変更することができるし、直接各グリッドのチェックボックスをクリックして細かくエディットすることができるyo
でも、進化はまだまだこんなもんじゃないyo 今すでに次のv1.4が半分以上完成してるけど、次は一挙に大進化するyo 4小節までならほとんどこれでいいんじゃないか?というところまでいくyo(含み笑) そうすると、その次のv1.5は当然4小節よりも長いループへと目が行くんだけど、それ以上の長さになってくると、ループというよりは「曲」になってくるよne しかも、5小節とか7小節のループとかはまず利用されず、ほとんどが4の倍数でたまに1とか2とかが混ざるというのが実態だよne つまり、最長4小節のループを並べていくことでそれ以上の長さのループを構成していけば実際は事足りるし、むしろ8小節もの長いループを個別に作っても再利用する機会が少なく、4小節単位で統一したほうが効率がよいかなとも思うんだよne つまり、そこから先はソングエディターにしたほうがいいんじゃないかということだyo
まあ、純粋に技術的な興味もあるからv1.5でとりあえず8小節ループも作ってみるyo それが完成すれば、16も32も64も同様にできるから、長くすることに関しては開発完了するからne ただ、実際は4小節単位で組み立てる方向性でv1.6以降を構想していこうと思うyo(技術者笑)
でも、進化はまだまだこんなもんじゃないyo 今すでに次のv1.4が半分以上完成してるけど、次は一挙に大進化するyo 4小節までならほとんどこれでいいんじゃないか?というところまでいくyo(含み笑) そうすると、その次のv1.5は当然4小節よりも長いループへと目が行くんだけど、それ以上の長さになってくると、ループというよりは「曲」になってくるよne しかも、5小節とか7小節のループとかはまず利用されず、ほとんどが4の倍数でたまに1とか2とかが混ざるというのが実態だよne つまり、最長4小節のループを並べていくことでそれ以上の長さのループを構成していけば実際は事足りるし、むしろ8小節もの長いループを個別に作っても再利用する機会が少なく、4小節単位で統一したほうが効率がよいかなとも思うんだよne つまり、そこから先はソングエディターにしたほうがいいんじゃないかということだyo
まあ、純粋に技術的な興味もあるからv1.5でとりあえず8小節ループも作ってみるyo それが完成すれば、16も32も64も同様にできるから、長くすることに関しては開発完了するからne ただ、実際は4小節単位で組み立てる方向性でv1.6以降を構想していこうと思うyo(技術者笑)
Recorder v1.0は接続したMIDIキーボードからの演奏をレコーディングして、プレイバックしたりMIDIファイルに保存したりできるプログラムだyo Examplesのやつは録音中にモニター音が出ないし演奏の内容も表示されないけど、Recorder v1.0ではそこを改造して可能にしているyo まだまだ改良の余地があるけどとりあえず最低限の機能でリリースしてみたyo
Beat v1.2では2小節のドラムパターンをループ再生できるようにしたyo 単に2倍にしただけでなく、エレメントの自動生成方式に内部構造を作り替えたので、今後容易に小節数を増やしていくことができるようになったyo さらに、今どこのタイミングを演奏しているかを点灯するインジケーターもつけたので、ドラムマシーンっぽさが増したyo(微笑)
Beat v1.2では2小節のドラムパターンをループ再生できるようにしたyo 単に2倍にしただけでなく、エレメントの自動生成方式に内部構造を作り替えたので、今後容易に小節数を増やしていくことができるようになったyo さらに、今どこのタイミングを演奏しているかを点灯するインジケーターもつけたので、ドラムマシーンっぽさが増したyo(微笑)