LMMS
Loading...
Searching...
No Matches
Xpressive.h
Go to the documentation of this file.
1/*
2 * Xpressive.h - Instrument which uses a mathematical formula parser
3 *
4 * Copyright (c) 2016-2017 Orr Dvori
5 *
6 * This file is part of LMMS - https://lmms.io
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program (see COPYING); if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301 USA.
22 *
23 */
24
25
26#ifndef XPRESSIVE_H
27#define XPRESSIVE_H
28
29
30#include <QTextEdit>
31
32#include "AutomatableModel.h"
33#include "Graph.h"
34#include "Instrument.h"
35#include "InstrumentView.h"
36
37#include "ExprSynth.h"
38
39class QPlainTextEdit;
40
41namespace lmms
42{
43
44
45const int W1_EXPR = 0;
46const int W2_EXPR = 1;
47const int W3_EXPR = 2;
48const int O1_EXPR = 3;
49const int O2_EXPR = 4;
50const int NUM_EXPRS = 5;
51
52
53namespace gui
54{
55class AutomatableButtonGroup;
56class Knob;
57class LedCheckBox;
58class PixmapButton;
59}
60
61
62class Xpressive : public Instrument
63{
64 Q_OBJECT
65public:
66 Xpressive(InstrumentTrack* instrument_track );
67
68 void playNote(NotePlayHandle* nph,
69 SampleFrame* working_buffer ) override;
70 void deleteNotePluginData( NotePlayHandle* nph ) override;
71
72
73 void saveSettings( QDomDocument& _doc,
74 QDomElement& _this ) override;
75 void loadSettings( const QDomElement& _this ) override;
76
77 QString nodeName() const override;
78
79 gui::PluginView* instantiateView( QWidget * parent ) override;
80
90 QByteArray& wavesExpression(int i) { return m_wavesExpression[i]; }
91 QByteArray& outputExpression(int i) { return m_outputExpression[i]; }
92
105 WaveSample& W1() { return m_W1; }
106 WaveSample& W2() { return m_W2; }
107 WaveSample& W3() { return m_W3; }
109 static void smooth(float smoothness,const graphModel* in,graphModel* out);
110protected:
111
112protected slots:
113
114
115private:
125 QByteArray m_wavesExpression[3];
126 QByteArray m_outputExpression[2];
141
143
144} ;
145
146namespace gui
147{
148
149
210
211class XpressiveHelpView: public QTextEdit
212{
213 Q_OBJECT
214public:
216 {
217 static XpressiveHelpView* instance = new XpressiveHelpView;
218 return instance;
219 }
220 static void finalize()
221 {
222 }
223
224private:
226 static QString s_helpText;
227};
228
229
230} // namespace gui
231
232} // namespace lmms
233
234#endif
Definition AutomatableModel.h:497
Definition AutomatableModel.h:463
Definition Instrument.h:52
Instrument(InstrumentTrack *_instrument_track, const Descriptor *_descriptor, const Descriptor::SubPluginFeatures::Key *key=nullptr, Flags flags=Flag::NoFlags)
Definition Instrument.cpp:38
Definition InstrumentTrack.h:62
Definition AutomatableModel.h:481
Definition NotePlayHandle.h:48
Definition SampleFrame.h:41
Definition ExprSynth.h:66
graphModel & rawgraphW1()
Definition Xpressive.h:86
FloatModel m_relTransition
Definition Xpressive.h:138
float m_A2
Definition Xpressive.h:139
void saveSettings(QDomDocument &_doc, QDomElement &_this) override
Definition Xpressive.cpp:112
graphModel & graphO1()
Definition Xpressive.h:81
FloatModel m_parameterA1
Definition Xpressive.h:127
FloatModel m_panning1
Definition Xpressive.h:136
BoolModel & exprValid()
Definition Xpressive.h:108
QByteArray m_outputExpression[2]
Definition Xpressive.h:126
graphModel m_graphW2
Definition Xpressive.h:119
FloatModel m_smoothW1
Definition Xpressive.h:130
WaveSample m_W3
Definition Xpressive.h:140
WaveSample & W2()
Definition Xpressive.h:106
graphModel & rawgraphW3()
Definition Xpressive.h:88
FloatModel m_parameterA3
Definition Xpressive.h:129
graphModel m_graphW3
Definition Xpressive.h:120
IntModel m_selectedGraph
Definition Xpressive.h:124
BoolModel & interpolateW2()
Definition Xpressive.h:100
QString nodeName() const override
Definition Xpressive.cpp:193
graphModel m_graphO1
Definition Xpressive.h:116
void playNote(NotePlayHandle *nph, SampleFrame *working_buffer) override
Definition Xpressive.cpp:197
FloatModel & parameterA3()
Definition Xpressive.h:95
FloatModel m_parameterA2
Definition Xpressive.h:128
float m_A3
Definition Xpressive.h:139
graphModel m_rawgraphW3
Definition Xpressive.h:123
FloatModel & parameterA1()
Definition Xpressive.h:93
FloatModel & panning2()
Definition Xpressive.h:103
QByteArray & outputExpression(int i)
Definition Xpressive.h:91
graphModel & graphW2()
Definition Xpressive.h:84
float m_A1
Definition Xpressive.h:139
IntModel & selectedGraph()
Definition Xpressive.h:89
BoolModel m_exprValid
Definition Xpressive.h:142
WaveSample m_W2
Definition Xpressive.h:140
Xpressive(InstrumentTrack *instrument_track)
Definition Xpressive.cpp:80
FloatModel & smoothW3()
Definition Xpressive.h:98
graphModel & graphW1()
Definition Xpressive.h:83
WaveSample & W3()
Definition Xpressive.h:107
BoolModel m_interpolateW3
Definition Xpressive.h:135
WaveSample & W1()
Definition Xpressive.h:105
QByteArray & wavesExpression(int i)
Definition Xpressive.h:90
void loadSettings(const QDomElement &_this) override
Definition Xpressive.cpp:148
FloatModel & parameterA2()
Definition Xpressive.h:94
WaveSample m_W1
Definition Xpressive.h:140
BoolModel m_interpolateW1
Definition Xpressive.h:133
FloatModel & smoothW1()
Definition Xpressive.h:96
graphModel m_graphO2
Definition Xpressive.h:117
gui::PluginView * instantiateView(QWidget *parent) override
Create a view for the model.
Definition Xpressive.cpp:240
graphModel & graphO2()
Definition Xpressive.h:82
graphModel & graphW3()
Definition Xpressive.h:85
FloatModel m_panning2
Definition Xpressive.h:137
graphModel m_rawgraphW1
Definition Xpressive.h:121
void deleteNotePluginData(NotePlayHandle *nph) override
Definition Xpressive.cpp:236
BoolModel & interpolateW3()
Definition Xpressive.h:101
FloatModel & panning1()
Definition Xpressive.h:102
static void smooth(float smoothness, const graphModel *in, graphModel *out)
Definition Xpressive.cpp:245
BoolModel & interpolateW1()
Definition Xpressive.h:99
graphModel m_graphW1
Definition Xpressive.h:118
FloatModel & smoothW2()
Definition Xpressive.h:97
QByteArray m_wavesExpression[3]
Definition Xpressive.h:125
FloatModel m_smoothW3
Definition Xpressive.h:132
FloatModel & relTransition()
Definition Xpressive.h:104
graphModel m_rawgraphW2
Definition Xpressive.h:122
BoolModel m_interpolateW2
Definition Xpressive.h:134
graphModel & rawgraphW2()
Definition Xpressive.h:87
FloatModel m_smoothW2
Definition Xpressive.h:131
2 dimensional function plot
Definition Graph.h:134
Definition AutomatableButton.h:84
Definition Graph.h:48
Instrument view with fixed LMMS-default size.
Definition InstrumentView.h:66
Definition Knob.h:47
Definition LedCheckBox.h:37
Definition PixmapButton.h:37
Definition PluginView.h:36
static QString s_helpText
Definition Xpressive.h:226
static XpressiveHelpView * getInstance()
Definition Xpressive.h:215
static void finalize()
Definition Xpressive.h:220
XpressiveHelpView()
Definition Xpressive.cpp:862
PixmapButton * m_sinWaveBtn
Definition Xpressive.h:192
void expWaveClicked()
Definition Xpressive.cpp:794
PixmapButton * m_usrWaveBtn
Definition Xpressive.h:197
void expressionChanged()
Definition Xpressive.cpp:525
void graphDrawn()
Definition Xpressive.cpp:651
void modelChanged() override
Definition Xpressive.cpp:669
void helpClicked()
Definition Xpressive.cpp:877
QPlainTextEdit * m_expressionEditor
Definition Xpressive.h:183
bool m_output_expr
Definition Xpressive.h:207
PixmapButton * m_o1Btn
Definition Xpressive.h:189
PixmapButton * m_w1Btn
Definition Xpressive.h:186
void sawWaveClicked()
Definition Xpressive.cpp:765
void sqrWaveClicked()
Definition Xpressive.cpp:773
PixmapButton * m_triangleWaveBtn
Definition Xpressive.h:193
Graph * m_graph
Definition Xpressive.h:203
XpressiveView(Instrument *_instrument, QWidget *_parent)
Definition Xpressive.cpp:301
Knob * m_smoothKnob
Definition Xpressive.h:182
void usrWaveClicked()
Definition Xpressive.cpp:803
Knob * m_relKnob
Definition Xpressive.h:181
void noiseWaveClicked()
Definition Xpressive.cpp:781
void sinWaveClicked()
Definition Xpressive.cpp:749
PixmapButton * m_w3Btn
Definition Xpressive.h:188
PixmapButton * m_sqrWaveBtn
Definition Xpressive.h:194
void moogSawWaveClicked()
Definition Xpressive.cpp:786
Knob * m_generalPurposeKnob[3]
Definition Xpressive.h:179
AutomatableButtonGroup * m_selectedGraphGroup
Definition Xpressive.h:185
graphModel * m_raw_graph
Definition Xpressive.h:204
PixmapButton * m_expWaveBtn
Definition Xpressive.h:199
void updateLayout()
Definition Xpressive.cpp:685
void smoothChanged()
Definition Xpressive.cpp:619
void triangleWaveClicked()
Definition Xpressive.cpp:757
PixmapButton * m_w2Btn
Definition Xpressive.h:187
PixmapButton * m_o2Btn
Definition Xpressive.h:190
static QPixmap * s_artwork
Definition Xpressive.h:201
bool m_wave_expr
Definition Xpressive.h:208
LedCheckBox * m_waveInterpolate
Definition Xpressive.h:206
PixmapButton * m_moogWaveBtn
Definition Xpressive.h:198
PixmapButton * m_whiteNoiseWaveBtn
Definition Xpressive.h:196
LedCheckBox * m_expressionValidToggle
Definition Xpressive.h:205
Knob * m_panningKnob[2]
Definition Xpressive.h:180
PixmapButton * m_sawWaveBtn
Definition Xpressive.h:195
PixmapButton * m_helpBtn
Definition Xpressive.h:191
register unsigned i
Definition inflate.c:1575
static uintptr_t parent
Definition pugl.h:1644
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
const int O2_EXPR
Definition Xpressive.h:49
const int NUM_EXPRS
Definition Xpressive.h:50
const int W2_EXPR
Definition Xpressive.h:46
const int W1_EXPR
Definition Xpressive.h:45
const int W3_EXPR
Definition Xpressive.h:47
const int O1_EXPR
Definition Xpressive.h:48