ICN
ICN
https://inline.inajob.tk/img/twitter-5643382/ICN/c9f88e3d-0982-11ec-88bc-02ab296898db#.png
- 公式から転載(画像は結合しました)
メタキー
元となる和音を修飾する
- Swapはメジャー、マイナーの反転
- # は全体を半音上げる
和音を修飾する
- m7(-5)
- dim
- 7
- 9
- M7
- sus4
- aug
アルゴリズム
ひとまずCがルートの時だけ正しく動くようにする。
- ダイアトニックコードの場合はそのままでOK
- スワップコードか判定
- 修飾が付いているか判定
ひとまずこれだけで考える
キーの変更対応
そもそもキーとは・・
Cの時
> table
,1,2,3,4,5,6,7
Cのとき, C, Dm, Em, F, G, Am, Bm
Bのとき, B,C#m,D#m,E,F#,G#m,A#m
<<
単純に番号をずらせば良さそう
> table
Cのとき, 1,1#,2,2#,3,4,4#,5,5#,6,6#,7
Cのとき2, 0, 1,2,3,4,5,6,7,8,9,10,11
Bのとき ,7,1,1#,2,2#,3,4,4#,5,5#,6,6#fg
Bのとき2,11,0,1,2,3,4,5,6,7,8,9,10
<<
memo
ChordWikiで動くブックマークレットの原型
> code
Array.prototype.slice.bind(document.getElementsByClassName("chord"))().forEach((e) => {
let raw = ""+ e.firstChild.nodeValue;
let m = raw.match(/^(A-Gm{0,1})(^/*)/); let s = "-";
if(m){
let swapped = false;
let noMap = {"C":1, "D":2, "E":3, "F":4, "G":5, "A":6, "B":7};
let isQAvailable = false;
if("C,Dm,Em,F,G,Am,Bm".split(",").includes(base)){};
if("Cm,D,E,Fm,Gm,A,B".split(",").includes(base)){swapped = true;};
if("dim,7,9,M7,sus4,aug".split(",").includes(q)){isQAvailable = true;};
s = no + (swapped?"~":"") + (isQAvailable?(""+q+""):""); };
e.firstChild.nodeValue = s;
})
<<
> code
javascript:(Array.prototype.slice.bind(document.getElementsByClassName("chord"))().forEach((e)=>{let%20raw=""+e.firstChild.nodeValue;let%20m=raw.match(/^(A-Gm{0,1})(^/*)/);let%20s="-";if(m){let%20base=m1;let%20q=m2;let%20swapped=false;let%20noMap={"C":1,"D":2,"E":3,"F":4,"G":5,"A":6,"B":7};let%20no=noMap[base0];let%20isQAvailable=false;if("C,Dm,Em,F,G,Am,Bm".split(",").includes(base)){};if("Cm,D,E,Fm,Gm,A,B".split(",").includes(base)){swapped=true;};if("dim,7,9,M7,sus4,aug".split(",").includes(q)){isQAvailable=true;};s=no+(swapped?"~":"")+(isQAvailable?(""+q+""):"");};e.firstChild.nodeValue=s;})); <<
コードとキーのデータ構造
> pre
[
{type: "chord", v: ""},
{type: "key", v: ""},
]
<<
こんな感じにする?
転調を自動判定した場合にこういう構造にしておくと便利そう。
これならテストもできそう