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