まあとりあえずこれを使ってくれや
アルファベットで書かれたコード進行を入力すると、ローマ数字に変換されたものが出てきます。
考え方
コードをローマ数字記法に書き換えるには調がわかっている必要があります。
しかし、巷の曲は転調したり他の調からコードを借りてきたり1と忙しいものです。
中には僅かな時間転調した後に戻ってこずに別の調へ行ってしまうものまであります。
例えば、DECO*27氏のゴーストルールでは半音上げ転調して1フレーズだけ歌った後で更にもう1回半音上げ転調します。
こんなことをされては調推定なんてめんどくさくてたまらない(でもカッコいい)。
そこで、調を推定せずに全部の調に対するローマ数字変換を出すことにしました。
コンピュータがあれこれ考えるのではなく、ユーザがローマ数字列を見て直感的に良さげなものを選べばいいのです。
実行可能性
ローマ数字変換を行う際にコードクオリティをそのまま表示する流派があります2。
この流派の方法でローマ数字変換を行えば、音高(ピッチ)を表す部分を音度(ディグリー)に変換するだけで良くなります。
更に、この考え方を用いると、ダイアトニックコード以外のコードも統一的に変換できます。もはや構成音が1つも調に含まれない和音とかでも形式的に変換できます。3
良さげな順にソートする
ここまで、雑に全てのキー候補に対してローマ数学変換を列挙する前提で考えてきました。
しかし、良さげな調を選択することを完全に諦めるわけではありません。
ある調に対する変換後のローマ数字列の中に臨時記号が含まれる場合は、その調は不適切である可能性が高いです。調の構成音中に臨時記号が含まれることはよくありますが、根音(ルート)に臨時記号がつくということはほぼ無いと言ってよいでしょう4
従って、とりあえず変換後のローマ数字列中の臨時記号を数え上げて、少ない順にソートすることにしました。
おわり
なんか不満点があったら issue 投げてください
直したくなったらプルリク投げてください
気づいたときに対応すると思います。多分。
あと、音楽に詳しい人、マサカリお待ちしてます。これも気づいたときに直します