1 /***************************************************************************
2 * Copyright (C) 2010 by Simon Andreas Eugster (simon.eu@gmail.com) *
3 * This file is part of kdenlive. See www.kdenlive.org. *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 ***************************************************************************/
12 Displays a spectral power distribution of audio samples.
13 The frequency distribution is calculated by means of a Fast Fourier Transformation.
14 For more information see Wikipedia:FFT and the code comments.
17 #ifndef AUDIOSPECTRUM_H
18 #define AUDIOSPECTRUM_H
24 #include "abstractaudioscopewidget.h"
25 #include "ui_audiospectrum_ui.h"
26 #include "tools/kiss_fftr.h"
29 class AudioSpectrum_UI;
30 class AudioSpectrum : public AbstractAudioScopeWidget {
34 AudioSpectrum(QWidget *parent = 0);
37 // Implemented virtual methods
38 QString widgetName() const;
40 static const QString directions[]; // Mainly for debug output
41 enum RescaleDirection { North, Northeast, East, Southeast };
42 enum RescaleDimension { Min_dB, Max_dB, Max_Hz };
46 ///// Implemented methods /////
48 QImage renderHUD(uint accelerationFactor);
49 QImage renderAudioScope(uint accelerationFactor, const QVector<int16_t> audioFrame, const int freq, const int num_channels, const int num_samples);
50 QImage renderBackground(uint accelerationFactor);
51 bool isHUDDependingOnInput() const;
52 bool isScopeDependingOnInput() const;
53 bool isBackgroundDependingOnInput() const;
54 virtual void readConfig();
57 void mouseMoveEvent(QMouseEvent *event);
58 void mousePressEvent(QMouseEvent *event);
59 void mouseReleaseEvent(QMouseEvent *event);
62 Ui::AudioSpectrum_UI *ui;
68 /** Contains the plot only; m_scopeRect contains text and widgets as well */
69 QRect m_innerScopeRect;
71 /** Lower bound for the dB value to display */
73 /** Upper bound (max: 0) */
76 /** Maximum frequency (limited by the sampling rate if determined automatically).
77 Stored for the painters. */
79 /** The user has chosen a custom frequency. */
83 /** Returns a signature for a kiss_fft configuration
84 used as a hash in the cache */
85 static const QString cfgSignature(const int size);
88 ///// Movement detection /////
89 const int m_rescaleMinDist;
90 const float m_rescaleVerticalThreshold;
93 bool m_rescalePropertiesLocked;
94 bool m_rescaleFirstRescaleDone;
96 Qt::KeyboardModifiers m_rescaleModifiers;
97 AudioSpectrum::RescaleDirection m_rescaleClockDirection;
98 QPoint m_rescaleStartPoint;
103 void slotResetMaxFreq();
107 #endif // AUDIOSPECTRUM_H