-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmetronomewindow.cpp
More file actions
89 lines (75 loc) · 2.55 KB
/
metronomewindow.cpp
File metadata and controls
89 lines (75 loc) · 2.55 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
78
79
80
81
82
83
84
85
86
87
88
89
#include "metronomewindow.h"
#include "ui_metronomewindow.h"
#include <string>
MetronomeWindow::MetronomeWindow(QString rcRoot, QWidget *parent) :
QMainWindow(parent),
m_rcRoot(rcRoot),
ui(new Ui::MetronomeWindow)
{
std::string samplePath = (m_rcRoot + "/sounds/Metronome.wav").toUtf8().constData();
std::string accentSamplePath = (m_rcRoot + "/sounds/MetronomeUp.wav").toUtf8().constData();
m_metronome = new Metronome(samplePath, accentSamplePath);
ui->setupUi(this);
ui->btnQuarterth->setBeatsPerBar(4);
ui->btnQuarterthTriplets->setBeatsPerBar(6);
ui->btnEighth->setBeatsPerBar(8);
ui->btnEighthTriplets->setBeatsPerBar(12);
ui->btnSixteenth->setBeatsPerBar(16);
ui->btnSixteenthTriplets->setBeatsPerBar(24);
switch (m_metronome->beatsPerBar()) {
case 4: ui->btnQuarterth->setChecked(true); break;
case 6: ui->btnQuarterthTriplets->setChecked(true); break;
case 8: ui->btnEighth->setChecked(true); break;
case 12: ui->btnEighthTriplets->setChecked(true); break;
case 16: ui->btnSixteenth->setChecked(true); break;
case 24: ui->btnSixteenthTriplets->setChecked(true); break;
}
ui->bpmSpinBox->setValue(m_metronome->tempo());
ui->bpmSpinBox->setMinimum(MIN_TEMPO);
ui->bpmSpinBox->setMaximum(MAX_TEMPO);
}
MetronomeWindow::~MetronomeWindow()
{
delete m_metronome;
delete ui;
}
void MetronomeWindow::startStopMetronome(bool start) {
QPushButton *b = qobject_cast<QPushButton *>(sender());
if (start) {
m_metronome->start();
b->setText("Stop");
} else {
m_metronome->stop();
b->setText("Start");
}
}
void MetronomeWindow::changeTempo(int newTempo) {
if (newTempo < MIN_TEMPO) {
newTempo = MIN_TEMPO;
} else if (newTempo > MAX_TEMPO) {
newTempo = MAX_TEMPO;
}
if (m_metronome->tempo() != newTempo) {
m_metronome->setTempo(newTempo);
emit tempoChanged(newTempo);
}
}
void MetronomeWindow::chooseSubdivision(QAbstractButton *btn, bool toggled) {
if (!toggled) {
return;
}
QSubdivisionButton *b = qobject_cast<QSubdivisionButton *>(btn);
m_metronome->setBeatsPerBar(b->beatsPerBar());
}
void MetronomeWindow::tapTempo() {
m_metronome->tapTempo();
ui->bpmSpinBox->setValue(m_metronome->tempo());
}
void MetronomeWindow::halfTempo() {
auto currentTempo = m_metronome->tempo();
changeTempo(currentTempo / 2);
}
void MetronomeWindow::doubleTempo() {
auto currentTempo = m_metronome->tempo();
changeTempo(currentTempo * 2);
}