| 243 | } |
| 244 | |
| 245 | bool ChordDetector::isSimilarChord(const Chord& a, const Chord& b) { |
| 246 | if (!a.isValid() || !b.isValid()) return false; |
| 247 | |
| 248 | // Same root and type = similar |
| 249 | if (a.rootNote == b.rootNote && a.type == b.type) { |
| 250 | return true; |
| 251 | } |
| 252 | |
| 253 | // Check for enharmonic equivalents or closely related chords |
| 254 | // For now, just exact match |
| 255 | return false; |
| 256 | } |
| 257 | |
| 258 | void ChordDetector::normalizeChroma(float* chroma) { |
| 259 | // Find max value |