3 Acorde::Acorde(std::string c
): cifra(c
) {
7 regoff_t i
= parser
[1].rm_so
;
8 regoff_t l
= parser
[1].rm_eo
;
9 raiz
= new Nota(cifra
.substr(i
, l
));
19 void Acorde::tetrade() {
20 regoff_t i
= parser
[2].rm_so
;
21 regoff_t l
= parser
[2].rm_eo
;
22 std::string tom
= cifra
.substr(i
, l
);
30 acorde
.push_back(SETIMA
);
32 acorde
.push_back(SETIMA_MAIOR
);
37 acorde
.push_back(SETIMA
);
39 acorde
.push_back(SETIMA_MAIOR
);
44 acorde
.push_back(SETIMA
);
46 acorde
.push_back(SETIMA_MAIOR
);
51 acorde
.push_back(SETIMA
);
53 acorde
.push_back(SETIMA_DIMINUTA
);
56 acorde
.push_back(TERCEIRA_MAIOR
);
57 acorde
.push_back(QUINTA_DIMINUTA
);
58 acorde
.push_back(SETIMA
);
63 void Acorde::triade() {
64 regoff_t i
= parser
[2].rm_so
;
80 void Acorde::diminuta() {
81 acorde
.push_back(TERCEIRA_MENOR
);
82 acorde
.push_back(QUINTA_DIMINUTA
);
85 void Acorde::aumentada() {
86 acorde
.push_back(TERCEIRA_MAIOR
);
87 acorde
.push_back(QUINTA_AUMENTADA
);
90 void Acorde::menor() {
91 acorde
.push_back(TERCEIRA_MENOR
);
92 acorde
.push_back(QUINTA
);
95 void Acorde::maior() {
96 acorde
.push_back(TERCEIRA_MAIOR
);
97 acorde
.push_back(QUINTA
);
100 bool Acorde::valida() {
103 regcomp(®
, "^([A-G][#b]?)([-+_])?$", REG_EXTENDED
);
104 if (regexec(®
, cifra
.c_str(), 3, parser
, 0) == 0) {
110 regcomp(®
, "^([A-G][#b]?)([-+]?/M?|_/m?|m5/)?7$", REG_EXTENDED
);
111 if (regexec(®
, cifra
.c_str(), 3, parser
, 0) == 0) {
119 Nota
* Acorde::getNota(byte n
) {
120 return (n
== 0) ? raiz
: raiz
->proximoTom(acorde
[n
]);
123 Nota
** Acorde::getNotas() {
124 Nota
** notas
= new Nota
*[numNotas
];
126 for (int i
= 1; i
< numNotas
; ++i
)
127 notas
[i
] = raiz
->proximoTom(acorde
[i
-1]);