InstaChordの動作をメモる会
InstaChordのクローンとか作ったらどうかということで、InstaChord-iを買って挙動を調べてみる会。
prev:
キーの選択
キーは 12種類 ある。それぞれのMIDIノート番号を表にしてみた。
キー/ノート | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
C/Am | 36 | 43 | 52 | 55 | 60 | 64 |
D-/B#m | 37 | 44 | 53 | 56 | 61 | 65 |
D/Bm | 38 | 45 | 54 | 57 | 62 | 66 |
E-/Cm | 39 | 46 | 51 | 55 | 58 | 63 |
E/C#m | 40 | 47 | 52 | 56 | 59 | 64 |
F/Dm | 41 | 48 | 53 | 57 | 60 | 65 |
F+/D#m | 42 | 49 | 54 | 58 | 61 | 66 |
G/Em | 43 | 47 | 50 | 55 | 59 | 62 |
A-/Fm | 44 | 48 | 51 | 56 | 60 | 63 |
A/F#m | 45 | 49 | 52 | 57 | 61 | 64 |
B-/Gm | 46 | 50 | 53 | 58 | 62 | 65 |
B/G#m | 47 | 51 | 54 | 59 | 63 | 66 |
キーが1つ上がるとノート番号も1つ上がるが、音域の都合である程度進むと元に戻る。戻る直前の位置を太字にしてみると、一定のパターンがあることがわかる。太字の部分を超えない限りは1行下に進むとノート番号は1増える(半音進む)ことになる。
コード
基本となる C/Am のキーで、コードを選択すると以下のようになる:
番号 | コード/ノート | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
1 | C | 36 | 43 | 52 | 55 | 60 | 64 |
2 | Dm | 38 | 45 | 53 | 57 | 62 | 65 |
2# | E- | 39 | 46 | 51 | 55 | 58 | 63 |
3 | Em | 40 | 47 | 52 | 55 | 59 | 64 |
4 | F | 41 | 48 | 53 | 57 | 60 | 65 |
5 | G | 43 | 47 | 50 | 55 | 59 | 62 |
6 | Am | 45 | 48 | 52 | 57 | 60 | 64 |
6# | B- | 46 | 50 | 53 | 58 | 62 | 65 |
7 | Bm | 47 | 50 | 54 | 59 | 62 | 66 |
↑ の表ではソートしてしまっているが、実際の配置は
| 7|2#|6#|
| 4| 5| 6|
| 1| 2| 3|
のようになっている。
シフトキー
PCのキーボードのシフトキーのように、押しながら操作することを期待されているボタンがいくつか用意されている。このようなボタンには
- 常に効果を発揮し、重ねがけ可能なもの
- 後勝ちになり、グループ内では1つしか適用できないもの(M+7が6thに割り当てられているのは例外 -- InstaChord-iでは再現されていない)
に分けられる。前者はコードの高さを変更し、後者はコードの種別を変更する。
スワップボタン / フラットボタン
スワップボタンは、メジャーコードをマイナーコードに、マイナーコードをメジャーコードにする。rootとなる音は変更されない。
フラットボタンは、コード名を1度下げる。下がるのはコード名なので、音が下がることが保証されているわけではない。例えば Key = C/Am の 1 でフラットボタンを押すと全ボタンのノート番号は上昇する。
フラットボタンを押すと全てのコードはメジャーコードとなる。フラットボタンとスワップボタンを同時に押すと全てのコードはマイナーコードとなる。
その他
InstaChordはこれらのボタンに名称を設定していない。。以下の組合せを付与できる:
- m7-5:
- dim: ディミニッシュ
- 7+M7(同時押し): 6th
- 7: 7th
- 9: 9th
- M7: メジャーセブンス
- sus4
- aug
同時押しはInstaChord-iでは再現されていない。
アルゴリズムの予想
- コードの構成音を導出する -- 以降のアサインではこの構成音のみを使用する。不足した場合はオクターブ上げて追加する
- ボタン 1 は常にルート音を出力する
- ボタン 2 〜 6 に左隣りの音にもっとも近いがより高い音を割り当てる
- ボタン 2 〜 6 には、事前に決めた音域があり、それを超えた場合は1オクターブ下げてやりなおす
... 何か違う気がするな。。
T. Chordstrum
そもそもInstaChordもOmniChordインスパイアなのだから、そのクローンである T. Chordstrumのコードを読めば良いんではという気がした。
単純な加算で処理しているようだ。少くとも、InstaChordはこれよりも複雑な処理をしていることになるが、一旦これで作ってみて、後から折り返しのアルゴリズムを考えるのが良いかな。