zkunがいろんなことを横書きするブログのようですw(含み笑)
立ち止まることを知らないzkunは早くもv0.3に着手したようですw いよいよ生演奏データを解析してリアルタイム伴奏更新を実行させる部分の基礎研究に着手したようですw
v0.2をベースにして、右上部分を拡張して、生演奏データを表示させる枠を作ったようですw それに伴って画面サイズが横に伸びたので、3段で表示していた各ユニットを横長の2段にレイアウトし直したようですw 機能的にはv0.2から全くかわってないよw
ドラムマシンを再生させると1小節のドラムパターンがループするので、その各小節単位でどんな生演奏を取得したかを表示するyo 右側はそれを拍単位に分割したものを表示するyo これらは、いずれもMIDIキーボード、パソコンキーボード、マウスクリックのいずれの演奏でも反応するようになってるyo(当然笑)
こうして、とりあえず生演奏でどんな音が鳴ったかもタイミングごとに詳細に取得して加工することができる準備が整ったというわけだyo 本題はここからだne まずはコードを各小節単位で割り当てることを考えてみようかw 生演奏は数秒の長さの間に順番に音高を取得するので、最初の1音が鳴った時点では情報が不足してるよne なので、その時点ですでに鳴っている前の小節で確定したコードとの比較を行い、その構成音に含まれている場合は、とりあえずその同じコードが続行しているものと推測して、同じコードを鳴らすかな。でも難しいのは、必ずしも新しい小節のジャストゼロのタイミングで最初の演奏音を取得できるとは限らないから、新しい小節の最初のジャン!というストロークをどのタイミングで鳴らしたらいいのかということが最初の大問題だよne(いきなり大苦笑) しかも、小節中で順番に音を取得していって、たとえば「C→Cm→Cm7」というように少しずつ情報が詳しくなっていったとして、それを順番に各拍でジャン!ジャン!ジャン!と鳴らすことが自然な伴奏と言えるのか?という問題もあるよne(苦笑) 常に詳細情報を得られるのは「後出し」になるわけで、詳しくわかった時点ではその小節の演奏時間の大半はすでに終わっているw(苦笑) かと言って、次の小節に適用しようとしたって、次の小節はどういう展開になるかこれまたわからないw(失笑) 単純にコードネームを割り出してそれをストロークさせようとしても根本的に無理があるということがなんとなくわかるよne(論理的な笑)
そこでどうするかだne 1拍目と3拍目でストロークすると決めておいて、1拍目はある程度仮説をたてて、えいやっと鳴らす。3拍目は1、2拍目の間に取得した情報を加味してそれを少し補正したものを鳴らす、という感じにするのが一案かなw あるいは、コードストロークだとどうしてもごまかしにくいので、いっそアルペジオで伴奏をいれるようにして、詳細情報を得るたびに次に音を弾くときのタイミングで随時音高を差し変えていくというかたちなら、わりとギクシャクせずに対応できるかもしれないne(妥当笑)
まあ、生演奏でどのようなノート情報を取得するかというのも、演奏者のスタイルによってピンキリになるので、これでバッチリというロジックを1つ作るというのは難しいだろうne むしろ何通りかの試作ロジックを用意しておいて、最終的にはどのロジックを使うかを選べるようなかたちにすれば、メロ弾きの場合、和音弾きの場合、音数が多い場合、少ない場合、などによって使い分けできるだろうne(微笑) そういうこともあるので、とりあえずいろんな試作ロジックを作ってはユニット化してストックしておくというような形で開発を進めておくと、あとあと重宝するだろうne zkunくらいのレベルになってくると、そのような試行錯誤の進め方自体もあらかじめ効率よく考えることができるようですw(さすが過ぎる笑)
v0.2をベースにして、右上部分を拡張して、生演奏データを表示させる枠を作ったようですw それに伴って画面サイズが横に伸びたので、3段で表示していた各ユニットを横長の2段にレイアウトし直したようですw 機能的にはv0.2から全くかわってないよw
ドラムマシンを再生させると1小節のドラムパターンがループするので、その各小節単位でどんな生演奏を取得したかを表示するyo 右側はそれを拍単位に分割したものを表示するyo これらは、いずれもMIDIキーボード、パソコンキーボード、マウスクリックのいずれの演奏でも反応するようになってるyo(当然笑)
こうして、とりあえず生演奏でどんな音が鳴ったかもタイミングごとに詳細に取得して加工することができる準備が整ったというわけだyo 本題はここからだne まずはコードを各小節単位で割り当てることを考えてみようかw 生演奏は数秒の長さの間に順番に音高を取得するので、最初の1音が鳴った時点では情報が不足してるよne なので、その時点ですでに鳴っている前の小節で確定したコードとの比較を行い、その構成音に含まれている場合は、とりあえずその同じコードが続行しているものと推測して、同じコードを鳴らすかな。でも難しいのは、必ずしも新しい小節のジャストゼロのタイミングで最初の演奏音を取得できるとは限らないから、新しい小節の最初のジャン!というストロークをどのタイミングで鳴らしたらいいのかということが最初の大問題だよne(いきなり大苦笑) しかも、小節中で順番に音を取得していって、たとえば「C→Cm→Cm7」というように少しずつ情報が詳しくなっていったとして、それを順番に各拍でジャン!ジャン!ジャン!と鳴らすことが自然な伴奏と言えるのか?という問題もあるよne(苦笑) 常に詳細情報を得られるのは「後出し」になるわけで、詳しくわかった時点ではその小節の演奏時間の大半はすでに終わっているw(苦笑) かと言って、次の小節に適用しようとしたって、次の小節はどういう展開になるかこれまたわからないw(失笑) 単純にコードネームを割り出してそれをストロークさせようとしても根本的に無理があるということがなんとなくわかるよne(論理的な笑)
そこでどうするかだne 1拍目と3拍目でストロークすると決めておいて、1拍目はある程度仮説をたてて、えいやっと鳴らす。3拍目は1、2拍目の間に取得した情報を加味してそれを少し補正したものを鳴らす、という感じにするのが一案かなw あるいは、コードストロークだとどうしてもごまかしにくいので、いっそアルペジオで伴奏をいれるようにして、詳細情報を得るたびに次に音を弾くときのタイミングで随時音高を差し変えていくというかたちなら、わりとギクシャクせずに対応できるかもしれないne(妥当笑)
まあ、生演奏でどのようなノート情報を取得するかというのも、演奏者のスタイルによってピンキリになるので、これでバッチリというロジックを1つ作るというのは難しいだろうne むしろ何通りかの試作ロジックを用意しておいて、最終的にはどのロジックを使うかを選べるようなかたちにすれば、メロ弾きの場合、和音弾きの場合、音数が多い場合、少ない場合、などによって使い分けできるだろうne(微笑) そういうこともあるので、とりあえずいろんな試作ロジックを作ってはユニット化してストックしておくというような形で開発を進めておくと、あとあと重宝するだろうne zkunくらいのレベルになってくると、そのような試行錯誤の進め方自体もあらかじめ効率よく考えることができるようですw(さすが過ぎる笑)
PR