﻿Genkhord 0.86.0



●Genkhord とは

コードネームが表示されているボタンをクリックすると、MIDI で演奏します。
次に進行できそうなコードを表示します。
そのコードの基盤になりうるコードスケールを表示し、実際に音を出して確認することができます。
コードの構成音からコードネームを検索する機能もあります。

作曲に便利なツールにしたいと思っています。



●動作環境

Windows 10 (バージョン 1607以降)
Windows 11
.NET Framework 4.8



●ZIP版インストール方法

適当なディレクトリを作成し、アーカイブを展開します。
アップデートは上書きしますが、動作がおかしい場合は一度ディレクトリごと削除してみてください。


●ZIP版アンインストール方法

インストールしたディレクトリを丸ごと削除します。


●コードネーム表(chordsConfigs.txt)フォーマット
[コードネーム文字列],[度数文字列],[表示フラグ],[ボタンの高さ重み係数],[文字色],[背景色]

[コードネーム文字列]はC7などと表記します。必ずCで始まります。分数コードも対応しますが♭は使えません。必ず#で表現します。C、CM7、C7、Cm7-5、Csus4、C7sus4の名前文字列は変更しないでください。ほかの名前は変更可能です。

[度数文字列]は構成音程一つを一文字で次のように表し、スペース等で区切らず表現します。
1=m2, 2=M2, 3=m3, 4=M3, 5=P4, 6=TT, 7=P5, 8=m6, 9=M6, a=m7, b=M7, d=-9, e=9, f=+9, h=11, i=+11, k=-13, l=13

例:
Cm7/F,  37a		,18 ,#e0e0e0, #404040
Cm7/A#, 37a		,15 ,#e0e0e0, #404040
Cm/D#,  37		,15 ,#e0e0e0, #404040



●バージョン履歴

     2007.2.6      開発開始
0.01 2007.2.6      公開
0.05 2007.2.14    「次に来そうなコード候補」を表示するようにした
                  コード進行表を chords.txt に分離した
                  日本語版リリース
                  キーを指定できるようにした。ただし長調のみ。
                  プログラムチェンジを送信できるようにした
0.06 2007.2.20    ステータスバーに構成音名を表示するようにした
0.07 2007.3.12    キーが CMajor 以外の場合に、「次に来そうなコード候補」の表示がおかしかったので修正した。
0.08 2007.6.3     I/V 型の分数コードを追加した
                  コード進行表改定
0.20 2007.8.20    コードの転回機能を追加した。[転回]ボタンオンで転回する。デフォルトオン。進行を聴きやすくするために追加した。
                  ボイシングをクローズかオープンか選択できるようにした。デフォルトではクローズド。倍音を多く含む音色で転回ありの場合に聴きやすくするために追加した。
                  発音をオクターブ単位で移動できるようにした。
                  コード進行表改定
0.21 2007.10.3    ボタンアップ時にオールノートオフを出力していて好ましくなかったのでキーごとのノートオフに変更した。
0.30 2016.4.2     コード進行表を改定
                  コード候補の探索範囲を他の全ての調に広げ、薄く候補表示するようにした
                  開発環境を Visual Studio 2005からVisual Studio Community 2015 に変更した
0.31 2016.7.2     コード進行表を改定
0.32 2016.7.15    m6の構成音がおかしかったので修正した
0.40 2020.8.9     コード進行表を改定しマイナーキーに一応対応した
                  ウィンドウ外にD&Dすると四分音符4回の内容で標準MIDIファイルを書き出すようにした。DAWのトラックへ張り付けることを意図している。
                  開発環境を Visual Studio Community 2015からVisual Studio Community 2019 に変更した
0.50 2020.8.23    コードスケール表示機能を追加した。
                  コードに乗れそうなメロディを考察するとき使用することを意図している。
                  コードをクリックすると適用可能と思われる典型的なスケールをいくつかウィンドウ下に表示する。
                  ノートをクリックするとコードをバックに実際に発音させて確認することもできる。
