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>
31 extern "C" {
32  #include <libavutil/tx.h>
33 }
34 
35 static constexpr uint16_t SAMPLES_DEFAULT_SIZE { 512 };
36 
37 class MainVisual;
38 
39 class 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};
88  bool m_xscreensaverenable {true};
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 
112 class StereoScope : public VisualBase
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;
127  bool const m_rubberband {RUBBERBAND};
128  double const m_falloff {1.0};
129 };
130 
131 class 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 
143 class WaveForm : public StereoScope
144 {
145  static constexpr unsigned long kWFAudioSize { 4096 };
146  static QImage s_image; // picture of full track
147 
148 public:
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 
178 class 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 
197 class MelScale
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 
225 class Spectrogram : public VisualBase
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 
270 class 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 
313 class 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};
325  int m_fakeHeight {0};
327 };
328 
329 class 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 
394 class 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;
413  QSize m_cursize;
415  QImage m_image;
416 
418  QDateTime m_lastCycle;
419 };
420 
421 class 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
Spectrogram::m_sigL
QVector< float > m_sigL
Definition: visualize.h:253
Squares::Squares
Squares()
Definition: visualize.cpp:1656
VisualNode::~VisualNode
~VisualNode()
Definition: visualize.h:49
Piano::piano_key_data::samples_processed
int samples_processed
Definition: visualize.h:353
Blank::Blank
Blank()
Definition: visualize.cpp:2369
Spectrogram::getDesiredSamples
unsigned long getDesiredSamples(void) override
Definition: visualize.cpp:1064
Spectrum::m_rectsR
QVector< QRect > m_rectsR
Definition: visualize.h:291
Spectrogram::m_sgsize
QSize m_sgsize
Definition: visualize.h:248
Spectrogram::draw
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:1306
MelScale::m_indices
std::vector< int > m_indices
Definition: visualize.h:214
MelScale::operator[]
int operator[](int index)
Definition: visualize.cpp:197
Spectrum::~Spectrum
~Spectrum() override
Definition: visualize.cpp:1415
Piano::piano_key_data
Definition: visualize.h:346
Piano::m_magnitude
std::vector< double > m_magnitude
Definition: visualize.h:391
Piano::piano_key_data::samples_process_before_display_update
int samples_process_before_display_update
Definition: visualize.h:354
Spectrum::processUndisplayed
bool processUndisplayed(VisualNode *node) override
Definition: visualize.cpp:1469
LogScale::m_range
int m_range
Definition: visualize.h:194
AlbumArt::findFrontCover
void findFrontCover(void)
Definition: visualize.cpp:2181
VisFactory::g_pVisFactories
static VisFactory * g_pVisFactories
Definition: visualize.h:104
Piano
Definition: visualize.h:329
AlbumArt::resize
void resize(const QSize &size) override
Definition: visualize.cpp:2229
WaveForm::m_right
short * m_right
Definition: visualize.h:162
Piano::kPianoNumKeys
static constexpr unsigned int kPianoNumKeys
Definition: visualize.h:336
Piano::draw
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:2045
back
static guint32 * back
Definition: goom_core.cpp:25
Spectrogram::s_image
static QImage s_image
Definition: visualize.h:242
Spectrum::m_scaleFactor
float m_scaleFactor
Definition: visualize.h:298
VisualNode
Definition: videovisual.h:24
Piano::processUndisplayed
bool processUndisplayed(VisualNode *node) override
Definition: visualize.cpp:1897
Piano::zero_analysis
void zero_analysis(void)
Definition: visualize.cpp:1792
Piano::getDesiredSamples
unsigned long getDesiredSamples(void) override
Definition: visualize.cpp:1887
WaveForm::m_sqrl
unsigned long m_sqrl
Definition: visualize.h:171
MelScale::range
int range() const
Definition: visualize.h:203
Spectrum::process
bool process(VisualNode *node) override
Definition: visualize.cpp:1464
Spectrogram::process
bool process(VisualNode *node) override
Definition: visualize.cpp:1070
Spectrogram::m_red
std::array< int, 256 *6 > m_red
Definition: visualize.h:262
VisualNode::VisualNode
VisualNode(short *l, short *r, unsigned long n, std::chrono::milliseconds timecode)
Definition: visualize.h:42
StereoScope
Definition: visualize.h:112
AlbumArt::m_image
QImage m_image
Definition: visualize.h:415
Spectrum::m_sigR
QVector< float > m_sigR
Definition: visualize.h:304
VisualBase::getDesiredSamples
virtual unsigned long getDesiredSamples(void)
Definition: visualize.h:83
VisFactory::VisFactory
VisFactory()
Definition: visualize.h:94
RUBBERBAND
#define RUBBERBAND
Definition: visualize.h:109
mythbaseexp.h
Spectrogram::clamp
static double clamp(double cur, double max, double min)
Definition: visualize.cpp:1300
AlbumArt::Q_DECLARE_TR_FUNCTIONS
Q_DECLARE_TR_FUNCTIONS(AlbumArt)
WaveForm::saveload
void saveload(MusicMetadata *meta)
Definition: visualize.cpp:625
LogScale::operator[]
int operator[](int index) const
Definition: videovisualdefs.h:54
MelScale::setMax
void setMax(int maxscale, int maxrange, int maxfreq)
Definition: visualize.cpp:162
WaveForm::draw
bool draw(QPainter *p, const QColor &back) override
Definition: visualize.cpp:819
WaveForm::handleKeyPress
void handleKeyPress(const QString &action) override
Definition: visualize.cpp:860
Spectrogram::m_rdftTmp
float * m_rdftTmp
Definition: visualize.h:257
WaveForm::m_minr
short int m_minr
Definition: visualize.h:172
SAMPLES_DEFAULT_SIZE
static constexpr uint16_t SAMPLES_DEFAULT_SIZE
Definition: visualize.h:35
IT_UNKNOWN
@ IT_UNKNOWN
Definition: musicmetadata.h:30
AlbumArt
Definition: visualize.h:394
StereoScope::m_rubberband
const bool m_rubberband
Definition: visualize.h:127
Spectrum::m_dftL
float * m_dftL
Definition: visualize.h:305
VisualBase
Definition: visualize.h:61
LogScale::m_indices
std::vector< int > m_indices
Definition: videovisualdefs.h:61
Blank::draw
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:2386
Spectrum::m_scale
MelScale m_scale
Definition: visualize.h:294
StereoScope::resize
void resize(const QSize &size) override
Definition: visualize.cpp:231
StereoScope::m_falloff
const double m_falloff
Definition: visualize.h:128
Spectrogram::m_scale
MelScale m_scale
Definition: visualize.h:250
Spectrum::Spectrum
Spectrum()
Definition: visualize.cpp:1401
Blank::m_size
QSize m_size
Definition: visualize.h:433
MusicMetadata
Definition: musicmetadata.h:80
StereoScope::process
bool process(VisualNode *node) override
Definition: visualize.cpp:241
Spectrogram::resize
void resize(const QSize &size) override
Definition: visualize.cpp:1056
LogScale::LogScale
LogScale(int maxscale=0, int maxrange=0)
Definition: videovisualdefs.h:10
StereoScope::m_size
QSize m_size
Definition: visualize.h:126
WaveForm::m_offset
unsigned long m_offset
Definition: visualize.h:161
Spectrum::m_falloff
float m_falloff
Definition: visualize.h:299
WaveForm::m_showtext
bool m_showtext
Definition: visualize.h:164
Piano::m_offsetProcessed
std::chrono::milliseconds m_offsetProcessed
Definition: visualize.h:386
WaveForm::m_font
QFont m_font
Definition: visualize.h:163
MonoScope
Definition: visualize.h:131
VisualNode::m_left
short * m_left
Definition: videovisual.h:36
VisualBase::VisualBase
VisualBase(bool screensaverenable=false)
Definition: visualize.cpp:49
AlbumArt::m_currImageType
ImageType m_currImageType
Definition: visualize.h:414
WaveForm::kWFAudioSize
static constexpr unsigned long kWFAudioSize
Definition: visualize.h:145
Spectrogram::m_rdft
av_tx_fn m_rdft
Definition: visualize.h:260
WaveForm::m_position
unsigned int m_position
Definition: visualize.h:168
Spectrum::draw
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:1576
Spectrum::m_fftlen
int m_fftlen
Definition: visualize.h:302
WaveForm::m_duration
unsigned long m_duration
Definition: visualize.h:166
Piano::kPianoKeypressTooLight
static constexpr double kPianoKeypressTooLight
Definition: visualize.h:344
VisualNode::m_offset
std::chrono::milliseconds m_offset
Definition: videovisual.h:39
MonoScope::process
bool process(VisualNode *node) override
Definition: visualize.cpp:460
Spectrum::m_analyzerBarWidth
int m_analyzerBarWidth
Definition: visualize.h:300
Piano::m_whiteStartColor
QColor m_whiteStartColor
Definition: visualize.h:378
MonoScope::~MonoScope
~MonoScope() override=default
VisualBase::resize
virtual void resize(const QSize &size)=0
AlbumArt::draw
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:2293
Spectrogram::s_offset
static int s_offset
Definition: visualize.h:243
Piano::m_blackTargetColor
QColor m_blackTargetColor
Definition: visualize.h:381
Spectrum::m_magnitudes
QVector< float > m_magnitudes
Definition: visualize.h:292
Squares
Definition: visualize.h:313
MelScale::note
QString note(int note)
Definition: visualize.cpp:202
LogScale::m_scale
int m_scale
Definition: visualize.h:193
StereoScope::draw
bool draw(QPainter *p, const QColor &back) override
Definition: visualize.cpp:359
MelScale::freq
int freq(int note)
Definition: visualize.cpp:216
Piano::kPianoAudioSize
static constexpr unsigned long kPianoAudioSize
Definition: visualize.h:335
Squares::drawRect
void drawRect(QPainter *p, QRect *rect, int i, int c, int w, int h)
Definition: visualize.cpp:1668
Spectrogram::m_size
QSize m_size
Definition: visualize.h:249
WaveForm::m_stream
bool m_stream
Definition: visualize.h:175
Piano::kPianoSpectrumSmoothing
static constexpr double kPianoSpectrumSmoothing
Definition: visualize.h:342
Spectrogram::m_rdftContext
AVTXContext * m_rdftContext
Definition: visualize.h:259
hardwareprofile.config.p
p
Definition: config.py:33
Spectrogram::m_dftL
float * m_dftL
Definition: visualize.h:255
VisualNode::m_right
short * m_right
Definition: videovisual.h:37
LogScale::range
int range() const
Definition: visualize.h:184
MelScale::pixel
int pixel(int note)
Definition: visualize.cpp:209
AlbumArt::~AlbumArt
~AlbumArt() override=default
StereoScope::~StereoScope
~StereoScope() override=default
AlbumArt::cycleImage
bool cycleImage(void)
Definition: visualize.cpp:2200
Spectrum::m_startColor
QColor m_startColor
Definition: visualize.h:288
VisFactory
Definition: visualize.h:91
AlbumArt::m_cursize
QSize m_cursize
Definition: visualize.h:413
LogScale::setMax
void setMax(int maxscale, int maxrange)
Definition: videovisualdefs.h:18
LogScale::scale
int scale() const
Definition: visualize.h:183
Spectrogram::m_blue
std::array< int, 256 *6 > m_blue
Definition: visualize.h:264
Spectrum::m_sigL
QVector< float > m_sigL
Definition: visualize.h:303
Piano::piano_key_data::q2
goertzel_data q2
Definition: visualize.h:347
Spectrogram::m_sigR
QVector< float > m_sigR
Definition: visualize.h:254
AlbumArt::needsUpdate
bool needsUpdate(void)
Definition: visualize.cpp:2273
VisualBase::getDesiredFPS
virtual int getDesiredFPS(void)
Definition: visualize.h:81
AlbumArt::process
bool process(VisualNode *node=nullptr) override
Definition: visualize.cpp:2234
StereoScope::m_targetColor
QColor m_targetColor
Definition: visualize.h:124
MelScale::hz2mel
static double hz2mel(double hz)
Definition: visualize.h:206
Spectrogram::Spectrogram
Spectrogram(bool hist)
Definition: visualize.cpp:967
Squares::m_fakeHeight
int m_fakeHeight
Definition: visualize.h:325
VisualBase::~VisualBase
virtual ~VisualBase(void)
Definition: visualize.cpp:56
goertzel_data
#define goertzel_data
Definition: visualize.h:339
Spectrogram::m_fftlen
int m_fftlen
Definition: visualize.h:251
VisualBase::draw
virtual bool draw(QPainter *, const QColor &)=0
Piano::resize
void resize(const QSize &size) override
Definition: visualize.cpp:1808
Spectrogram::m_showtext
bool m_showtext
Definition: visualize.h:267
MelScale::m_range
int m_range
Definition: visualize.h:220
StereoScope::m_magnitudes
std::vector< double > m_magnitudes
Definition: visualize.h:125
WaveForm
Definition: visualize.h:143
VisFactory::plugins
virtual uint plugins(QStringList *list) const =0
Spectrum::kTxScale
static constexpr float kTxScale
Definition: visualize.h:308
WaveForm::m_lastx
unsigned int m_lastx
Definition: visualize.h:167
VisFactory::VisFactories
static const VisFactory * VisFactories()
Definition: visualize.h:102
WaveForm::m_currentMetadata
MusicMetadata * m_currentMetadata
Definition: visualize.h:165
AlbumArt::m_currentMetadata
MusicMetadata * m_currentMetadata
Definition: visualize.h:417
WaveForm::getDesiredSamples
unsigned long getDesiredSamples(void) override
Definition: visualize.cpp:686
Spectrum::m_rdftContext
AVTXContext * m_rdftContext
Definition: visualize.h:309
WaveForm::s_image
static QImage s_image
Definition: visualize.h:146
MelScale::m_pixels
std::array< int, 126 > m_pixels
Definition: visualize.h:217
MelScale::MelScale
MelScale(int maxscale=0, int maxrange=0, int maxfreq=0)
Definition: visualize.cpp:157
StereoScope::m_startColor
QColor m_startColor
Definition: visualize.h:123
Spectrogram::m_history
bool m_history
Definition: visualize.h:266
WaveForm::m_wfsize
QSize m_wfsize
Definition: visualize.h:160
Spectrogram::m_image
QImage * m_image
Definition: visualize.h:247
Spectrogram
Definition: visualize.h:225
Piano::piano_key_data::magnitude
goertzel_data magnitude
Definition: visualize.h:347
Spectrogram::handleKeyPress
void handleKeyPress(const QString &action) override
Definition: visualize.cpp:1326
VisualBase::process
virtual bool process(VisualNode *node)=0
Spectrogram::kTxScale
static constexpr float kTxScale
Definition: visualize.h:258
VisFactory::create
virtual VisualBase * create(MainVisual *parent, const QString &pluginName) const =0
MelScale
Definition: visualize.h:197
Squares::m_actualSize
QSize m_actualSize
Definition: visualize.h:324
MelScale::m_freqs
std::array< int, 126 > m_freqs
Definition: visualize.h:218
AlbumArt::m_lastCycle
QDateTime m_lastCycle
Definition: visualize.h:418
WaveForm::m_minl
short int m_minl
Definition: visualize.h:169
Piano::kPianoRmsNegligible
static constexpr double kPianoRmsNegligible
Definition: visualize.h:341
MainVisual
Definition: mainvisual.h:34
Spectrum::m_rdftTmp
float * m_rdftTmp
Definition: visualize.h:307
WaveForm::m_maxl
short int m_maxl
Definition: visualize.h:170
Piano::m_audioData
piano_audio * m_audioData
Definition: visualize.h:389
VisualBase::processUndisplayed
virtual bool processUndisplayed(VisualNode *)
Definition: visualize.h:73
AlbumArt::handleKeyPress
void handleKeyPress(const QString &action) override
Definition: visualize.cpp:2239
VisFactory::~VisFactory
virtual ~VisFactory()=default
VisualNode::m_length
long m_length
Definition: videovisual.h:38
Squares::~Squares
~Squares() override=default
StereoScope::StereoScope
StereoScope()
Definition: visualize.cpp:226
WaveForm::m_sqrr
unsigned long m_sqrr
Definition: visualize.h:174
VisualBase::m_fps
int m_fps
Definition: visualize.h:87
Piano::piano_key_data::coeff
goertzel_data coeff
Definition: visualize.h:347
MonoScope::draw
bool draw(QPainter *p, const QColor &back) override
Definition: visualize.cpp:551
Piano::m_pianoData
piano_key_data * m_pianoData
Definition: visualize.h:388
Spectrum::resize
void resize(const QSize &size) override
Definition: visualize.cpp:1423
Squares::draw
bool draw(QPainter *p, const QColor &back=Qt::black) override
Definition: visualize.cpp:1702
VisualNode::m_length
unsigned long m_length
Definition: visualize.h:57
WaveForm::WaveForm
WaveForm()=default
Spectrum::m_dftR
float * m_dftR
Definition: visualize.h:306
Spectrogram::m_binpeak
bool m_binpeak
Definition: visualize.h:265
Piano::piano_key_data::is_black_note
bool is_black_note
Definition: visualize.h:356
WaveForm::processUndisplayed
bool processUndisplayed(VisualNode *node) override
Definition: visualize.cpp:703
Blank::~Blank
~Blank() override=default
Spectrogram::processUndisplayed
bool processUndisplayed(VisualNode *node) override
Definition: visualize.cpp:1139
constants.h
Spectrogram::FFT
void FFT(VisualNode *node)
Piano::m_size
QSize m_size
Definition: visualize.h:384
AlbumArt::AlbumArt
AlbumArt(void)
Definition: visualize.cpp:2174
VisualBase::m_xscreensaverenable
bool m_xscreensaverenable
Definition: visualize.h:88
Squares::resize
void resize(const QSize &newsize) override
Definition: visualize.cpp:1661
WaveForm::m_maxr
short int m_maxr
Definition: visualize.h:173
MonoScope::MonoScope
MonoScope()=default
Piano::kPianoMinVol
static constexpr goertzel_data kPianoMinVol
Definition: visualize.h:343
VisFactory::name
virtual const QString & name(void) const =0
Blank::resize
void resize(const QSize &size) override
Definition: visualize.cpp:2375
Piano::m_whiteTargetColor
QColor m_whiteTargetColor
Definition: visualize.h:379
Spectrum::m_rectsL
QVector< QRect > m_rectsL
Definition: visualize.h:290
Piano::process
bool process(VisualNode *node) override
Definition: visualize.cpp:1903
VisFactory::m_pNextVisFactory
VisFactory * m_pNextVisFactory
Definition: visualize.h:105
build_compdb.action
action
Definition: build_compdb.py:9
Spectrogram::m_dftR
float * m_dftR
Definition: visualize.h:256
Blank
Definition: visualize.h:421
Spectrum
Definition: visualize.h:270
Blank::process
bool process(VisualNode *node=nullptr) override
Definition: visualize.cpp:2381
MelScale::scale
int scale() const
Definition: visualize.h:202
WaveForm::process
bool process(VisualNode *node) override
Definition: visualize.cpp:692
Piano::Piano
Piano()
Definition: visualize.cpp:1742
Spectrogram::~Spectrogram
~Spectrogram() override
Definition: visualize.cpp:1048
uint16_t
unsigned short uint16_t
Definition: iso6937tables.h:3
Spectrogram::m_color
int m_color
Definition: visualize.h:252
Spectrogram::m_green
std::array< int, 256 *6 > m_green
Definition: visualize.h:263
MelScale::mel2hz
static double mel2hz(double mel)
Definition: visualize.h:207
Piano::clamp
static double clamp(double cur, double max, double min)
Definition: visualize.cpp:2040
Piano::~Piano
~Piano() override
Definition: visualize.cpp:1784
Piano::piano_key_data::q1
goertzel_data q1
Definition: visualize.h:347
VisualBase::handleKeyPress
virtual void handleKeyPress([[maybe_unused]] const QString &action)
Definition: visualize.h:80
Piano::m_blackStartColor
QColor m_blackStartColor
Definition: visualize.h:380
xbmc.log
None log(str msg, int level=LOGDEBUG)
Definition: xbmc.py:9
Squares::m_numberOfSquares
int m_numberOfSquares
Definition: visualize.h:326
Spectrum::clamp
static double clamp(double cur, double max, double min)
Definition: visualize.cpp:1571
ImageType
ImageType
Definition: musicmetadata.h:28
LogScale
Definition: videovisualdefs.h:7
VisFactory::next
const VisFactory * next() const
Definition: visualize.h:98
AlbumArt::m_size
QSize m_size
Definition: visualize.h:412
Spectrum::m_rdft
av_tx_fn m_rdft
Definition: visualize.h:310
WaveForm::~WaveForm
~WaveForm() override
Definition: visualize.cpp:618
Piano::m_rects
std::vector< QRect > m_rects
Definition: visualize.h:383
musicmetadata.h
Piano::process_all_types
bool process_all_types(VisualNode *node, bool this_will_be_displayed)
Definition: visualize.cpp:1913
MelScale::m_notes
std::array< QString, 12 > m_notes
Definition: visualize.h:216
Spectrogram::kSGAudioSize
static constexpr int kSGAudioSize
Definition: visualize.h:228
Piano::piano_key_data::max_magnitude_seen
goertzel_data max_magnitude_seen
Definition: visualize.h:348
VisualBase::drawWarning
static void drawWarning(QPainter *p, const QColor &back, QSize size, const QString &warning, int fontsize=28)
Definition: visualize.cpp:68
Spectrum::m_targetColor
QColor m_targetColor
Definition: visualize.h:289
uint
unsigned int uint
Definition: freesurround.h:24
Spectrum::m_size
QSize m_size
Definition: visualize.h:293
MelScale::m_scale
int m_scale
Definition: visualize.h:219
piano_audio
#define piano_audio
Definition: visualize.h:338
visual.h