和音に挑戦。
和音の並び、画面構成は @きよし 様 作成 MIDI Chord Helper を 参考にしました。 パクリました(^^;
とりあえず試したいかたはこちら。
使い方:
- 上のコード表を クリックすると和音が出ます。sus4欄は 下のコード+sus4 です。
- コード表のコードは適当に並んでいるわけではありません。
- shiftキーで7th、ctrlキーでM7th、altキーで6th になります。(ウソかもしれない)
- コード生成方法が適当です。本来は上に並んでる b#の数(キー(調))によって、音をオクターブ移動したりしないといけないはずなんですが、してません。(誰かルール教えて(´・ω・`))
- ピアノロールは、そのままクリックすると単音が出ます。Shiftキーと一緒にクリックすると、メジャー和音が出ます。
- 左上デバイスの変更、音色(Program)の変更は今まで通りですが、音色は番号だけじゃなくて名前を表示するようにしました。右ボタンで逆順に変化します。
- Effect は、緑の画面エフェクトのOn/Off です。Onにすると、背景が黒くなり、例のエフェクトが出ます。
- Octave はオクターブの移動です。ピアノロールのC の位置にオクターブ表示があります。左クリックで オクターブが上がり、右クリックで下がります。
あくまで、和音は適当なので、ご注意ください。
※このアプレットのソースコードの公開予定はありません。
以前、ニコニコ技術部で、@きよし さん の「あの楽器?でInnocenceをコード演奏してみた」を見たときから、これは すごいと思っていて、「あの楽器」を作るときは絶対このやりかたを使おうと心に決めていました。
<a href=”http://www.nicovideo.jp/watch/sm5733724″ mce_href=”http://www.nicovideo.jp/watch/sm5733724″>【ニコニコ動画】あの楽器?でInnocenceをコード演奏してみた</a>
で、実際にproce55ingで作ってみたのが こちらです。
しかし、音楽理論がさっぱりわからん。今回、実際に実装したコードの生成方法は次の通り、
3和音のトニック、ドミナント、サブドミナントの生成方法。
- トニック:ベース音コード名の音(C ならド)。
- ドミナント:トニックの3度上の音(MIDI Pitch で トニック+4)
- サブドミナント:トニックの5度上の音(MIDI Pitch で トニック+7)
- マイナーの場合、ドミナントを MIDI Pitch で -1
- sus4 の場合、ドミナントをMIDI Pitchで +1
さらに、7th等の生成
- 7thは、3和音に、短7度上の音を加える。(MIDI Pitch で トニック+10)
- M7thは、3和音に、長7度上の音を加える。(MIDI Pitch で トニック+11)
- 6thは、3和音に、短6度上の音を加える。(MIDI Pitch で トニック+9)
という非常に簡単な方法で 行っています。
コードはこんな感じ
int[] makeCode(int base, int mFlg, int numFlg, int shpNum ){
int[] pitches= new int[4];
// 基本3和音
pitches[0] = base;
pitches[1] = base+4;
pitches[2] = base+7;
pitches[3] = -1;
// マイナー
if( mFlg == 1 ){
pitches[1] = pitches[1] -1;
}
// sus4
if( mFlg == 2 ){
pitches[1] = pitches[1] +1;
}
// add
if( numFlg == 6 ){ // 6th
pitches[3] = base+9;
}
if( numFlg == 7 ){ // 7th
pitches[3] = base+10;
}
if( numFlg == 8 ){ // M7th
pitches[3] = base+11;
}
if( numFlg == 9 ){ // 9th
pitches[3] = base+14;
}
return pitches;
}
ほんとうは、サブドミナント音を オクターブ下にもっていったり4和音目を オクターブ下にもっていったり しなきゃいけないはずなんだけど、さっぱりわからん。
このへんは、音楽の詳しいひとに教わりたいなぁ。誰か教えてください。