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