-
Notifications
You must be signed in to change notification settings - Fork 1
/
mainwindow.h
86 lines (62 loc) · 1.75 KB
/
mainwindow.h
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
#pragma once
// system includes
#include <memory>
#include <optional>
// Qt includes
#include <QMainWindow>
#include <QAbstractSocket>
#include <QDateTime>
#include <QTimer>
#include <QList>
#include <QAudioDeviceInfo>
// local includes
#include "ui_mainwindow.h"
#include "r3client.h"
#include "bpmdetector.h"
#include "audioformat.h"
#include "r3ctlsettings.h"
class QAudioInput;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(R3CtlSettings &settings, QWidget *parent = nullptr);
~MainWindow();
private slots:
void connectPressed();
void disconnectPressed();
void connected();
void disconnected();
void error(QAbstractSocket::SocketError error);
void statusReceived(const QString &ctx, const QJsonValue &jsonValue);
void toggleAllPressed();
void discoLeftPressed();
void discoRightPressed();
void bpmPressed();
void openAudioDevicePressed();
void closeAudioDevicePressed();
void bpmTimeout();
void receivedFrames(const QVector<frame_t> &frames);
void themeSelected();
private:
void log(const QString &msg);
void lightCmd(const QString &light, const QString &status);
void updateDisco();
void updateAudioDevices();
private:
R3CtlSettings &m_settings;
Ui::MainWindow m_ui;
R3Client m_client;
bool m_toggleState{};
uint8_t m_discoState{};
struct BpmTap { QDateTime begin{QDateTime::currentDateTime()}; int count{}; int msPerBeat, bpm; bool flag{}; };
std::optional<BpmTap> m_bpmTap;
QTimer m_timer;
QList<QAudioDeviceInfo> m_devices;
std::unique_ptr<QAudioInput> m_input;
BpmDetector m_detector;
sample_t m_min{}, m_max{};
double m_distanceSum{};
std::size_t m_count{};
QTimer m_timer2;
};