XJ music engine  1.9.6
In-game runtime engine for XJ music.
Chord.h
Go to the documentation of this file.
1 // Copyright (c) XJ Music Inc. (https://xjmusic.com) All Rights Reserved.
2 
3 #ifndef XJMUSIC_MUSIC_CHORD_H
4 #define XJMUSIC_MUSIC_CHORD_H
5 
6 #include <iostream>
7 #include <vector>
8 #include <string>
9 
10 #include "PitchClass.h"
11 #include "SlashRoot.h"
12 #include "Accidental.h"
13 #include "Root.h"
14 
15 namespace XJ {
16 
20  class ChordSynonym {
21  public:
22  std::string match;
24 
25  explicit ChordSynonym(const std::string &match, bool caseSensitive = false);
26 
27  bool operator==(const ChordSynonym &other) const;
28 
29  [[nodiscard]] bool matches(const std::string &input) const;
30  };
31 
35  class ChordForm {
36  public:
37  std::string description;
38  std::vector<ChordSynonym> synonyms{};
39 
40  ChordForm(const std::string &description, const std::vector<ChordSynonym> &synonyms);
41 
42  [[nodiscard]] bool matches(const std::string &input) const;
43 
44  bool operator==(const ChordForm &other) const;
45 
46  std::size_t hashCode();
47 
48  };
49 
53  class Chord {
54  private:
55  static std::vector<ChordForm> forms;
56 
57  public:
58  std::string description;
59 
60  PitchClass root; // Root Pitch Class
61 
62  SlashRoot slashRoot; // Slash Root Pitch Class
63 
64  Accidental accidental; // the (flat/sharp) adjustment symbol, which will be used to express this chord
65 
66  bool operator<(const Chord &other) const;
67 
68  bool operator==(const Chord &other) const;
69 
70  explicit Chord(const std::string &input);
71 
78  static std::string normalize(const std::string &input);
79 
85  std::string toString() const;
86 
93  [[nodiscard]] int delta(const Chord &target) const;
94 
100  [[nodiscard]] std::string getName() const;
101 
106 
113  static Chord of(const std::string &name);
114 
120  [[nodiscard]] bool isNoChord() const;
121 
128  bool isAcceptable(const Chord &other) const;
129 
135  [[nodiscard]] bool has_value() const;
136  };
137 
138 }// namespace XJ
139 
140 #endif// XJMUSIC_MUSIC_CHORD_H
Definition: Chord.h:35
std::string description
Definition: Chord.h:37
bool matches(const std::string &input) const
Definition: Chord.cpp:43
bool operator==(const ChordForm &other) const
Definition: Chord.cpp:36
ChordForm(const std::string &description, const std::vector< ChordSynonym > &synonyms)
Definition: Chord.cpp:30
std::vector< ChordSynonym > synonyms
Definition: Chord.h:38
std::size_t hashCode()
Definition: Chord.cpp:52
Definition: Chord.h:20
ChordSynonym(const std::string &match, bool caseSensitive=false)
Definition: Chord.cpp:13
std::string match
Definition: Chord.h:22
bool operator==(const ChordSynonym &other) const
Definition: Chord.cpp:19
bool matches(const std::string &input) const
Definition: Chord.cpp:24
bool caseSensitive
Definition: Chord.h:23
Definition: Chord.h:53
std::string description
Definition: Chord.h:58
PitchClass root
Definition: Chord.h:60
Accidental accidental
Definition: Chord.h:64
Chord(const std::string &input)
Definition: Chord.cpp:174
bool operator==(const Chord &other) const
Definition: Chord.cpp:169
static std::string normalize(const std::string &input)
Definition: Chord.cpp:236
SlashRoot slashRoot
Definition: Chord.h:62
std::string toString() const
Definition: Chord.cpp:226
PitchClass slashRootPitchClass()
Definition: Chord.cpp:231
static Chord of(const std::string &name)
Definition: Chord.cpp:249
std::string getName() const
Definition: Chord.cpp:215
int delta(const Chord &target) const
Definition: Chord.cpp:210
bool isAcceptable(const Chord &other) const
Definition: Chord.cpp:259
bool has_value() const
Definition: Chord.cpp:264
bool isNoChord() const
Definition: Chord.cpp:254
bool operator<(const Chord &other) const
Definition: Chord.cpp:161
Definition: SlashRoot.h:17
Definition: ActiveAudio.h:11
Accidental
Definition: Accidental.h:12
PitchClass
Definition: PitchClass.h:19