Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
CavaSpectrumProvider.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
7
8#include <QByteArray>
9#include <QProcess>
10#include <QString>
11#include <QVector>
12
13namespace PhosphorAudio {
14
15class PHOSPHORAUDIO_EXPORT CavaSpectrumProvider : public IAudioSpectrumProvider
16{
17 Q_OBJECT
18
19public:
20 explicit CavaSpectrumProvider(QObject* parent = nullptr);
22
23 static bool isCavaInstalled();
24 static QString detectAudioMethod();
25
26 bool isAvailable() const override;
27 void start() override;
28 void stop() override;
29 bool isRunning() const override;
30
31 int barCount() const override;
32 void setBarCount(int count) override;
33
34 int framerate() const override;
35 void setFramerate(int fps) override;
36
37 QVector<float> spectrum() const override;
38
39private:
40 void buildConfig();
41 void onReadyReadStandardOutput();
42 void onProcessStateChanged(QProcess::ProcessState state);
43 void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
44 void onProcessError(QProcess::ProcessError error);
45 void restartAsync();
46
47 static constexpr qsizetype kMaxStdoutBufferSize = 65536;
48
49 QProcess* m_process = nullptr;
50 QByteArray m_stdoutBuffer;
51 int m_barCount = 64;
52 int m_framerate = 60;
53 QString m_config;
54 QVector<float> m_spectrum;
55 QVector<float> m_smoothedSpectrum;
56 bool m_stopping = false;
57 bool m_pendingRestart = false;
58};
59
60} // namespace PhosphorAudio
Definition CavaSpectrumProvider.h:16
void setFramerate(int fps) override
QVector< float > spectrum() const override
void setBarCount(int count) override
CavaSpectrumProvider(QObject *parent=nullptr)
bool isRunning() const override
bool isAvailable() const override
Definition IAudioSpectrumProvider.h:14
Definition AudioDefaults.h:6