0.51 2020.8.24    直近4つのコードの演奏を繰り返す[▶]ボタンを追加した
                  外観調整
0.52 2020.9.20    コード進行表調整
0.55 2021.3.21    コードの構成音からコードネームを検索する機能を追加した。ウィンドウ最下部の背景か、構成音表示をクリックすると検索モードに入る。キーボードをクリックするとコードネームを検索する。
                  強進行を(4度上行)オレンジ色枠で、変進行(4度下行)を緑色枠で強調表示するようにした。
                  コード進行表調整
0.60 2021.3.22    分数コードのコードネーム検索がおかしかったので修正した
                  I/IV、I/VII、Im/#II、Im/V型の分数コードを追加した
                  A-Zのキーを押してコードを演奏できるようにした。keyconfigs.txtであらかじめ定義する。Shiftキーを同時に押すと一時的に記憶することもできる。
0.65 2021.5.17    五度圏表のレイアウトを使用したコード入力パネルを追加した。五度間隔かつ環状の並びがドミナントモーション、転調、借用和音を考えるときに便利に使えることが多いので実装した。このレイアウトでは多くのコードを並べることはできないので、コード種は限定的なものになる。
                  五度圏表のレイアウトを使用したキー入力パネルを追加した。五線譜上でそのキーの♯と♭の位置を確認することもできる。ト音記号の表示を省略している。
                  📌アイコンをクリックすると、ウィンドウを最前面に固定できるようにした。
                  スペースキーを押下するとキーとして同主調の入れ替え(例: Cメジャー ⇔ Cマイナー)をするようにした。←廃止済み
                  コード進行表調整
0.66 2021.5.24    五度圏表バグ修正
0.67 2021.5.29    五度圏上にコード構成音を使ってポリゴンを描画すると、構成音相互の音程を図形的に表現できて面白いので実装してみた。
0.68 2021.11.19   コード名の異名同音をC# D# F＃ G# A#などと♯のみを使って表示していたが、♭のみや調に従った表示もできるようにした。KeyメニューのSemitoneメニューで設定する。調に従った場合楽譜通りの音名読みになるだけなのでダイアトニックコード以外の臨時記号が必要なものについては適当に振り分けている。このため作曲者が意図したものになるとは限らない。
                  config.txtというファイルに異名同音の表示設定を保持するようにした。
0.69 2021.12.5    長いコードネームのテキスト描画が途切れることがあったので修正した
                  調の表示に一貫性がない部分があったので修正した
0.69.1 2021.12.7  ウィンドウサイズを変更できないようにした
                  スペースキーを押下するとキーとして同主調の入れ替え(例: Cメジャー ⇔ Cマイナー)をしていたが廃止した。
0.70 2021.12.14   開発環境を Visual Studio Community 2019 から Visual Studio Community 2022 に変更した 
                  コードの構成音同士の音程をこれまでは水色の線分で表示していたが、度数と度数固有のカラーで表現するようにした。度数は転回形も同時に表示する(読みづらいかもしれないが)。ただし完全五度は「5」とだけ表示する。増4度・減5度は「TT」(Tritone)と表示する。もともとテンションノート(複音程)であっても単音程に直して表示する。
                  アプリケーションアイコンをついに作った
0.71 2021.12.16   構成音表示の五度圏表があまりにもごちゃごちゃしてきたのでマウスプレスしている間の表示を簡略化・整理した。
                  表示の細かい調整
0.72 2021.12.17   構成音表示の五度圏表がまだごちゃごちゃしているので度数表示を簡略化した。ルートからの音程については転回形の表示を省略した。
                  テンションの度数表示に今一つ一貫性がなかったので調整している
                  表示の細かい調整
