-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAnswerValidator.hpp
More file actions
77 lines (70 loc) · 2.81 KB
/
Copy pathAnswerValidator.hpp
File metadata and controls
77 lines (70 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef ANSWERVALIDATOR_HPP
#define ANSWERVALIDATOR_HPP
#include <cstdint>
#include <string>
#include <vector>
/**
* @brief Classe AnswerValidator
*
* Cette classe fournit des methodes pour valider des notes et accords musicaux.
* Elle permet de comparer des notes jouees avec des notes attendues et de
* verifier la validite d'accords, y compris avec renversements.
*/
class AnswerValidator {
public:
/**
* @brief Valide une note jouee par rapport a une note attendue.
*
* @param noteJouee La note jouee (ex: "C4").
* @param noteAttendue La note attendue (ex: "C4").
* @return true si la note jouee correspond a la note attendue, false sinon.
*/
static bool valider(const std::string& noteJouee,
const std::string& noteAttendue);
/**
* @brief Valide un accord sans prendre en compte le renversement.
*
* Compare les accords joues et attendus, en ignorant l'ordre des notes.
*
* @param accordJoue Vecteur de notes jouees (ex: {"C4", "E4", "G4"}).
* @param accordAttendu Vecteur de notes attendues (ex: {"C4", "E4", "G4"}).
* @return true si les deux accords contiennent les memes notes, false
* sinon.
*/
static bool validerAccordSR(const std::vector<std::string>& accordJoue,
const std::vector<std::string>& accordAttendu);
/**
* @brief Valide un accord avec prise en compte d'un renversement
* specifique.
*
* Compare les accords joues et attendus en recalibrant les notes selon le
* renversement specifie.
*
* @param accordJoue Vecteur de notes jouees (ex: {"E4", "G4", "C5"}).
* @param accordAttendu Vecteur de notes attendues (ex: {"C4", "E4", "G4"}).
* @param renversement Numero du renversement+1 attendu (2 = premier
* renversement, etc.).ATTENTION renversement = 1 => Pas de renversement,
* renversement = 2 => 1er renversement et renversement = 3 => 2eme
* renversement
* @return true si l'accord joue correspond a l'accord attendu pour le
* renversement donne, false sinon.
*/
static bool
validerAccordRenversement(const std::vector<std::string>& accordJoue,
const std::vector<std::string>& accordAttendu,
uint32_t renversement);
private:
/**
* @brief Convertit un nom de note en valeur MIDI modulo 12
* @param note Nom de la note (ex: "C", "Gb", "D#")
* @return Valeur MIDI (0-11) ou -1 si invalide
*/
static int getNoteValue(std::string noteName);
/**
* @brief Convertit une note avec octave en valeur MIDI absolue
* @param note Str de la note (ex: "C4")
* @return Valeur MIDI absolue ou -1 si invalide
*/
static int getAbsoluteMidiValue(const std::string& noteStr);
};
#endif // ANSWERVALIDATOR_HPP