Sonar でギターのコード入力を簡単にするサンプル
拙作 Sonar 用プラグイン JFilter を使ってギターのコード入力を簡単にやるサンプルです。前準備としてJFilter をインストールしておいてください。
2、コードのルート音を単音で入力
C なら ド、D ならレ、という風に入力します。マイナーの時はルート音+ひとつ上の音を重ねて入力します。Cm ならドド#みたいなかんじ。セブンスには未対応…だけど、スクリプトをちょっといじれば対応できます。興味のあるひとは挑戦してみてください。
3、JFilter でコードに変換
入力したノートを選択したあと、「プロセス」→「MIDI FX」→「JFilter」とメニューをたどり JFilter の画面を出します。さっきダウンロードしたスクリプトファイルを指定して、OK を押すと単音がギターコードに変換されます。
4、別のやりかた
トラックにプラグインとして挿入しておけば、そのトラックの単音がすべてコードでなるようになります。
このままだと「じゃーん」「じゃーん」ってなるだけなのであまり使えませんが、後にアルペジエーターをはさんだりすると応用の幅が広がります。
5、スクリプトファイル
今回使ったスクリプトファイルは以下のようになっています。腕に覚えのある人は、発音のタイミングをばらけさせたり、低音のベロシティを下げ目にできるように、改造すると楽しいですよ!
// // ギターパターン // var code = []; for(var i=0; i<12; i++) code[i] = [[],[]]; code[0][0] = [40,48,52,55,60,64]; // C code[0][1] = [43,48,55,60,63,67]; // Cm code[1][0] = [44,49,56,61,65,68]; // C# code[1][1] = [44,49,56,61,64,68]; // C#m code[2][0] = [45,50,57,62,66]; // D code[2][1] = [45,50,57,62,65]; // Dm code[3][0] = [55,58,63,67]; // D# code[3][1] = [54,58,63,66]; // D#m code[4][0] = [40,47,52,56,59,64]; // E code[4][1] = [40,47,52,55,59,64]; // Em code[5][0] = [41,48,53,57,60,65]; // F code[5][1] = [41,48,53,56,60,65]; // Fm code[6][0] = [42,49,54,58,61,66]; // F# code[6][1] = [42,49,54,57,61,66]; // F#m code[7][0] = [43,47,50,55,59,67]; // G code[7][1] = [43,50,55,58,62,67]; // Gm code[8][0] = [44,51,56,60,63,68]; // G# code[8][1] = [44,51,56,59,63,68]; // G#m code[9][0] = [40,45,52,57,61,64]; // A code[9][1] = [40,45,52,57,60,64]; // Am code[10][0] = [41,46,53,58,62,65]; // A# code[10][1] = [41,46,53,58,61,65]; // A#m code[11][0] = [42,47,54,59,63,66]; // B code[11][1] = [42,47,54,59,62,66]; // Bm function clone(obj) { var newobj = []; for(var name in obj) newobj[name] = obj[name]; return newobj; } function onEvents(from, to, list) { var list2 = []; var last = null; for(var i=0; i<list.length; i++) { if(last==null || last.time!=list[i].time) { list2.push(list[i]); last = list[i]; last.count = 0; } else { last.key = Math.min(last.key, list[i].key); last.count++; } } var list3 = []; for(var i=0; i<list2.length; i++) { var c = code[list2[i].key%12][Math.min(list2[i].count,1)]; if(c==null) continue; var event; // チャ for(var j=0; j<c.length; j++) { event = clone(list2[i]); event.key = c[j]; list3.push(event); } } return list3; }