この数日間、グルーヴのずれをどうやったら自作シーケンサで実現できるかを考えている。ミュージシャンはよく「ヴァイブ」という言葉を使うが、これは細かな8分や16分のリズムではなく、4小節8小節という長い周期の音量/音質/リズムずれの周期のことを指している…というのが僕の仮説だ。
これを実証するには実際にそれを演奏させる以外にない。音量/音質はシーケンサのオートメーションという機能を使えば実現できる。だがリズムずれをオートメーションで設定できるシーケンサはまだ存在しないので、自分で作る必要がある。
あと MIDIのモノモードを実現するアルゴリズムを考えている。これはもちろんどんなシーケンサ/シンセにもついている機能だが、これが意外と難しい。これはプログラミングの基礎原理のひとつ FILOスタックを使って実装する必要がある。
音楽には多層に重なりあった様々な周期が現れる。これが音楽の奥行きを作り出している。現在あるシーケンサは音楽のデータを単層でしか操作できない。多層に重なりあったデータを作るためには人間のセンスが必要になる。人間はこれを感覚でしか理解していないからだ。
だけどヴァイブには単純な数学的構造が存在する。これを機械的に生成することができれば、もっと簡単に奥行きのある良い音楽を作ることが出来るようになる筈だ。
そのためにはある1つのパターンをそのパターンが持っている周期とは異なる周期によってモディファイすることを可能にするフレームワークの存在が必要になる。
現在 Lambda Music Sequencer はバッファリングアルゴリズムが3つの行程にわかれている。
- 小節単位・LISPのシンボルリストバッファ
- 小節単位・MIDI情報バッファ
- ブロック単位・MIDI情報バッファ
これらのバッファは全てパターン周期ごとに分けて管理されている。これらを周期をまたがって縦断的に処理することは非常に難しい。
考えられる解決策はいくつかある
- これらの内部バッファを操作するインターフェースを追加する
- これらの内部バッファを全て連結してしまう
- 各バッファ生成ルーチンに対して、異なる周期のバッファ位置を参照バッファとして参照する為のインターフェースを追加する。
1の解決策がもっとも直接的な方法だが、内部バッファの処理順番をきちんと整理して外部に公開する必要がある。実装が非常に複雑になる恐れがある。実装は恐らく非常に難しい。
2は必要になる変更量が非常に大きい。またバッファリング処理が実行される度に全てのイベント位置をシフトする必要が発生するため、負荷が高くなる可能性がある。
3は縦断的に処理するという面から見てやや劣るが、現在の実装との差異が小さく、かつ必要十分な機能の提供が可能だ。
恐らく3の手法を取ることになるだろう。