MythTV master
visualize.h
Go to the documentation of this file.
1/*
2 visualize.h
3
4 (c) 2003 Thor Sigvaldason and Isaac Richards
5 Closely based on code from mq3 by Brad Hughes
6
7 Part of the mythTV project
8
9 music visualizers
10*/
11
12#ifndef VISUALIZE_H
13#define VISUALIZE_H
14
15// C++ headers
16#include <vector>
17
18// Qt headers
19#include <QCoreApplication>
20#include <QVector>
21
22// MythTV headers
23#include <libmyth/visual.h>
26
27// MythMusic headers
28#include "constants.h"
29
30#include <complex>
31extern "C" {
32 #include <libavutil/tx.h>
33}
34
35static constexpr uint16_t SAMPLES_DEFAULT_SIZE { 512 };
36
37class MainVisual;
38
39class VisualNode
40{
41 public:
42 VisualNode(short *l, short *r, unsigned long n, std::chrono::milliseconds timecode)
43 : m_left(l), m_right(r), m_length(n), m_offset(timecode)
44 {
45 // left and right are allocated and then passed to this class
46 // the code that allocated left and right should give up all ownership
47 }
48
50 {
51 delete [] m_left;
52 delete [] m_right;
53 }
54
55 short *m_left {nullptr};
56 short *m_right {nullptr};
57 unsigned long m_length;
58 std::chrono::milliseconds m_offset;
59};
60
62{
63 public:
64 explicit VisualBase(bool screensaverenable = false);
65 virtual ~VisualBase(void);
66
67 // return true if the output should stop
68 virtual bool process( VisualNode *node ) = 0;
69
70 // this is called on nodes that will not be displayed :: Not needed for most visualizations
71 // (i.e. between the displayed frames, if you need the whole audio stream)
72 // as of v33, this processes *all* samples, see the comments in WaveForm
73 virtual bool processUndisplayed( VisualNode */*node*/ )
74 {
75 return true; // By default this does nothing : Ignore the in-between chunks of audio data
76 };
77
78 virtual bool draw( QPainter *, const QColor & ) = 0;
79 virtual void resize( const QSize &size ) = 0;
80 virtual void handleKeyPress([[maybe_unused]] const QString &action) { };
81 virtual int getDesiredFPS(void) { return m_fps; }
82 // Override this if you need the potential of capturing more data than the default
83 virtual unsigned long getDesiredSamples(void) { return SAMPLES_DEFAULT_SIZE; }
84 static void drawWarning(QPainter *p, const QColor &back, QSize size, const QString& warning, int fontsize = 28);
85
86 protected:
87 int m_fps {20};
89};
90
92{
93 public:
96 { g_pVisFactories = this;}
97 virtual ~VisFactory() = default;
98 const VisFactory* next() const {return m_pNextVisFactory;}
99 virtual const QString &name(void) const = 0;
100 virtual VisualBase* create(MainVisual *parent, const QString &pluginName) const = 0;
101 virtual uint plugins(QStringList *list) const = 0;
102 static const VisFactory* VisFactories() {return g_pVisFactories;}
103 protected:
106};
107
108
109#define RUBBERBAND 0 // NOLINT(cppcoreguidelines-macro-usage)
110#define TWOCOLOUR 1 // NOLINT(cppcoreguidelines-macro-usage)
111
113{
114 public:
115 StereoScope();
116 ~StereoScope() override = default;
117
118 void resize( const QSize &size ) override; // VisualBase
119 bool process( VisualNode *node ) override; // VisualBase
120 bool draw( QPainter *p, const QColor &back ) override; // VisualBase
121
122 protected:
123 QColor m_startColor {Qt::yellow};
124 QColor m_targetColor {Qt::red};
125 std::vector<double> m_magnitudes;
126 QSize m_size;
128 double const m_falloff {1.0};
129};
130
131class MonoScope : public StereoScope
132{
133 public:
134 MonoScope() = default;
135 ~MonoScope() override = default;
136
137 bool process( VisualNode *node ) override; // StereoScope
138 bool draw( QPainter *p, const QColor &back ) override; // StereoScope
139};
140
141// WaveForm - see whole track - by twitham@sbcglobal.net, 2023/01
142
143class WaveForm : public StereoScope
144{
145 static constexpr unsigned long kWFAudioSize { 4096 };
146 static QImage s_image; // picture of full track
147
148public:
149 WaveForm() = default;
150 ~WaveForm() override;
151
152 unsigned long getDesiredSamples(void) override;
153 bool processUndisplayed(VisualNode *node) override;
154 bool process( VisualNode *node ) override;
155 bool draw( QPainter *p, const QColor &back ) override;
156 void handleKeyPress(const QString &action) override;
157
158 protected:
159 void saveload(MusicMetadata *meta);
160 QSize m_wfsize {1920, 1080}; // picture size
161 unsigned long m_offset {0}; // node offset for draw
162 short *m_right {nullptr};
163 QFont m_font; // optional text overlay
164 bool m_showtext {false};
166 unsigned long m_duration {60000}; // file length in milliseconds
167 unsigned int m_lastx {1920}; // vert line tracker
168 unsigned int m_position {0}; // location inside pixel
169 short int m_minl {0}; // left range minimum
170 short int m_maxl {0}; // left range maximum
171 unsigned long m_sqrl {0}; // sum of squares, for RMS
172 short int m_minr {0}; // right range minimum
173 short int m_maxr {0}; // right range maximum
174 unsigned long m_sqrr {0}; // sum of squares, for RMS
175 bool m_stream {false}; // true if radio stream
176};
177
178class LogScale
179{
180 public:
181 explicit LogScale(int maxscale = 0, int maxrange = 0);
182
183 int scale() const { return m_scale; }
184 int range() const { return m_range; }
185
186 void setMax(int maxscale, int maxrange);
187
188 int operator[](int index);
189
190
191 private:
192 std::vector<int> m_indices;
193 int m_scale {0};
194 int m_range {0};
195};
196
198{
199 public:
200 explicit MelScale(int maxscale = 0, int maxrange = 0, int maxfreq = 0);
201
202 int scale() const { return m_scale; }
203 int range() const { return m_range; }
204
205 void setMax(int maxscale, int maxrange, int maxfreq);
206 static double hz2mel(double hz) { return 1127 * log(1 + (hz / 700)); }
207 static double mel2hz(double mel) { return 700 * (exp(mel / 1127) - 1); }
208 int operator[](int index);
209 QString note(int note); // text of note, 0 - 125
210 int pixel(int note); // position of note
211 int freq(int note); // frequency of note
212
213 private:
214 std::vector<int> m_indices; // FFT bin of each pixel
215 std::array<QString, 12> m_notes // one octave of notes
216 = {"C", ".", "D", ".", "E", "F", ".", "G", ".", "A", ".", "B"};
217 std::array<int,126> m_pixels {0}; // pixel of each note
218 std::array<int,126> m_freqs {0}; // frequency of each note
219 int m_scale {0};
220 int m_range {0};
221};
222
223// Spectrogram - by twitham@sbcglobal.net, 2023/05
224
226{
227 // 1152 is the most I can get = 38.28125 fps @ 44100
228 static constexpr int kSGAudioSize { 1152 };
229
230 public:
231 Spectrogram(bool hist);
232 ~Spectrogram() override;
233
234 unsigned long getDesiredSamples(void) override;
235 void resize(const QSize &size) override; // VisualBase
236 void FFT(VisualNode *node);
237 bool processUndisplayed(VisualNode *node) override;
238 bool process( VisualNode *node ) override;
239 bool draw(QPainter *p, const QColor &back = Qt::black) override;
240 void handleKeyPress(const QString &action) override;
241
242 static QImage s_image; // picture of spectrogram
243 static int s_offset; // position on screen
244
245 protected:
246 static inline double clamp(double cur, double max, double min);
247 QImage *m_image; // picture in use
248 QSize m_sgsize {1920, 1080}; // picture size
249 QSize m_size; // displayed size
250 MelScale m_scale; // Y-axis
251 int m_fftlen {16 * 1024}; // window width
252 int m_color {0}; // color or grayscale
253 QVector<float> m_sigL; // decaying signal window
254 QVector<float> m_sigR;
255 float* m_dftL { nullptr }; // real in, complex out
256 float* m_dftR { nullptr };
257 float* m_rdftTmp { nullptr };
258 static constexpr float kTxScale { 1.0F };
259 AVTXContext* m_rdftContext { nullptr };
260 av_tx_fn m_rdft { nullptr };
261
262 std::array<int,256*6> m_red {0}; // continuous color spectrum
263 std::array<int,256*6> m_green {0};
264 std::array<int,256*6> m_blue {0};
265 bool m_binpeak { true }; // peak of bins, else mean
266 bool m_history { true }; // spectrogram? or spectrum
267 bool m_showtext {false}; // freq overlay?
268};
269
270class Spectrum : public VisualBase
271{
272 // This class draws bars (up and down)
273 // based on the magnitudes at various
274 // frequencies in the audio data.
275
276 public:
277 Spectrum();
278 ~Spectrum() override;
279
280 void resize(const QSize &size) override; // VisualBase
281 bool process(VisualNode *node) override; // VisualBase
282 bool processUndisplayed(VisualNode *node) override; // VisualBase
283 bool draw(QPainter *p, const QColor &back = Qt::black) override; // VisualBase
284
285 protected:
286 static inline double clamp(double cur, double max, double min);
287
288 QColor m_startColor {Qt::blue};
289 QColor m_targetColor {Qt::red};
290 QVector<QRect> m_rectsL;
291 QVector<QRect> m_rectsR;
292 QVector<float> m_magnitudes;
293 QSize m_size;
295
296 // Setup the "magical" audio data transformations
297 // provided by the Fast Fourier Transforms library
298 float m_scaleFactor {2.0};
299 float m_falloff {10.0};
301
302 int m_fftlen {16 * 1024}; // window width
303 QVector<float> m_sigL; // decaying signal window
304 QVector<float> m_sigR;
305 float* m_dftL { nullptr }; // real in, complex out
306 float* m_dftR { nullptr };
307 float* m_rdftTmp { nullptr };
308 static constexpr float kTxScale { 1.0F };
309 AVTXContext* m_rdftContext { nullptr };
310 av_tx_fn m_rdft { nullptr };
311};
312
313class Squares : public Spectrum
314{
315 public:
316 Squares();
317 ~Squares() override = default;
318
319 void resize (const QSize &newsize) override; // Spectrum
320 bool draw(QPainter *p, const QColor &back = Qt::black) override; // Spectrum
321
322 private:
323 void drawRect(QPainter *p, QRect *rect, int i, int c, int w, int h);
324 QSize m_actualSize {0,0};
327};
328
329class Piano : public VisualBase
330{
331 // This class draws bars (up and down)
332 // based on the magnitudes at piano pitch
333 // frequencies in the audio data.
334
335 static constexpr unsigned long kPianoAudioSize { 4096 };
336 static constexpr unsigned int kPianoNumKeys { 88 };
337
338#define piano_audio float
339#define goertzel_data float
340
341 static constexpr double kPianoRmsNegligible { .001 };
342 static constexpr double kPianoSpectrumSmoothing { 0.95 };
343 static constexpr goertzel_data kPianoMinVol { -10 };
344 static constexpr double kPianoKeypressTooLight { .2 };
345
349
350 // This keeps track of the samples processed for each note
351 // Low notes require a lot of samples to be correctly identified
352 // Higher ones are displayed quicker
355
356 bool is_black_note; // These are painted on top of white notes, and have different colouring
357};
358
359 public:
360 Piano();
361 ~Piano() override;
362
363 void resize(const QSize &size) override; // VisualBase
364
365 bool process(VisualNode *node) override; // VisualBase
366
367 // These functions are new, since we need to inspect all the data
368 bool processUndisplayed(VisualNode *node) override; // VisualBase
369 unsigned long getDesiredSamples(void) override; // VisualBase
370
371 bool draw(QPainter *p, const QColor &back = Qt::black) override; // VisualBase
372
373 protected:
374 static inline double clamp(double cur, double max, double min);
375 bool process_all_types(VisualNode *node, bool this_will_be_displayed);
376 void zero_analysis(void);
377
378 QColor m_whiteStartColor {245,245,245};
379 QColor m_whiteTargetColor {Qt::red};
380 QColor m_blackStartColor {10,10,10};
381 QColor m_blackTargetColor {Qt::red};
382
383 std::vector<QRect> m_rects;
384 QSize m_size;
385
386 std::chrono::milliseconds m_offsetProcessed {0ms};
387
390
391 std::vector<double> m_magnitude;
392};
393
394class AlbumArt : public VisualBase
395{
397
398 public:
399 AlbumArt(void);
400 ~AlbumArt() override = default;
401
402 void resize(const QSize &size) override; // VisualBase
403 bool process(VisualNode *node = nullptr) override; // VisualBase
404 bool draw(QPainter *p, const QColor &back = Qt::black) override; // VisualBase
405 void handleKeyPress(const QString &action) override; // VisualBase
406
407 private:
408 bool needsUpdate(void);
409 void findFrontCover(void);
410 bool cycleImage(void);
411
412 QSize m_size;
415 QImage m_image;
416
418 QDateTime m_lastCycle;
419};
420
421class Blank : public VisualBase
422{
423 // This draws ... well ... nothing
424 public:
425 Blank();
426 ~Blank() override = default;
427
428 void resize(const QSize &size) override; // VisualBase
429 bool process(VisualNode *node = nullptr) override; // VisualBase
430 bool draw(QPainter *p, const QColor &back = Qt::black) override; // VisualBase
431
432 private:
433 QSize m_size;
434};
435
436#endif // __visualize_h
void resize(const QSize &size) override
Definition: visualize.cpp:2231
~AlbumArt() override=default
void findFrontCover(void)
Definition: visualize.cpp:2181
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:2295
AlbumArt(void)
Definition: visualize.cpp:2174
bool process(VisualNode *node=nullptr) override
Definition: visualize.cpp:2236
bool needsUpdate(void)
Definition: visualize.cpp:2275
void handleKeyPress(const QString &action) override
Definition: visualize.cpp:2241
QDateTime m_lastCycle
Definition: visualize.h:418
QSize m_cursize
Definition: visualize.h:413
QImage m_image
Definition: visualize.h:415
bool cycleImage(void)
Definition: visualize.cpp:2206
Q_DECLARE_TR_FUNCTIONS(AlbumArt)
MusicMetadata * m_currentMetadata
Definition: visualize.h:417
QSize m_size
Definition: visualize.h:412
ImageType m_currImageType
Definition: visualize.h:414
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:2388
void resize(const QSize &size) override
Definition: visualize.cpp:2377
bool process(VisualNode *node=nullptr) override
Definition: visualize.cpp:2383
QSize m_size
Definition: visualize.h:433
~Blank() override=default
int m_scale
Definition: visualize.h:193
LogScale(int maxscale=0, int maxrange=0)
int operator[](int index) const
std::vector< int > m_indices
int range() const
Definition: visualize.h:184
void setMax(int maxscale, int maxrange)
int m_range
Definition: visualize.h:194
int scale() const
Definition: visualize.h:183
int m_range
Definition: visualize.h:220
std::vector< int > m_indices
Definition: visualize.h:214
int freq(int note)
Definition: visualize.cpp:216
int pixel(int note)
Definition: visualize.cpp:209
MelScale(int maxscale=0, int maxrange=0, int maxfreq=0)
Definition: visualize.cpp:157
int range() const
Definition: visualize.h:203
int scale() const
Definition: visualize.h:202
void setMax(int maxscale, int maxrange, int maxfreq)
Definition: visualize.cpp:162
static double hz2mel(double hz)
Definition: visualize.h:206
std::array< QString, 12 > m_notes
Definition: visualize.h:216
std::array< int, 126 > m_pixels
Definition: visualize.h:217
std::array< int, 126 > m_freqs
Definition: visualize.h:218
int operator[](int index)
Definition: visualize.cpp:197
static double mel2hz(double mel)
Definition: visualize.h:207
int m_scale
Definition: visualize.h:219
QString note(int note)
Definition: visualize.cpp:202
~MonoScope() override=default
bool draw(QPainter *p, const QColor &back) override
Definition: visualize.cpp:551
MonoScope()=default
bool process(VisualNode *node) override
Definition: visualize.cpp:460
QColor m_blackStartColor
Definition: visualize.h:380
static constexpr goertzel_data kPianoMinVol
Definition: visualize.h:343
static constexpr unsigned int kPianoNumKeys
Definition: visualize.h:336
static constexpr unsigned long kPianoAudioSize
Definition: visualize.h:335
static constexpr double kPianoSpectrumSmoothing
Definition: visualize.h:342
unsigned long getDesiredSamples(void) override
Definition: visualize.cpp:1887
QSize m_size
Definition: visualize.h:384
piano_audio * m_audioData
Definition: visualize.h:389
void zero_analysis(void)
Definition: visualize.cpp:1792
QColor m_whiteStartColor
Definition: visualize.h:378
std::chrono::milliseconds m_offsetProcessed
Definition: visualize.h:386
std::vector< double > m_magnitude
Definition: visualize.h:391
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:2045
bool processUndisplayed(VisualNode *node) override
Definition: visualize.cpp:1897
bool process(VisualNode *node) override
Definition: visualize.cpp:1903
static double clamp(double cur, double max, double min)
Definition: visualize.cpp:2040
static constexpr double kPianoRmsNegligible
Definition: visualize.h:341
QColor m_blackTargetColor
Definition: visualize.h:381
~Piano() override
Definition: visualize.cpp:1784
QColor m_whiteTargetColor
Definition: visualize.h:379
void resize(const QSize &size) override
Definition: visualize.cpp:1808
std::vector< QRect > m_rects
Definition: visualize.h:383
bool process_all_types(VisualNode *node, bool this_will_be_displayed)
Definition: visualize.cpp:1913
static constexpr double kPianoKeypressTooLight
Definition: visualize.h:344
piano_key_data * m_pianoData
Definition: visualize.h:388
bool process(VisualNode *node) override
Definition: visualize.cpp:1070
static constexpr int kSGAudioSize
Definition: visualize.h:228
void FFT(VisualNode *node)
float * m_rdftTmp
Definition: visualize.h:257
QSize m_sgsize
Definition: visualize.h:248
bool m_showtext
Definition: visualize.h:267
unsigned long getDesiredSamples(void) override
Definition: visualize.cpp:1064
int m_fftlen
Definition: visualize.h:251
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:1306
~Spectrogram() override
Definition: visualize.cpp:1048
float * m_dftL
Definition: visualize.h:255
float * m_dftR
Definition: visualize.h:256
void handleKeyPress(const QString &action) override
Definition: visualize.cpp:1326
static constexpr float kTxScale
Definition: visualize.h:258
Spectrogram(bool hist)
Definition: visualize.cpp:967
static QImage s_image
Definition: visualize.h:242
bool m_binpeak
Definition: visualize.h:265
std::array< int, 256 *6 > m_blue
Definition: visualize.h:264
QSize m_size
Definition: visualize.h:249
av_tx_fn m_rdft
Definition: visualize.h:260
QVector< float > m_sigR
Definition: visualize.h:254
QImage * m_image
Definition: visualize.h:247
void resize(const QSize &size) override
Definition: visualize.cpp:1056
bool processUndisplayed(VisualNode *node) override
Definition: visualize.cpp:1139
static int s_offset
Definition: visualize.h:243
QVector< float > m_sigL
Definition: visualize.h:253
bool m_history
Definition: visualize.h:266
MelScale m_scale
Definition: visualize.h:250
static double clamp(double cur, double max, double min)
Definition: visualize.cpp:1300
AVTXContext * m_rdftContext
Definition: visualize.h:259
std::array< int, 256 *6 > m_green
Definition: visualize.h:263
std::array< int, 256 *6 > m_red
Definition: visualize.h:262
void resize(const QSize &size) override
Definition: visualize.cpp:1423
int m_fftlen
Definition: visualize.h:302
~Spectrum() override
Definition: visualize.cpp:1415
bool process(VisualNode *node) override
Definition: visualize.cpp:1464
QVector< float > m_magnitudes
Definition: visualize.h:292
QColor m_targetColor
Definition: visualize.h:289
QVector< QRect > m_rectsL
Definition: visualize.h:290
bool processUndisplayed(VisualNode *node) override
Definition: visualize.cpp:1469
AVTXContext * m_rdftContext
Definition: visualize.h:309
MelScale m_scale
Definition: visualize.h:294
int m_analyzerBarWidth
Definition: visualize.h:300
float * m_dftL
Definition: visualize.h:305
float m_falloff
Definition: visualize.h:299
QVector< float > m_sigR
Definition: visualize.h:304
QVector< QRect > m_rectsR
Definition: visualize.h:291
static constexpr float kTxScale
Definition: visualize.h:308
float m_scaleFactor
Definition: visualize.h:298
QVector< float > m_sigL
Definition: visualize.h:303
QSize m_size
Definition: visualize.h:293
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:1576
av_tx_fn m_rdft
Definition: visualize.h:310
float * m_rdftTmp
Definition: visualize.h:307
QColor m_startColor
Definition: visualize.h:288
float * m_dftR
Definition: visualize.h:306
static double clamp(double cur, double max, double min)
Definition: visualize.cpp:1571
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:1702
QSize m_actualSize
Definition: visualize.h:324
~Squares() override=default
void resize(const QSize &newsize) override
Definition: visualize.cpp:1661
int m_numberOfSquares
Definition: visualize.h:326
void drawRect(QPainter *p, QRect *rect, int i, int c, int w, int h)
Definition: visualize.cpp:1668
int m_fakeHeight
Definition: visualize.h:325
bool process(VisualNode *node) override
Definition: visualize.cpp:241
bool draw(QPainter *p, const QColor &back) override
Definition: visualize.cpp:359
QSize m_size
Definition: visualize.h:126
std::vector< double > m_magnitudes
Definition: visualize.h:125
bool const m_rubberband
Definition: visualize.h:127
QColor m_startColor
Definition: visualize.h:123
QColor m_targetColor
Definition: visualize.h:124
~StereoScope() override=default
void resize(const QSize &size) override
Definition: visualize.cpp:231
double const m_falloff
Definition: visualize.h:128
static VisFactory * g_pVisFactories
Definition: visualize.h:104
virtual VisualBase * create(MainVisual *parent, const QString &pluginName) const =0
virtual uint plugins(QStringList *list) const =0
const VisFactory * next() const
Definition: visualize.h:98
virtual ~VisFactory()=default
VisFactory()
Definition: visualize.h:94
VisFactory * m_pNextVisFactory
Definition: visualize.h:105
virtual const QString & name(void) const =0
static const VisFactory * VisFactories()
Definition: visualize.h:102
virtual bool draw(QPainter *, const QColor &)=0
VisualBase(bool screensaverenable=false)
Definition: visualize.cpp:49
static void drawWarning(QPainter *p, const QColor &back, QSize size, const QString &warning, int fontsize=28)
Definition: visualize.cpp:68
virtual ~VisualBase(void)
Definition: visualize.cpp:56
bool m_xscreensaverenable
Definition: visualize.h:88
virtual bool process(VisualNode *node)=0
virtual bool processUndisplayed(VisualNode *)
Definition: visualize.h:73
virtual void handleKeyPress(const QString &action)
Definition: visualize.h:80
int m_fps
Definition: visualize.h:87
virtual unsigned long getDesiredSamples(void)
Definition: visualize.h:83
virtual int getDesiredFPS(void)
Definition: visualize.h:81
virtual void resize(const QSize &size)=0
~VisualNode()
Definition: visualize.h:49
unsigned long m_length
Definition: visualize.h:57
long m_length
Definition: videovisual.h:38
VisualNode(short *l, short *r, unsigned long n, std::chrono::milliseconds timecode)
Definition: visualize.h:42
short * m_left
Definition: videovisual.h:36
short * m_right
Definition: videovisual.h:37
std::chrono::milliseconds m_offset
Definition: videovisual.h:39
~WaveForm() override
Definition: visualize.cpp:618
unsigned long getDesiredSamples(void) override
Definition: visualize.cpp:686
bool process(VisualNode *node) override
Definition: visualize.cpp:692
short int m_minl
Definition: visualize.h:169
MusicMetadata * m_currentMetadata
Definition: visualize.h:165
bool processUndisplayed(VisualNode *node) override
Definition: visualize.cpp:703
short int m_maxr
Definition: visualize.h:173
unsigned int m_lastx
Definition: visualize.h:167
short int m_maxl
Definition: visualize.h:170
short int m_minr
Definition: visualize.h:172
unsigned long m_sqrr
Definition: visualize.h:174
static constexpr unsigned long kWFAudioSize
Definition: visualize.h:145
void handleKeyPress(const QString &action) override
Definition: visualize.cpp:860
bool m_showtext
Definition: visualize.h:164
unsigned long m_offset
Definition: visualize.h:161
void saveload(MusicMetadata *meta)
Definition: visualize.cpp:625
static QImage s_image
Definition: visualize.h:146
short * m_right
Definition: visualize.h:162
unsigned long m_duration
Definition: visualize.h:166
unsigned long m_sqrl
Definition: visualize.h:171
bool m_stream
Definition: visualize.h:175
QFont m_font
Definition: visualize.h:163
unsigned int m_position
Definition: visualize.h:168
QSize m_wfsize
Definition: visualize.h:160
WaveForm()=default
bool draw(QPainter *p, const QColor &back) override
Definition: visualize.cpp:819
unsigned int uint
Definition: freesurround.h:24
static guint32 * back
Definition: goom_core.cpp:25
unsigned short uint16_t
Definition: iso6937tables.h:3
ImageType
Definition: musicmetadata.h:35
@ IT_UNKNOWN
Definition: musicmetadata.h:36
None log(str msg, int level=LOGDEBUG)
Definition: xbmc.py:9
goertzel_data magnitude
Definition: visualize.h:347
goertzel_data coeff
Definition: visualize.h:347
goertzel_data q2
Definition: visualize.h:347
goertzel_data max_magnitude_seen
Definition: visualize.h:348
goertzel_data q1
Definition: visualize.h:347
int samples_process_before_display_update
Definition: visualize.h:354
static constexpr uint16_t SAMPLES_DEFAULT_SIZE
Definition: visualize.h:35
#define goertzel_data
Definition: visualize.h:339
#define RUBBERBAND
Definition: visualize.h:109
#define piano_audio
Definition: visualize.h:338