0.73 2021.12.20   今まではプログラムの中に埋め込まれていた「コードネーム表の定義」をテキストファイル(chordsConfigs.txt)として分離した。これによりユーザーがコードネーム表をカスタマイズすることが可能になった。たとえば不要なコード行を削除したり、順番を入れ替えたり、新しいコード行(テンション等)を追加することができるようになった。現状ではテキストエディタを使って編集するしかないが将来はGUIを用意して便利にしたい。
                 「♭」文字が含まれているコードをDAWにドロップすると、トラック名が正しく認識されないケースがあったので修正した。
0.73.1 2021.12.20 コードネーム検索モードを五度圏ビューでも確認できるようにした
                  表示の細かい調整
0.73.2 2021.12.24 コードボタン上でCtrl+マウスホイールを入力するとベースを一時的に変更できるようにした。中クリックでリセットする。
                  コードボタン上でShift+マウスホイールを入力するとテンションを一時的に追加できるようにした。中クリックでリセットする。
0.74 2021.12.28   コードネーム検索モードにおいてより多くのテンション表示をすることにした。表記可能なものをできる限り列挙しようとするので作曲家の意図を汲んだ表示になるとは限らない。
                  コードネーム検索モードにおいて5度省略コードを(om5)、3度省略を(om3)などと表示するようにした。
                  五度圏ビューのポリゴンのヒット計算がおかしく時々違うコードをクリックしていたことになっていたので修正した。
                  五度圏ビューのコードクリック履歴の軌跡をある程度表示するようにしてみた。右クリックやコード以外をクリックするとクリアされる。微妙な感じなので調整すると思う。
                  コード進行表データの調整
