コード進行イベント列(ChordEvent)を、推定用の時刻付きノートへ展開する。 各コードを構成音に分解し、コードの持続時間を各音の重みとする。
音高はオクターブ情報を保持した MIDI 風の値(C4=60 基準)で、転回形(スラッシュ コード)のベース音が最低音に来る。キー推定はオクターブを無視するので影響せず、 コード推定(detectProgression)ではベース音から転回形を判定できる。
これにより parseChords → chordEventsToNotes → detectKeyChanges / detectProgression と繋ぐと、コード進行文字列から直接キー/コードを推定できる。
parseChords
chordEventsToNotes
detectKeyChanges
detectProgression
ChordEvent の配列(parseChords の出力)。
時刻付きノート(TimedNote)の配列。解析できないコードは無視する。
detectKeyChanges(chordEventsToNotes(parseChords("C | G | Am | F", 120))) Copy
detectKeyChanges(chordEventsToNotes(parseChords("C | G | Am | F", 120)))
コード進行イベント列(ChordEvent)を、推定用の時刻付きノートへ展開する。 各コードを構成音に分解し、コードの持続時間を各音の重みとする。
音高はオクターブ情報を保持した MIDI 風の値(C4=60 基準)で、転回形(スラッシュ コード)のベース音が最低音に来る。キー推定はオクターブを無視するので影響せず、 コード推定(detectProgression)ではベース音から転回形を判定できる。
これにより
parseChords→chordEventsToNotes→detectKeyChanges/detectProgressionと繋ぐと、コード進行文字列から直接キー/コードを推定できる。