Class ProgressionReport
Complete analysis report for a chord progression.
public sealed class ProgressionReport
- Inheritance
-
ProgressionReport
- Inherited Members
Remarks
Chord symbols that cannot be parsed are skipped (see SkippedSymbols), so all Position/index fields in this report (Chords, Cadences, Modulations, SecondaryDominants, BorrowedChords, TensionCurve) refer to the PARSED sequence, which may be shorter than the input array.
Properties
AverageMovement
Average voice movement between chords in semitones.
public float AverageMovement { get; init; }
Property Value
AverageTension
Average harmonic tension across the progression (0-1)
public float AverageTension { get; init; }
Property Value
BorrowedChords
Detected borrowed chords (modal mixture).
public IReadOnlyList<BorrowedChordInfo> BorrowedChords { get; init; }
Property Value
Cadences
Detected cadences
public required IReadOnlyList<CadenceInfo> Cadences { get; init; }
Property Value
Chords
Detailed analysis of each chord
public required IReadOnlyList<ChordAnalysisDetail> Chords { get; init; }
Property Value
Complexity
Complexity level of the progression (0-1, higher = more complex)
public float Complexity { get; init; }
Property Value
HasBorrowedChords
Quick flag: any borrowed chords?
public bool HasBorrowedChords { get; }
Property Value
HasModalMixture
Does progression have modal mixture/borrowed chords?
public bool HasModalMixture { get; init; }
Property Value
HasSecondaryDominants
Quick flag: any secondary dominants?
public bool HasSecondaryDominants { get; }
Property Value
Highlights
Notable highlights or interesting moments in the progression
public IReadOnlyList<string> Highlights { get; init; }
Property Value
Key
Detected key signature
public required KeySignature Key { get; init; }
Property Value
KeyConfidence
Confidence in key detection (0-1)
public required float KeyConfidence { get; init; }
Property Value
Modulations
Detected modulations and tonicizations
public required IReadOnlyList<ModulationInfo> Modulations { get; init; }
Property Value
Narrative
Overall narrative/story of the progression
public required string Narrative { get; init; }
Property Value
ParallelFifths
Count of parallel fifths between adjacent chords, measured on the voicing a musician would write — each chord tone led to the nearest tone of the next chord, common tones held — since a chord symbol carries no voicing of its own.
public int ParallelFifths { get; init; }
Property Value
Remarks
It used to be counted between the chords stacked in root position in one octave, on which every change of root between two triads is a parallel fifth: I - IV - V - I had three and was rated "Rough".
ParallelOctaves
Approximate count of parallel octaves/unisons detected between adjacent chords. An octave needs a chord to sound one pitch class twice, and a chord symbol never does — a slash bass moves the note rather than doubling it — so this is 0 for symbol input. It is ParallelFifths that carries the signal here.
public int ParallelOctaves { get; init; }
Property Value
Pattern
Overall progression pattern (e.g., "i - VI - iv - i - V"); a chromatic chord with no diatonic numeral appears as "?".
public required string Pattern { get; init; }
Property Value
QualityRating
Overall voice-leading quality rating (free-form).
public string QualityRating { get; init; }
Property Value
SecondaryDominants
Detected secondary dominants (tonicizations): a dominant applied to a degree other than the tonic. A dominant resolving into the tonic of Key is that key's V7 → I and is never listed here, even where the chords before it had moved to another key.
public IReadOnlyList<SecondaryDominantInfo> SecondaryDominants { get; init; }
Property Value
Remarks
It used to be: judged against the key the music had moved to, the closing G7 → Cm of a C minor progression whose middle passed through E flat was listed as a tonicization of C minor, and a return to C through G7 → C after a move to G as "G7 → C (I)".
SkippedSymbols
Input chord symbols that could not be parsed and were skipped, with their indices in the ORIGINAL input array. All Position fields elsewhere in the report refer to the parsed sequence (with these symbols removed).
public IReadOnlyList<(int Index, string Symbol)> SkippedSymbols { get; init; }
Property Value
Smoothness
Voice-leading smoothness (0-1, higher = smoother).
public float Smoothness { get; init; }
Property Value
Suggestions
Suggestions for improvement or resolution
public required IReadOnlyList<string> Suggestions { get; init; }
Property Value
Summary
Short human-readable summary.
public string Summary { get; init; }
Property Value
TensionCurve
Array of tension values for each chord (0-1, used for tension curves)
public float[]? TensionCurve { get; init; }
Property Value
- float[]
UsesHarmonicMinor
Does progression use harmonic minor (raised 7th)?
public bool UsesHarmonicMinor { get; init; }
Property Value
UsesMelodicMinor
Does progression use melodic minor?
public bool UsesMelodicMinor { get; init; }
Property Value
Methods
Generate(string[])
Convenience factory matching the examples.
public static ProgressionReport Generate(string[] chordSymbols)
Parameters
chordSymbolsstring[]
Returns
Exceptions
- ArgumentNullException
chordSymbolsis null.
ToFormattedReport()
Generate a formatted text report
public string ToFormattedReport()