3 void Nota::setNome(char t
) {
4 if (t
>= 'A' && t
<= 'G')
8 void Nota::setSemitom(char st
) {
11 semitom
= normal
; break;
13 semitom
= bemol
; break;
15 semitom
= sustenido
; break;
19 Nota::Nota(byte midi
): diatonica("C D EF G A B") {
20 oitava
= (midi
/ 12) - 1;
22 if (diatonica
[tom
] != ' ') {
23 nome
= diatonica
[tom
];
26 nome
= diatonica
[tom
-1];
31 Nota::Nota(std::string nota
): diatonica("C D EF G A B"), oitava(4) {
34 setSemitom(' '); break;
36 setSemitom(nota
[1]); break;
41 int Nota::indiceDiatonica() {
42 int i
= diatonica
.find(nome
);
48 return (nome
!= 'C') ? i
-1 : B
; // Cb = B
50 return (nome
!= 'B') ? i
+1 : C
; // B# = C
56 int Nota::midiOitava() {
61 return (byte
)(midiOitava() + indiceDiatonica());
64 Nota
* Nota::proximoTom(byte dif
) {
65 int novoIndice
= (indiceDiatonica()+dif
) % 12;
66 return new Nota((byte
)(midiOitava()+novoIndice
));
69 bool Nota::operator==(const Nota
& n
) {
70 return toMidi() == ((Nota
) n
).toMidi();