/
helico.hpp
171 lines (117 loc) · 2.83 KB
/
helico.hpp
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include <iostream>
#include <chrono>
#include <thread>
#include <fstream>
#include <vector>
#include <sstream>
void tempo(size_t duration);
void up_to_n_lines(int n);
class Helico // pour faire l'hélico ^^
{
protected:
struct Detail
{
const size_t ms;
const std::string chaine;
int etat;
const int nb_etat;
Detail(size_t ms_=30,std::string str="-\\|/");
void operator()();
};
std::thread th;
bool stop_ = false;
public:
Helico();
void stop();
~Helico();
};
class Aquarium { // du latin aqua qui veut dire "eau" (principal composant de la biayre)
protected:
std::vector<std::string> animvect;
std::thread th;
bool started = false;
int nbrl = 0;
int speed = 500;
// boucle principale dans un thread à part
void loop();
bool stop_ = false;
public:
// chargement d'un fichier d'animation en ascii-art
void loadFile(std::string path);
// ajout d'une frame au vecteur de frames
void addFrame(std::string fr);
// affichage d'une frame
void displFrame(int i);
// setter du speed
void setSpeed(int sp);
// constructeur rapide avec chemin du fichier et vitesse
Aquarium(std::string path, int sp = 500);
// constructeur pour chargement / lancement manuels
Aquarium();
// lancement de l'animation
void start();
// stopation de l'animation
void stop();
~Aquarium();
};
// sudo modprobe pcspkr
typedef struct {
float f;
float d;
} Note;
class MaitreGims { // pour faire de la musique
protected:
std::vector<Note> soundvect;
std::thread th;
bool started = false;
float tempoo = 1;
// boucle principale dans un thread à part
void loop();
bool stop_ = false;
public:
/*
Notes fondamentales :
C0 16.35 2109.89
C#0/Db0 17.32 1991.47
D0 18.35 1879.69
D#0/Eb0 19.45 1774.20
E0 20.60 1674.62
F0 21.83 1580.63
F#0/Gb0 23.12 1491.91
G0 24.50 1408.18
G#0/Ab0 25.96 1329.14
A0 27.50 1254.55
A#0/Bb0 29.14 1184.13
B0 30.87 1117.67
*/
// fréquences des notes fondamentales
const float C0 = 16.35;
const float C0d = 17.32;
const float D0 = 18.35;
const float D0d = 19.45;
const float E0 = 20.60;
const float F0 = 21.83;
const float F0d = 23.12;
const float G0 = 24.50;
const float G0d = 25.96;
const float A0 = 27.50;
const float A0d = 29.14;
const float B0 = 30.87;
// chargement d'un fichier de musique
void loadFile(std::string path);
// ajout d'une note au vecteur de notes
void addNote(float f, float d);
// jouer une note
void playNote(int i);
// setter du tempo
void setTempo(float tm);
// constructeur rapide avec chemin du fichier
MaitreGims(std::string path);
// constructeur pour chargement / lancement manuels
MaitreGims();
// lancement de la mélodie
void start();
// stopation de la mélodie
void stop();
~MaitreGims();
};