85 lines
2.7 KiB
C++
85 lines
2.7 KiB
C++
#ifndef SPEC_HARMS_H
|
|
#define SPEC_HARMS_H
|
|
|
|
#include <QList>
|
|
#include <QVariant>
|
|
#include <QJsonArray>
|
|
|
|
#include "gtl_scr_spec_harm.h"
|
|
|
|
#include "script_global.h"
|
|
|
|
namespace gtl
|
|
{
|
|
namespace scr
|
|
{
|
|
class SCRIPT_EXPORT spec_harms : public QObject, public QList<spec_harm*>
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QVariant harms READ get_harms CONSTANT)
|
|
Q_PROPERTY(QVariant modulating READ get_modulating CONSTANT)
|
|
Q_PROPERTY(qreal tolerance READ tolerance WRITE set_tolerance NOTIFY tolerance_changed)
|
|
Q_PROPERTY(QString name READ name WRITE set_name NOTIFY name_changed)
|
|
Q_PROPERTY(bool is_visible READ is_visible WRITE set_visible NOTIFY visible_changed)
|
|
Q_PROPERTY(qreal integral_index READ integral_index NOTIFY integral_index_changed)
|
|
|
|
public:
|
|
spec_harms(QObject *parent);
|
|
spec_harms(QObject *parent, qreal freq, int k, int color, qreal weight);
|
|
~spec_harms();
|
|
QVariant get_harms() const;
|
|
QVariant get_modulating() const;
|
|
|
|
void get_harms(std::back_insert_iterator<std::vector<spec_harm*>> harms);
|
|
|
|
void update();
|
|
|
|
void save_state(QJsonObject &root);
|
|
void restore_state(const QJsonObject &root);
|
|
qreal tolerance() const;
|
|
QString name() const;
|
|
bool is_visible() const;
|
|
|
|
void get_max_ampl(qreal& max_ampl);
|
|
|
|
qreal integral_index() const;
|
|
|
|
private:
|
|
void add_harm(spec_harm* harm);
|
|
int get_cnt_harms(int from, int step);
|
|
|
|
private:
|
|
QList<spec_harms*> _modulating_harms;
|
|
qreal _tolerance;
|
|
QString _name;
|
|
bool _is_visible;
|
|
|
|
public slots:
|
|
void modulate(qreal freq, int k, int color = 0, qreal weight = 1);
|
|
int get_count(uint from = 0, int fails = 1000, int cnt_mod = 0, bool both_sides = false) const;
|
|
void clear();
|
|
void set_tolerance(qreal value);
|
|
void set_name(QString value);
|
|
void set_visible(bool value);
|
|
|
|
|
|
private slots:
|
|
void get_modulating_harms_integral_index(qreal &value);
|
|
|
|
|
|
signals:
|
|
void harms_changed();
|
|
void get_peak_freq(qreal freq, qreal tolerance, qreal &peak_freq);
|
|
void get_harm_amplitude(qreal freq, qreal &value);
|
|
void get_harm_base(qreal freq, qreal &value);
|
|
void tolerance_changed();
|
|
void name_changed();
|
|
void visible_changed();
|
|
void integral_index_changed();
|
|
|
|
void get_max_harm_level(qreal &value) const;
|
|
};
|
|
}
|
|
}
|
|
#endif // SPEC_HARMS_H
|