0.75 2022.1.3     いわゆる Blackadder Chord(田中aug)をコード表に追加した。コード表では「Cblk」などと表示される。関係する進行もいくつか追加した(例: I→IV#blk→IVM7)
                  構成音の発音を省略する機能を追加した。Omit5、Omit3、Omit1ボタンを選択するとそれぞれ5度、3度、1度の発音とMIDI書き出しを省略する。
                  テンキー押下によるショートカットをサポートすることにした。キーボードとコードの関係(何を鳴らすか)はkeyconfigs.txtで定義する。
                  アプリのターゲットフレームワークを.NET Framework 2.0 から 4.8 に変更した。これによりWindows10において .NET3.5ランタイムを個別にインストールする必要がなくなった。ただし非常に古いOSでは動作しなくなるかもしれない。
0.75.2 2022.1.4   コードネーム探索ビューにおいてマウスホイール入力でトランスポーズするようにした
0.76   2022.1.12  スクラッチパッド機能を追加した  
                  コードネームボタンの高さをカスタマイズできるようにした。使用頻度の高そうコードはクリックしやすくすべきという考えに基づくもので、コード種ごとのボタン高はchordConifs.txtに重み係数として記述することができる。また▼メニューのUnify chord buttons heightで無効にすることもできる。
                  テンションを追加したときコードネーム表示がはみ出すことがあったので修正した
                  五度圏ビューに対してマウスホイール入力したらトランスポーズするようにした
                  コード進行表データの調整
0.76.1 2022.1.12  スクラッチパッドを最小化したときの問題修正
                  「最近閉じたスクラッチパッド」を維持するようにした
0.76.2 2022.1.12  五度圏ビューからのD&Dがうまくいかなくなっていたので修正した
0.76.3 2022.1.13  スクラッチパッド:タイトルテキストを入力できるようにした
                  スクラッチパッド:完全に削除する機能を追加した
0.76.4 2022.1.15  スクラッチパッド:ドロップするときキーがC/Am以外だと再生結果がおかしかったので修正した
                  スクラッチパッド:任意の背景色を設定できるようにした。背景を右クリックしてBackground Colorメニューをクリックして設定する。
                  スクラッチパッド:コードアイテムを一括移動できるようにした。背景を右ドラッグする。
                  「★」メニューによくあるコード進行を収録することにした
                  スクラッチパッド:コードノードをラインで結んで描画するようにしてみた
0.76.5 2022.1.16  スクラッチパッド:Undo機能を追加した
                  スクラッチパッド:プリセットをロードするとき選択されているキーに移調するようにした
                  五度圏ビュー:軌跡の表示は邪魔に思えてきたので廃止した
0.76.6 2022.1.17  スクラッチパッド:複数選択に対応
                  スクラッチパッド:トランスポーズ
                  スクラッチパッド:ベース、テンションの入力
                  スクラッチパッド:リハーモナイズ向けの機能を模索している(裏コード、セカンダリードミナント等実装)
                  スクラッチパッド:リドゥ機能追加
                  スクラッチパッド:代理コード的なものに置き換える機能追加(代理コード的なものの決定は、公知の音楽理論ではなく独自の実験的な数値計算アルゴリズムで行っているためいくつか課題がある)
0.77   2022.1.19  スクラッチパッド:カット、コピー、ペースト機能を追加した 
                  スクラッチパッド:垂直位置を揃えるAlign機能を追加した
                  GUIのデザインを調整した(フォント、カラー等)
                  スクラッチパッド:代理和音候補判定のアルゴリズム修正
0.77.1 2022.1.20  スクラッチパッド:アンドゥ・リドゥ処理が非常におかしかったので修正した。
                  スクラッチパッド:代理和音候補判定のアルゴリズム修正
                  スクラッチパッド:Sustain Pedalボタンを追加した。Sustain Pedalモードに入っているとペダルが踏まれていることになる。
                  スクラッチパッド:Drag MIDIボタンを追加した。Drag MIDIモードに入っているとDAWやスクラッチパッド等にD&Dすることができる。
0.77.2 2022.1.21  GUIのカラーを調整
                  スクラッチパッド:重なっている配置されているコードアイテムの接続ラインは、重なっているコードアイテム相互ラインに限定するようにした
0.77.3 2022.1.24  スクラッチパッド:新規作成直後に限りテキストで直接進行を入力できるようにした(例:1363)。
                  スクラッチパッド:Playをクリックしたときに右端のコードが選択されないことがあったので修正した
                  GUIデザイン調整
0.78   2022.1.26  スクラッチパッド:実験的な機能「Dice」を追加した。ダイス🎲アイコンをクリックするとランダムなコード列を適当な長さで生成する。またはコードアイテムを選択してF7キーを押下しても生成することができる。
                  コード進行表調整
                  GUIデザイン調整
0.78.1 2022.1.27  スクラッチパッド:DiceのAI調整
                  コード進行表調整
0.80   2022.1.28  古いバージョンから上書きインストールした場合、古い言語DLLを読み込もうとするためウィンドウのレイアウトが壊れる致命的なバグを修正した
0.80.1 2022.1.29  スクラッチパッド:DiceのAI調整
0.80.2 2022.1.30  スクラッチパッド:コードが代理コード化したときのアンドゥ処理がおかしくなることがあったので修正した
                  スクラッチパッド:AI調整
0.80.3 2022.2.1   スクラッチパッド:AI調整
0.80.4 2022.2.2   スクラッチパッド:AI調整
                  コード表を整理しm7+5を追加した。また7-9と7+9はテンション入力機能(Shift+ホイール)で入力できるから削除した。必要であればユーザーはchordConfigs.txtを書き換えることができる。
0.81   2022.2.6   スクラッチパッド:AIアルゴリズム調整中。
                  コード進行表調整。
                  UIを整理しメインウィンドウの高さを少し(45ピクセル)抑えた。
                  基本機能のみを表示しウィンドウサイズを抑えるコンパクトモードを追加した。ウィンドウ右下隅のボタンをクリックする。五度圏ビューやコードスケールビューの表示を抑止する。
0.82   2022.2.11  コード表を整理しM7-5を追加した。
                  スクラッチパッド:MIDIDragボタンは廃止しこの部分をモードレス化した。
                  スクラッチパッド:DAWにMIDIファイルをD&Dする場合、従来はMIDIdragモードになっている必要があったが、単純にウィンドウ外にドラッグすればいいように改めた。
                  スクラッチパッド:複数コードを選択してDAWにD&Dした場合コードを連結するようにした
                  スクラッチパッド:右クリックしてペーストした場合に正しい位置にペーストされていなかったので修正した
                  スクラッチパッド:+9系テンションの一部が入力できなかったので修正した。
0.82.1 2022.2.13  コード進行表調整
                  スクラッチパッド:コードアイテムに対するコンテキストメニュー調整
                  ト音記号を描画するようにした
0.83.0 2022.2.16  インストーラー追加
                   About Genkhord...ウィンドウを追加し、最新バージョンを確認できるようにした。
                   ♩♩♩♩メニューを追加した。DAWへのMIDIドロップ内容を限定的ながらカスタマイズできるようにした。
0.83.1 2022.2.17   ♩♩♩♩メニュー修正。
0.83.2 2022.2.19   スクラッチパッド:代理コード入力専用のツールバーを追加した。Substitution Chordボタンをクリックすると出現する。
                   ダイアトニックコードのカラー表示に一貫性がなかったので修正した
0.83.3 2022.2.20   スクラッチパッド:代理コード入力バーの調整
                   スクラッチパッド:ドミナントコードの代理コードの計算アルゴリズムを修正した
                   スクラッチパッド:ツールバーに移調ボタンを追加した
                   スクラッチパッド:選択済みのコードアイテムの上でホイール入力するとトランスポーズするようにした。Shift+でコード種、Ctrl+でベースを入力する。
                   スクラッチパッド:コードアイテムの上でShift+ホイール入力するとコード種を変更するようにした。
                   スクラッチパッド:コードアイテムの上でCtrl+ホイール入力するとベースを変更するようにした。
0.83.4 2022.2.20   スクラッチパッド:m6の代理コードはトライトーンを基準として計算するようにした。
                   スクラッチパッド:コードの代理処理に対するアンドゥがうまくいかないことがあるので修正した。
0.83.5 2022.2.21   スクラッチパッドいわゆる「ネガティブハーモニー」理論によるコードの反転処理をサポートした。Reharmonizeメニューの中のNegativeをクリックする。分数コードはサポートしない。複数コード同時に実行することができる。
                   コード進行表調整
0.83.6 2022.2.24   スクラッチパッド:コードアイテムにベースノートを入力した結果分数コードになったときにメインウィンドウ側で正しく演奏コード名が表示されなくなっていたので修正した。
                   スクラッチパッド:マイナーキーのときコードアイテムのカラーとデグリー表示が間違っていたので修正した。
                   スクラッチパッド:コードアイテムをCtrlキー+ドラッグすると複製されるようにした。
                   スクラッチパッド:コードの代理処理に対するアンドゥがうまくいかないことがまだあったので修正した。
                   スクラッチパッド:コードの代理処理のパラメータを調整している。
                   描画処理を多少軽量化した。
                   GUIカラー調整
                   コード進行表調整
0.83.7 2022.2.25   コードを右クリックすると、その右クリックしたコードへ「進行できそうなコード」を緑色で強調表示するようにした。「次に進行できそう」の逆方向の候補という意味になる。
                   コードをクリックして、マウスボタンを離すと進行候補表示を消していたが継続表示するようにした。
                   ロックボタン(🔐)を用意した。選択するとコードマトリクスをロックする。次のコードを探しているとき、次々に試すような使い方を意図している。
                   スクラッチパッド:代理コードバーを右クリックした場合はコードを元のコード置き換えるのではなく、元のコード近くに追加するようにした。
                   スクラッチパッド:右クリックメニューに単にコードを追加するAdd 1などのメニューを追加した
                   スクラッチパッド:ペーストと複製に対するアンドゥがおかしかったので修正した。
                   スクラッチパッド:カット(Ctrl+X)が正しく動作していなかったの修正した。
                   スクラッチパッド:代理コード計算時の同主調借用を想定したコードの重みづけを調整し引き上げた
                   コード進行表調整
0.83.8 2022.2.26   スクラッチパッド:代理コードバーをダブルクリックすると、そのダブルクリックしたコードに対する代理コードを再計算するようにした
                   スクラッチパッド:代理コードバーをロックする機能を追加した。📌ボタンをクリックする。
                   スクラッチパッド:ダイス機能を連続使用したときコードアイテムがウィンドウをはみ出しそうになった場合に、ウィンドウサイズを拡大するようにした
                   スクラッチパッド:C/Am以外のキーで数字入力した場合のコード種がおかしくなっていたので修正した
0.83.9 2022.2.27   スクラッチパッド:繰り返しコピー機能を追加した。コードを選択してRepeatメニューをクリック(またはCtrl+Rを入力)すると右方向へ複製し、後続コードを右へずらす。
                   スクラッチパッド:分割機能を追加した。コードを一つ選択してDivideメニューをクリックすると、そのコードを2つに分割する。
0.84.0 2022.3.3    スクラッチパッド:代理コード計算アルゴリズムを修正した(例:Cの代理としてC/Eが出なくなっていたので修正した)
                   スクラッチパッド:コードアイテム同士のラインが5度音程の場合に限りカラー表示するようにした
                   コンパクトモードのままコード名検索モードに入れてしまい矛盾した動作になっていたので修正した
                   コード進行表調整
0.84.1 2022.3.4    五度圏ビューに現在のコードに適合しそうなコードスケールを一つだけ表示するようにした
0.85.0 2022.3.8    五度圏ビューの機能を整理しタブUI化した。
0.85.1 2022.3.10   キー(調)設定にモード設定を統合した。
                   Finderモードにおいて分数コードの演奏がキーによってはおかしかったので修正した。
                   コード演奏のロックボタンの実装の調整をした
0.85.2 2022.3.14   キー表示に♯♭表示に一貫性がなかったので修正した
0.85.3 2022.3.15   スクラッチパッド:テンションツールバーを追加し、クリックされたコードに付加可能と考えられるテンションを一覧表示し簡単に加えられるようにした。
0.86.0 2022.3.16   音源を内蔵した





TODO:

- 進行の解説をつける
- 4K、高DPI対応する
- コード進行のカスタイズをもっとユーザーフレンドリーにする
- midファイルD&D内容のカスタマイズ(拍子の設定、白玉の場合1度や5度のオミット、ベースの別トラック化、アルペジオetc)
- アルペジエーター等の演奏機能
- MIDI INを活用する
- 自然なボイシングを提案するような機能
- 自然な旋律を提案するような機能
- 対位法的な考え方をサポートしたいがDAW側にあるべき機能かもしれない
- 旋法のサポートをきちんとしたいがDAW側にあるべき機能かもしれない
- 利用フレームワークをモダンなものに刷新する (.NET6、Electron、WebMidi etc)
- マルチプラットフォーム化 (Mac、Android、iOS)
- 五度圏表もっと活用できるはず
- 最近のAIの研究成果で応用できそうなものがないか確認する
- 自動作曲の研究用に出回っているいろいろな機械学習用の教師データを活用できないか検討する
- VSTインストゥルメント・プラグイン化
- VSTホスト化



●開発環境

Windows 2000 -> XP -> Vista -> 7 -> 8 -> 10 
Visual Studio 2005 -> 2015 -> 2019 -> 2022 (C#)


●作者

橋本直之 (HASHIMOTO Naoyuki) (nyk)
Mail: hashimoto.naoyuki@gmail.com
WEB: http://www6.plala.or.jp/nyk
Twitter: https://twitter.com/nyk2 @nyk2 #Genkhord(ご要望・バグ報告はこちらへどうぞ)
SoundCloud: https://soundcloud.com/nyk2
BLOG: http://naoyuki-hashimoto.blogspot.jp



●Licenses

NAudio
Copyright 2020 Mark Heath
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
