zkunがいろんなことを横書きするブログのようですw(含み笑)
コード進行情報からベースラインを自動生成する機能を搭載したyo 「ああ、よくある子ども騙しみたいな幼稚なラインしか作れないやつかw」とふつうは思うだろうne。。。(含み笑)
まあ、聴いてみてくれyo しかも、STOP/PLAYを押すごとに瞬時にまた別のラインを生成しちゃうんだから、ちょっとやそっとのスタジオベーシストならもうお帰りいただいてもいいくらいの凄い出来だyo(呆れ笑)
理屈の上ではまあまあいい線いきそうなものができそうだなとは予想していたけど、これほどとはw ベーシストが脳内で反射的に考えてるようなことをおおかた演算させているので、あとは手数が多くて速くて正確で疲れも痛みも感じないんだから、Zkun Beatの勝ちだろうne これはかなり目指していたものに近づいてきた感触があるyo
しかも、今回「Hits Change」のセレクタ指定方法により、オカズの挿入を擬似的に成功させているので、これをドラムにも応用すれば、ドラムパートもある程度放置しといても勝手に気をきかせて変化をつけるようなコントロールがつくれそうだyo
ところで、いろいろテスト入力して動作確認をしているうちに、ここまできたなら分数コード機能もつけないと勿体ないなと思うようになったyo 理屈的には構成音の配列を1行増やしてそこに低音をアサインすればいいだけなので寝ながらでもできそうな改造だからne(余裕笑)
ところで、いろいろテスト入力して動作確認をしているうちに、ここまできたなら分数コード機能もつけないと勿体ないなと思うようになったyo 理屈的には構成音の配列を1行増やしてそこに低音をアサインすればいいだけなので寝ながらでもできそうな改造だからne(余裕笑)
PR
出来はかなりいいですw(絶賛笑) Pianoメニューに選択肢チェックボックスが1つ増えて、アルペジオパターンを選べるセレクタが横についただけだけど、想像以上に表現力が増強されたyo これはちょっとした程度のスタジオピアニストなら帰ってもらってもいいくらいいい仕事をする伴奏マシンだyo
これをプログラムする前に、色々参考にしている文献にまたひと通り目を通してみたyo そこには、そもそもアルペジオはどういう風に鳴っているのかというようなウンチクが書いてあったyo(苦笑) それを読まずに作り始めていたら、1クロックごとにブツ切りでON/OFFするだけのデジデジしたマシンシークエンサーを作ったところだろうne(失笑) そこにはこんなことが書いてあったyo アルペジオの各音は思ってる以上に持続して鳴っていると。さらには、同じようなパターンでも拍の強弱をつけるだけで随分メリハリがつく、と。なるほど、順番に鳴るからってただクロック単位で切らずに、少しは持続させて次の音とかぶらせたほうがアルペジオらしさが出るんだne そこでボクは各音を2クロック長で鳴らすことにしたyo あんまり重ねるとコードみたいになっちゃうから、まあ常に2音が重なっている状態になるようにOFFのタイミングを設定したyo あとは強弱。これは4クロックの先頭にルートが来るのでこれを最強にして、3クロック目を次に強くして、残りをやや弱めというベロシティ設定で鳴らすようにしたyo こんな単純な設定でも十分効果的だからne
さらにはzkunお得意のランダム要素もつっこんだyo 12種類のアルペジオパターンのいずれかをその都度ランダムに選ぶ「Random」モードもつけたyo さらに工夫して、パターンを2拍ごとに替える「Random by 2」、1小節ごとに替える「Random by 4」もつくったyo スローテンポの曲で使えばかなりの効果を発揮すると思うyo 今回のデモソングは「偽物っぽい階段」だyo アルペジオといえば階段だよne(苦笑) どのアルペジオパターンに替えたらモノホンに一番近づくか各自で試してみてyo 似て非なるものにしかならないけどne(さすがに笑)
次はベースパターンもコード進行情報から無理矢理生成しちゃうモードをつくろうかな。それが出来たら、コード情報とベースパート、ピアノパートが一体化するからne 半自動化の流れが着々と進みつつあるyo(含み笑)
これをプログラムする前に、色々参考にしている文献にまたひと通り目を通してみたyo そこには、そもそもアルペジオはどういう風に鳴っているのかというようなウンチクが書いてあったyo(苦笑) それを読まずに作り始めていたら、1クロックごとにブツ切りでON/OFFするだけのデジデジしたマシンシークエンサーを作ったところだろうne(失笑) そこにはこんなことが書いてあったyo アルペジオの各音は思ってる以上に持続して鳴っていると。さらには、同じようなパターンでも拍の強弱をつけるだけで随分メリハリがつく、と。なるほど、順番に鳴るからってただクロック単位で切らずに、少しは持続させて次の音とかぶらせたほうがアルペジオらしさが出るんだne そこでボクは各音を2クロック長で鳴らすことにしたyo あんまり重ねるとコードみたいになっちゃうから、まあ常に2音が重なっている状態になるようにOFFのタイミングを設定したyo あとは強弱。これは4クロックの先頭にルートが来るのでこれを最強にして、3クロック目を次に強くして、残りをやや弱めというベロシティ設定で鳴らすようにしたyo こんな単純な設定でも十分効果的だからne
さらにはzkunお得意のランダム要素もつっこんだyo 12種類のアルペジオパターンのいずれかをその都度ランダムに選ぶ「Random」モードもつけたyo さらに工夫して、パターンを2拍ごとに替える「Random by 2」、1小節ごとに替える「Random by 4」もつくったyo スローテンポの曲で使えばかなりの効果を発揮すると思うyo 今回のデモソングは「偽物っぽい階段」だyo アルペジオといえば階段だよne(苦笑) どのアルペジオパターンに替えたらモノホンに一番近づくか各自で試してみてyo 似て非なるものにしかならないけどne(さすがに笑)
次はベースパターンもコード進行情報から無理矢理生成しちゃうモードをつくろうかな。それが出来たら、コード情報とベースパート、ピアノパートが一体化するからne 半自動化の流れが着々と進みつつあるyo(含み笑)
とは言っても、まだベースとの関係性を構築してないので不完全だけどne(含み笑) まずはデザインを見てくれyo もともとのタイトルバーと一体化したかのような各拍ごとのコード表示エリアw 最初はシマシマ模様になったり、バーが太くなり過ぎたりと苦戦したけど、このデザインにたどりついたときに「これしかないne」と思ったyo コードの表示がなかったら前バージョンとの違いに気が付かないくらいだろw こういうのを必然性のあるデザインって言うんじゃなイカ?
コードについては、そもそもが数学的に理路整然と出来ているから、プログラムで扱うのは実に容易でシンプルだne あまりに簡単なのでやる予定もなかったテンションコードも13thまで欲張って搭載しちゃったyo(使えるのか笑) タイトルバーに直接キー入力していく方式だから、人によって結構バラつきのある表記になってしまうだろうけど、一般的な表記であれば順番が違おうがスペースが空こうがだいたい認識できるように設計してるyo まあ、詳しくはヘルプを見てくれyo
あとはボクのオリジナルの工夫があるyo 「X」で消音、「p」でパワーコード指定、「?」で8分音符連打、「!」で16分音符連打だyo 基本的に4分音符単位でのコード指定なので、それよりも短い長さでの指定はしにくいんだけど、リフとかでありがちの音符連打の再現ならば細かい指定は不要だから裏技的にプログラムしてみたyo これはかなり使えるかもw
デモソングは豚貴族の「嘘つき」から4小節を拝借して、!や?を無理矢理使ってアレンジしてみたyo(苦笑) 自動生成してるとは思えないくらいアピール感のあるピアノ伴奏になってるyo(呆れ笑)
次はとりあえずアルペジオやってみようかw コードはもうできてるから、順番にON/OFFする仕組みをつくればいいだけだからne ジワジワと侵略していくyo(侵略者笑)
コードについては、そもそもが数学的に理路整然と出来ているから、プログラムで扱うのは実に容易でシンプルだne あまりに簡単なのでやる予定もなかったテンションコードも13thまで欲張って搭載しちゃったyo(使えるのか笑) タイトルバーに直接キー入力していく方式だから、人によって結構バラつきのある表記になってしまうだろうけど、一般的な表記であれば順番が違おうがスペースが空こうがだいたい認識できるように設計してるyo まあ、詳しくはヘルプを見てくれyo
あとはボクのオリジナルの工夫があるyo 「X」で消音、「p」でパワーコード指定、「?」で8分音符連打、「!」で16分音符連打だyo 基本的に4分音符単位でのコード指定なので、それよりも短い長さでの指定はしにくいんだけど、リフとかでありがちの音符連打の再現ならば細かい指定は不要だから裏技的にプログラムしてみたyo これはかなり使えるかもw
デモソングは豚貴族の「嘘つき」から4小節を拝借して、!や?を無理矢理使ってアレンジしてみたyo(苦笑) 自動生成してるとは思えないくらいアピール感のあるピアノ伴奏になってるyo(呆れ笑)
次はとりあえずアルペジオやってみようかw コードはもうできてるから、順番にON/OFFする仕組みをつくればいいだけだからne ジワジワと侵略していくyo(侵略者笑)
アクセス状況をみると、なぜかいまだにBeat v1.8へ定期的にアクセスしている人がいるみたいだけど何かあるのかなw(苦笑) v1.8と言えば、内部構造を配列変数方式に大改造したバージョンだけど。ブラウザによってはいくつかのJavaScript命令の認識の仕方が異なるため、Safariで動いてるものがちゃんと動かない可能性はあるらしいけどne 今回、ボクはあくまで自分が利用するためのアプリを開発しようという目的で、Safari以外での動作は保証しないとしているけど、「キャビ研究所」の開発のときに、OperaやらFireFoxでも動くように対応させた実績もあるので、技術的にできないというわけでもないyo 根本的に大改造が必要になるようなのは無理だけど、些細な変更ならば各ブラウザ対応できないこともないので、もし「これをなんとかしてくれ」という要望があれば、このブログにコメントをつけてみてyo
多分これは動かないかも、というのはFireFoxではBASS EDITORが動かないんじゃないかなと思うyo マウスイベント取得時の記述方法がFireFoxだけ特殊なので「キャビ研究所」のときも難儀したんだよne 今回はFireFox対応させるためにスクリプトを超ややこしくしてその後の開発にも支障が出る様なことにしたくないので、あくまでSafariほかのブラウザ向けで記述してるyo なので、FireFoxの場合制約が出てくるだろうなというのはわかってるyo
各ブラウザ対応は、商業ベースでやってる場合はかなり重要で時間をさいて解決しなくちゃいけない課題だろうne それが足かせになり過ぎるとソフトの中身の開発にしわ寄せがいくと思うので、商業ソフトでも「IE専用」とか「Chrome専用」とかが出てきてもいいんじゃないかと思うyo だって、どうせみんな無料でブラウザをDLしてるわけだし、実にささいなこだわりで「俺はこのブラウザがいいんだ!」と主張してるに過ぎないからw(苦笑) 必要に応じてブラウザを使い分けるくらいのことをユーザー側がやったほうが、プログラム業界全体にとって利益になるんじゃないかなと思うyo ま、常々「Mac非対応」の壁に泣かされてきたボクだから、ブラウザの壁くらいなんだよ!って思うところもあるしne(大苦笑)
多分これは動かないかも、というのはFireFoxではBASS EDITORが動かないんじゃないかなと思うyo マウスイベント取得時の記述方法がFireFoxだけ特殊なので「キャビ研究所」のときも難儀したんだよne 今回はFireFox対応させるためにスクリプトを超ややこしくしてその後の開発にも支障が出る様なことにしたくないので、あくまでSafariほかのブラウザ向けで記述してるyo なので、FireFoxの場合制約が出てくるだろうなというのはわかってるyo
各ブラウザ対応は、商業ベースでやってる場合はかなり重要で時間をさいて解決しなくちゃいけない課題だろうne それが足かせになり過ぎるとソフトの中身の開発にしわ寄せがいくと思うので、商業ソフトでも「IE専用」とか「Chrome専用」とかが出てきてもいいんじゃないかと思うyo だって、どうせみんな無料でブラウザをDLしてるわけだし、実にささいなこだわりで「俺はこのブラウザがいいんだ!」と主張してるに過ぎないからw(苦笑) 必要に応じてブラウザを使い分けるくらいのことをユーザー側がやったほうが、プログラム業界全体にとって利益になるんじゃないかなと思うyo ま、常々「Mac非対応」の壁に泣かされてきたボクだから、ブラウザの壁くらいなんだよ!って思うところもあるしne(大苦笑)
ピアノ伴奏機能を大幅に強化したyo v2.4の3和音、パワーコード固定、音符長一定のみという仕様から、v2.5は4和音、7th,M7th,-5,+5なども指定可能、四分音符単位で自在に指定、というかなりの高機能に進化したyo まあ今回もHELPページに詳しく書いてるからそっちを見てくれyo
今回から新機能をお試ししやすいように短いフレーズをデフォルトデータではじめから入力しておくようにしたyo(親切笑) 昨日掲載した「ミスター大物」のフレーズをインプットしてあるyo 音符長のパターンをリアルタイムでいろいろ切り替えながら試してみてくれyo
コードもボタンさえ追加していけば5和音でも6和音でもいくらでも作れるけど、まあそこまで無理にテンションコード使うつもりもないからne(失笑) 4和音まででもうちょっと特殊なものを網羅するくらいかな。
そうなってくると、ただベースパートから音を貰ってくるだけというのは勿体ない感じがするne ベースラインしだいで、せっかく正確に鳴らせる機能を持て余して不適切なコードをひいてしまうことも起こりうるわけだから。むしろ、「正データ」として「コード進行」を持たせて、「正データ」からピアノパートを生成し、ベースパートも同じ感覚で「正データ」から生成できるようにしちゃったらどうか。もちろん、現行のように自由にベースパートも打ち込めるし、ベースパートからピアノパートを生成することもできる。それらを自由に選べるようにするというわけyo そうなると自由度がますますアップするよne
そのコード進行はどこに保存するかというと、実は1カ所データフォーマットの中で遊んでる場所があるんだよne ベースパートの「簡易表示」を当初そのまんまテキスト保存していたときに使っていた、インスト1の4番パラメータが今余ってるんだよne そこにその小節のコード進行情報を持たせるようにすれば、他のデータには一切影響を与えずにv2.1フォーマットに格納させることができるyo
さらに思うのは、コード進行情報を持たせるにしても、曲のキーからの差分情報を持たせるようにしたほうが将来的に使い回しをしたり、トランスポーズしたりするときに加工が容易になるんじゃないかなと思うんだよne まだこの先どうなるかわからないけど、データの記述の仕方としてはその点を注意しておこうと思うyo(技術者笑)
今回から新機能をお試ししやすいように短いフレーズをデフォルトデータではじめから入力しておくようにしたyo(親切笑) 昨日掲載した「ミスター大物」のフレーズをインプットしてあるyo 音符長のパターンをリアルタイムでいろいろ切り替えながら試してみてくれyo
コードもボタンさえ追加していけば5和音でも6和音でもいくらでも作れるけど、まあそこまで無理にテンションコード使うつもりもないからne(失笑) 4和音まででもうちょっと特殊なものを網羅するくらいかな。
そうなってくると、ただベースパートから音を貰ってくるだけというのは勿体ない感じがするne ベースラインしだいで、せっかく正確に鳴らせる機能を持て余して不適切なコードをひいてしまうことも起こりうるわけだから。むしろ、「正データ」として「コード進行」を持たせて、「正データ」からピアノパートを生成し、ベースパートも同じ感覚で「正データ」から生成できるようにしちゃったらどうか。もちろん、現行のように自由にベースパートも打ち込めるし、ベースパートからピアノパートを生成することもできる。それらを自由に選べるようにするというわけyo そうなると自由度がますますアップするよne
そのコード進行はどこに保存するかというと、実は1カ所データフォーマットの中で遊んでる場所があるんだよne ベースパートの「簡易表示」を当初そのまんまテキスト保存していたときに使っていた、インスト1の4番パラメータが今余ってるんだよne そこにその小節のコード進行情報を持たせるようにすれば、他のデータには一切影響を与えずにv2.1フォーマットに格納させることができるyo
さらに思うのは、コード進行情報を持たせるにしても、曲のキーからの差分情報を持たせるようにしたほうが将来的に使い回しをしたり、トランスポーズしたりするときに加工が容易になるんじゃないかなと思うんだよne まだこの先どうなるかわからないけど、データの記述の仕方としてはその点を注意しておこうと思うyo(技術者笑)
ベースラインから情報を取得して再生時に勝手に和音で伴奏をつけてくれる機能をつけたyo まあ、今のところ4分音符単位までのパワーコードだけなんだけどne(苦笑) まあ、詳しい説明はv2.4のHELPに書いておいたからそこを見てくれyo
今のところ各拍の先頭クロックにあるベース情報だけを拾わせているので、シンコペーションしてたり、ベースが休んだりしてると伴奏も崩れてしまうというか、キーチェンジをせずにそのまま同じ和音を繰り返す仕様にしてるので、これまでのサンプル曲で必ずしも全部ナイスな伴奏にはならないだろうne(失笑) まあ、そのへんは今後の進化に期待だne なんとなくどういう風につくったらいいか見えてきたから。ベースを作ったときに考案したルーチンの応用で、とりあえず1小節分のオンオフ予定表をつくっちゃえばいいんだyo(含み笑)
さて、今回は自動伴奏機能の効果がよくわかるような「ミスター大物」バンドの8小節ループを用意したyo このまま読み込ませて再生し、PIANO MENUでセレクタを「8 clock chord」か「4 clock chord」にすれば、勝手にピアノでコードを付けてくれるyo(微笑)
<header>,zd4,2.1,8,4,90,0,2,6,29,110,70,0,0,3,80,80,2,0,110,40,8,0,0,90,64,</header>,<#1>,<i1>,33,114,いんいて、からい、しよい、ううく、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#1>,<#2>,<i1>,33,114,いあいて、かあい、しあい、うんい、にんい、のんい、たんい、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#2>,<#3>,@#1,,,,</#3>,<#4>,<i1>,33,114,いあいて、かあい、しあい、うんい、にんい、のんい、たじい、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#4>,<#5>,@#1,,,,</#5>,<#6>,<i1>,33,114,いあいて、かあい、しあい、うしい、にじい、のあい、たよい、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#6>,<#7>,@#1,,,,</#7>,<#8>,<i1>,33,114,いあいて、かあい、しあん、うんい、にんい、のしい、たしい、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#8>,,,,,,,,,,,,,,,,,,,,,,,,
今のところ各拍の先頭クロックにあるベース情報だけを拾わせているので、シンコペーションしてたり、ベースが休んだりしてると伴奏も崩れてしまうというか、キーチェンジをせずにそのまま同じ和音を繰り返す仕様にしてるので、これまでのサンプル曲で必ずしも全部ナイスな伴奏にはならないだろうne(失笑) まあ、そのへんは今後の進化に期待だne なんとなくどういう風につくったらいいか見えてきたから。ベースを作ったときに考案したルーチンの応用で、とりあえず1小節分のオンオフ予定表をつくっちゃえばいいんだyo(含み笑)
さて、今回は自動伴奏機能の効果がよくわかるような「ミスター大物」バンドの8小節ループを用意したyo このまま読み込ませて再生し、PIANO MENUでセレクタを「8 clock chord」か「4 clock chord」にすれば、勝手にピアノでコードを付けてくれるyo(微笑)
<header>,zd4,2.1,8,4,90,0,2,6,29,110,70,0,0,3,80,80,2,0,110,40,8,0,0,90,64,</header>,<#1>,<i1>,33,114,いんいて、からい、しよい、ううく、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#1>,<#2>,<i1>,33,114,いあいて、かあい、しあい、うんい、にんい、のんい、たんい、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#2>,<#3>,@#1,,,,</#3>,<#4>,<i1>,33,114,いあいて、かあい、しあい、うんい、にんい、のんい、たじい、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#4>,<#5>,@#1,,,,</#5>,<#6>,<i1>,33,114,いあいて、かあい、しあい、うしい、にじい、のあい、たよい、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#6>,<#7>,@#1,,,,</#7>,<#8>,<i1>,33,114,いあいて、かあい、しあん、うんい、にんい、のしい、たしい、,,</i1>,<i2>,54,126,甘甘,,</i2>,<i3>,42,106,甘甘,,</i3>,<i4>,36,112,峠峠,,</i4>,</#8>,,,,,,,,,,,,,,,,,,,,,,,,
エディター画面で実際にどんな演奏になるのか音を確認できるかどうかは重要だよne そこで、通常の全体ループルーチンのサブセット版をつくって、エディターでの操作状況を反映させて1小節分だけベースをループさせる仕組みをつくったyo なんだ、簡単そうじゃないかと思うかもしれないけど、8小節とかある程度長さがあるものと違い、1小節ならではのややこしさがあって、バグとりにはかなり苦戦したyo
とにかくややこしいのは、小節をまたいで音が鳴る場合の処理だyo ドラム音の場合はMIDI NOTE ONだけ送ってやれば、鳴って勝手に減衰して消えてくれるんだけど、ベースの場合はそのままでは鳴りっぱなしになってしまうので、必ずMIDI NOTE OFF信号も送ってやらないといけないyo 複数小節がある場合は、次の小節の配列のあふれ情報受け入れ部分に数値を渡しておけばよかったけど、1小節しかない場合はそこらあたりの処理手順をもういっぺん練り直さないとつじつまがおかしくなったりするので、けっこうめんどくさかったんだよne(プログラマー笑)まあ、こうやって音程楽器のループ処理の扱い方のプログラミングに関する知恵も蓄積されていくんだけどne(含み笑)
次のステップではいよいよ、勝手に演奏をかぶせてくるキーボードプレーヤーをプログラムしてみようかと思うyo 演奏データとして保存するのではなく、v2.1フォーマットのファイルを再生するときに、そのデータからベースパートの情報を読み取らせて、どういう音を鳴らすかを決めさせる「再生時オプション機能」みたいな感じで動かそうと思うyo 白玉音符でパワーコードを鳴らしたり、ベースの何度上をユニゾンさせたり、アルペジオさせたり、というようにいろんなオプション指定ができるようにすればおもしろいよne まあ、いきなり全部は無理だろうけどw(苦笑) Zkun Keyboard v1.0のときに移植したHarmonizerの関数があるから、あれを利用するだけでハモらせ機能はできるyo パワーコードでいいならベース簡易表示の|A|G|C|といったテキストを元に作成できるよne アルペジオをやろうとしたら、調性をどうするかとかいろいろ決めなくちゃいけないのでちょっと複雑になるだろうne まずは簡単なものから着手して基礎になる部分を固めて、そいつをアレンジするという方式でこれまでどおりジワジワと進化させていくyo(地道笑)
とにかくややこしいのは、小節をまたいで音が鳴る場合の処理だyo ドラム音の場合はMIDI NOTE ONだけ送ってやれば、鳴って勝手に減衰して消えてくれるんだけど、ベースの場合はそのままでは鳴りっぱなしになってしまうので、必ずMIDI NOTE OFF信号も送ってやらないといけないyo 複数小節がある場合は、次の小節の配列のあふれ情報受け入れ部分に数値を渡しておけばよかったけど、1小節しかない場合はそこらあたりの処理手順をもういっぺん練り直さないとつじつまがおかしくなったりするので、けっこうめんどくさかったんだよne(プログラマー笑)まあ、こうやって音程楽器のループ処理の扱い方のプログラミングに関する知恵も蓄積されていくんだけどne(含み笑)
次のステップではいよいよ、勝手に演奏をかぶせてくるキーボードプレーヤーをプログラムしてみようかと思うyo 演奏データとして保存するのではなく、v2.1フォーマットのファイルを再生するときに、そのデータからベースパートの情報を読み取らせて、どういう音を鳴らすかを決めさせる「再生時オプション機能」みたいな感じで動かそうと思うyo 白玉音符でパワーコードを鳴らしたり、ベースの何度上をユニゾンさせたり、アルペジオさせたり、というようにいろんなオプション指定ができるようにすればおもしろいよne まあ、いきなり全部は無理だろうけどw(苦笑) Zkun Keyboard v1.0のときに移植したHarmonizerの関数があるから、あれを利用するだけでハモらせ機能はできるyo パワーコードでいいならベース簡易表示の|A|G|C|といったテキストを元に作成できるよne アルペジオをやろうとしたら、調性をどうするかとかいろいろ決めなくちゃいけないのでちょっと複雑になるだろうne まずは簡単なものから着手して基礎になる部分を固めて、そいつをアレンジするという方式でこれまでどおりジワジワと進化させていくyo(地道笑)
v2.2でさっそく入力してみたyo 今回はあの有名悪態バンドのテンポ190の速めの曲を24小節ループだyo とは言ってもドラムは超シンプルなバンドだし、くり返し部分なのでコピー、コピーで入力はラクだったyo この程度ならばボクの場合はベースも直接スコアシートに入力したほうがてっとり早いne ドラムはパワーセットを選択し、ヒューマンテンポは前ノリをかけてるyo いやあ、打ち込みマシンとしてもかなり使い勝手がよくなイカ?(自画自賛笑) 9小節から14小節はリピート部分で前と同一なのでデータ量もかなり圧縮されてるyo(テクノロジー笑)
<header>,zd4,2.1,24,5,190,0,5,8,29,110,70,0,0,33,110,80,2,0,126,40,8,0,16,97,64,</header>,<#1>,<i1>,34,100,いのいて、かのい、しおい、とらい、うのい、にのい、のおい、たらい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,甘椿,,</i3>,<i4>,38,100,間甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#1>,<#2>,<i1>,34,100,いのいて、かのい、しのい、とのん、にのい、ののい、たのい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東美,,</i5>,</#2>,<#3>,<i1>,34,100,いいいて、かいい、しもい、とあい、ういい、にいい、のもい、たあい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,甘椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#3>,<#4>,<i1>,34,100,いいいて、かいい、といん、にいん、たもい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東美,,</i5>,</#4>,<#5>,<i1>,34,100,いがんて、しわい、とがん、にがい、のわい、たわい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,甘椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#5>,<#6>,<i1>,34,100,いいんて、しうい、といん、にいい、のうん、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,甘椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#6>,<#7>,<i1>,34,100,いのいて、かのい、しのい、とのい、うのい、にのい、ののい、たのい、,,</i1>,<i2>,46,100,甘甘,,</i2>,<i3>,42,100,峠峠,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東桜,,</i5>,</#7>,<#8>,<i1>,34,100,いのいて、かのい、しのい、とのい、うのい、にのい、ののい、たのい、,,</i1>,<i2>,46,100,甘甘,,</i2>,<i3>,42,100,峠峠,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,桜美,,</i5>,</#8>,<#9>,@#1,,,,,</#9>,<#10>,@#2,,,,,</#10>,<#11>,@#3,,,,,</#11>,<#12>,@#4,,,,,</#12>,<#13>,@#5,,,,,</#13>,<#14>,@#6,,,,,</#14>,<#15>,<i1>,34,100,いかいて、かかい、しさい、とさい、うにい、ににい、のめい、たちい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東桜,,</i5>,</#15>,<#16>,<i1>,34,100,いかいて、かかい、しさい、とさい、うにい、ににい、のちん、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,桜美,,</i5>,</#16>,<#17>,<i1>,34,100,いのいて、かのい、しおい、とらい、うのい、にのい、のおい、たらい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東東,,</i5>,</#17>,<#18>,<i1>,34,100,いのいて、かのい、しのい、とのん、にのい、ののい、たのい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,先東,,</i5>,</#18>,<#19>,<i1>,34,100,いいいて、かいい、しもい、とあい、ういい、にいい、のもい、たあい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東東,,</i5>,</#19>,<#20>,<i1>,34,100,いいいて、かもい、しいい、ともい、ういい、にいい、たもい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,先東,,</i5>,</#20>,<#21>,<i1>,34,100,いがいて、かがい、しわい、とがい、うがい、にがい、のわい、たわい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東東,,</i5>,</#21>,<#22>,<i1>,34,100,いいいて、かいい、しもい、といい、ういい、にいい、のもい、たもい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,先東,,</i5>,</#22>,<#23>,<i1>,34,100,いかいて、かかい、しかい、とかい、うかい、にかい、のかん、,,</i1>,<i2>,46,100,甘甘,,</i2>,<i3>,42,100,峠峠,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東東,,</i5>,</#23>,<#24>,<i1>,34,100,いないて、かない、しない、とない、うなん、,,</i1>,<i2>,46,100,甘甘,,</i2>,<i3>,42,100,峠峠,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,先晴,,</i5>,</#24>,,,,,,,,
<header>,zd4,2.1,24,5,190,0,5,8,29,110,70,0,0,33,110,80,2,0,126,40,8,0,16,97,64,</header>,<#1>,<i1>,34,100,いのいて、かのい、しおい、とらい、うのい、にのい、のおい、たらい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,甘椿,,</i3>,<i4>,38,100,間甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#1>,<#2>,<i1>,34,100,いのいて、かのい、しのい、とのん、にのい、ののい、たのい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東美,,</i5>,</#2>,<#3>,<i1>,34,100,いいいて、かいい、しもい、とあい、ういい、にいい、のもい、たあい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,甘椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#3>,<#4>,<i1>,34,100,いいいて、かいい、といん、にいん、たもい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東美,,</i5>,</#4>,<#5>,<i1>,34,100,いがんて、しわい、とがん、にがい、のわい、たわい、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,甘椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#5>,<#6>,<i1>,34,100,いいんて、しうい、といん、にいい、のうん、,,</i1>,<i2>,46,100,峠間,,</i2>,<i3>,42,100,甘椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,晴晴,,</i5>,</#6>,<#7>,<i1>,34,100,いのいて、かのい、しのい、とのい、うのい、にのい、ののい、たのい、,,</i1>,<i2>,46,100,甘甘,,</i2>,<i3>,42,100,峠峠,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東桜,,</i5>,</#7>,<#8>,<i1>,34,100,いのいて、かのい、しのい、とのい、うのい、にのい、ののい、たのい、,,</i1>,<i2>,46,100,甘甘,,</i2>,<i3>,42,100,峠峠,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,桜美,,</i5>,</#8>,<#9>,@#1,,,,,</#9>,<#10>,@#2,,,,,</#10>,<#11>,@#3,,,,,</#11>,<#12>,@#4,,,,,</#12>,<#13>,@#5,,,,,</#13>,<#14>,@#6,,,,,</#14>,<#15>,<i1>,34,100,いかいて、かかい、しさい、とさい、うにい、ににい、のめい、たちい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東桜,,</i5>,</#15>,<#16>,<i1>,34,100,いかいて、かかい、しさい、とさい、うにい、ににい、のちん、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,桜美,,</i5>,</#16>,<#17>,<i1>,34,100,いのいて、かのい、しおい、とらい、うのい、にのい、のおい、たらい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東東,,</i5>,</#17>,<#18>,<i1>,34,100,いのいて、かのい、しのい、とのん、にのい、ののい、たのい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,先東,,</i5>,</#18>,<#19>,<i1>,34,100,いいいて、かいい、しもい、とあい、ういい、にいい、のもい、たあい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東東,,</i5>,</#19>,<#20>,<i1>,34,100,いいいて、かもい、しいい、ともい、ういい、にいい、たもい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,先東,,</i5>,</#20>,<#21>,<i1>,34,100,いがいて、かがい、しわい、とがい、うがい、にがい、のわい、たわい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東東,,</i5>,</#21>,<#22>,<i1>,34,100,いいいて、かいい、しもい、といい、ういい、にいい、のもい、たもい、,,</i1>,<i2>,46,100,,,</i2>,<i3>,42,100,椿椿,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,先東,,</i5>,</#22>,<#23>,<i1>,34,100,いかいて、かかい、しかい、とかい、うかい、にかい、のかん、,,</i1>,<i2>,46,100,甘甘,,</i2>,<i3>,42,100,峠峠,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,東東,,</i5>,</#23>,<#24>,<i1>,34,100,いないて、かない、しない、とない、うなん、,,</i1>,<i2>,46,100,甘甘,,</i2>,<i3>,42,100,峠峠,,</i3>,<i4>,38,100,甘甘,,</i4>,<i5>,36,100,先晴,,</i5>,</#24>,,,,,,,,
あっという間に完成したyo Beat v2.2としてリリースしたけど、ファイル形式はv2.1から全く変更なしだyo このベースエディターはかなり複雑な処理をさせているんだけど、不思議と完璧に動いてくれてるみたいw(感心笑) スコアシートからLOADさせたベースパターンが完璧にビジュアル表示される様子は、もはや芸術的と言ってもいいかもw(絶賛笑) まあバグチェックは入念に行ったつもりだけど、動作が超複雑なだけにまだ何かあるかもしれないけどne(苦笑)
作ったボクでさえ勘違いして「あれっ、正しく動いてないんじゃね?」と思ってしまうことがあるyo それは、小節の4拍目に2分音符(8クロック分の長さ)を入力したとするyo そうするとこの小節ではおさまりきらず、次の小節の1拍目分(4クロック)まで音がのびるよne エディターには次小節へあふれる音の長さを入力するセレクタがあるので、そいつを「4」にしとけばオッケーと早とちりしちゃうんだよne そうではなくて、あくまで「長音」を指定する場合はチェックボックスをずーっとつなげてONにしていく必要があるyo そして、最後の16クロック目のチェックボックスもしっかりONにしていないと、音はそこで「延長されてない」とみなされるので、いくらセレクタをいじっても無効になるyo それに気付かず、「あふれ分が反映されてない! バグだ、バグだ!」と騒いでいた開発者がいるので、みなさんはそのようなことがないようにw(失笑) 本人も勘違いするくらい複雑で高度な動きをしてるってことだyo(凄過ぎ笑)
あともう一つ追加したのが、「ファイルを選択」ボタン。これは、COOKIEではわずか4KBの容量しか扱えないことがわかったので、テキストをコピペしてインポートする方法はあるとは言え、もうちょっとスマートなやり方はないのかなと、あちこち調べてみた結果発見したものだyo ファイルAPIというものを使ってるらしいんだけど、ボクの手持ちの本にはどこにも載ってないんだよne 結構新しい機能らしいyo ただ、JavaScriptはセキュリティの観点から、クッキー以外はローカルファイルアクセスをさせないという原則だったはずなのにいいのかよと少し思うけどne これの利用方法には条件があって、読み込むファイルはUTF-8エンコードで保存したプレーンテキストファイルでないとちゃんと読めないみたい。Macの場合は標準添付のテキストエディットで、「環境設定」から「開く/保存」のところで全部「UTF-8」を選択しておけば問題なく保存できたyo これを使えば一発で読み込めるようになるので、ループパターンテキストばかりを入れるフォルダをつくっておけば、そこから常に読み出すようにすればいいので、管理がしやすくなるよne この機構をつけられたので、もう貧弱なクッキーに悩まされることはなくなったyo ただ、読み込みは一発になったけど、ファイルの書き出しまではできないので、保存するときはコピペしてテキストファイルをつくらないとダメだyo
短期間でもの凄い進化をとげたけど、きっとベースエディターにまだバグがあるような気がしてならないので、しばらく色んな曲を打ち込みながらバグチェックをしてみようと思うyo まだまだ先は長いけど、おかしな挙動がないかしっかりチェックしながら進もうと思うyo(妥当笑)
作ったボクでさえ勘違いして「あれっ、正しく動いてないんじゃね?」と思ってしまうことがあるyo それは、小節の4拍目に2分音符(8クロック分の長さ)を入力したとするyo そうするとこの小節ではおさまりきらず、次の小節の1拍目分(4クロック)まで音がのびるよne エディターには次小節へあふれる音の長さを入力するセレクタがあるので、そいつを「4」にしとけばオッケーと早とちりしちゃうんだよne そうではなくて、あくまで「長音」を指定する場合はチェックボックスをずーっとつなげてONにしていく必要があるyo そして、最後の16クロック目のチェックボックスもしっかりONにしていないと、音はそこで「延長されてない」とみなされるので、いくらセレクタをいじっても無効になるyo それに気付かず、「あふれ分が反映されてない! バグだ、バグだ!」と騒いでいた開発者がいるので、みなさんはそのようなことがないようにw(失笑) 本人も勘違いするくらい複雑で高度な動きをしてるってことだyo(凄過ぎ笑)
あともう一つ追加したのが、「ファイルを選択」ボタン。これは、COOKIEではわずか4KBの容量しか扱えないことがわかったので、テキストをコピペしてインポートする方法はあるとは言え、もうちょっとスマートなやり方はないのかなと、あちこち調べてみた結果発見したものだyo ファイルAPIというものを使ってるらしいんだけど、ボクの手持ちの本にはどこにも載ってないんだよne 結構新しい機能らしいyo ただ、JavaScriptはセキュリティの観点から、クッキー以外はローカルファイルアクセスをさせないという原則だったはずなのにいいのかよと少し思うけどne これの利用方法には条件があって、読み込むファイルはUTF-8エンコードで保存したプレーンテキストファイルでないとちゃんと読めないみたい。Macの場合は標準添付のテキストエディットで、「環境設定」から「開く/保存」のところで全部「UTF-8」を選択しておけば問題なく保存できたyo これを使えば一発で読み込めるようになるので、ループパターンテキストばかりを入れるフォルダをつくっておけば、そこから常に読み出すようにすればいいので、管理がしやすくなるよne この機構をつけられたので、もう貧弱なクッキーに悩まされることはなくなったyo ただ、読み込みは一発になったけど、ファイルの書き出しまではできないので、保存するときはコピペしてテキストファイルをつくらないとダメだyo
短期間でもの凄い進化をとげたけど、きっとベースエディターにまだバグがあるような気がしてならないので、しばらく色んな曲を打ち込みながらバグチェックをしてみようと思うyo まだまだ先は長いけど、おかしな挙動がないかしっかりチェックしながら進もうと思うyo(妥当笑)
ボク自身は開発者だから現行のベースパートの入力方式は実に無駄がなく、あらゆるデータを入力可能なナイスな方式だと思ってるyo ただ、欠点としては、入力済みのデータがどんな感じなのかを視覚的に確認する手段が弱いw(苦笑) 簡易表示はあるけど、あれだけでは音の長さがわからないし、同じ「C」音でもオクターブがわからない。結局テキストウインドウで生データを見るしかないというのがイマイチなところだne あと、ベースだけの横複写とかができないので、ドラムごと全部ついてきちゃうのに目をつぶって小節全体を複写するしかないw
そこで、とりあえず1小節分だけのベースパターンを拡大ビジュアル表示して、そこでエディットもできちゃう画面を開発中だyo まあ、入力のてっとり早さだけならば、馴れれば現行のステップ入力もかなり速くできるんだけど、データの確認や編集ということを考えたときに、やはりこういうものは必要だと思うからne(妥当笑)
ベースをモノ発音モードで設計しているので、構造自体はかなりシンプルにできそうだyo 「キャビ研究所」を作ったときに使用した「つまみを直接ドラッグして動かす機構」を久々に使って、独特の操作感を出そうと思ってるyo
あと気付いたのは、このエディターを経由してコピーが超ラクにできるようになるということだyo たとえば、第1小節用のデータをチャチャッとつくったとするyo それを#1へ転送する。ついでに全く同じパターンの#5にも転送する。今度は4拍目のパターンだけを少し修正して、それを#2と#3に転送する。最後に途中をいじったやつを作って#4に転送する、というように一気に似たパターンの小節をまとめて完成させることができるyo もちろん、既にある#6のデータを読み込ませてそれを#7に転送書き込みするなんてのも朝飯前だyo 中身を確認して「ベースパート部分だけを」加工・転送できる「コピー中継基地」として機能させることができるので、またまた使い勝手が向上すると思うyo(感心笑)
これは単なるエディターなので、v2.1のデータフォーマットは全く変化しないyo アクセス記録を見ても、そろそろv2.0、v2.1からユーザーと言えるくらいの数の人が使いはじめているようなので、v2.1フォーマットは今後長く読み書きできるように守っていこうと思うyo(ユーザーサポート笑)
そこで、とりあえず1小節分だけのベースパターンを拡大ビジュアル表示して、そこでエディットもできちゃう画面を開発中だyo まあ、入力のてっとり早さだけならば、馴れれば現行のステップ入力もかなり速くできるんだけど、データの確認や編集ということを考えたときに、やはりこういうものは必要だと思うからne(妥当笑)
ベースをモノ発音モードで設計しているので、構造自体はかなりシンプルにできそうだyo 「キャビ研究所」を作ったときに使用した「つまみを直接ドラッグして動かす機構」を久々に使って、独特の操作感を出そうと思ってるyo
あと気付いたのは、このエディターを経由してコピーが超ラクにできるようになるということだyo たとえば、第1小節用のデータをチャチャッとつくったとするyo それを#1へ転送する。ついでに全く同じパターンの#5にも転送する。今度は4拍目のパターンだけを少し修正して、それを#2と#3に転送する。最後に途中をいじったやつを作って#4に転送する、というように一気に似たパターンの小節をまとめて完成させることができるyo もちろん、既にある#6のデータを読み込ませてそれを#7に転送書き込みするなんてのも朝飯前だyo 中身を確認して「ベースパート部分だけを」加工・転送できる「コピー中継基地」として機能させることができるので、またまた使い勝手が向上すると思うyo(感心笑)
これは単なるエディターなので、v2.1のデータフォーマットは全く変化しないyo アクセス記録を見ても、そろそろv2.0、v2.1からユーザーと言えるくらいの数の人が使いはじめているようなので、v2.1フォーマットは今後長く読み書きできるように守っていこうと思うyo(ユーザーサポート笑)