LMMS
Loading...
Searching...
No Matches
Monstro.h
Go to the documentation of this file.
1/*
2 * Monstro.h - a semi-modular 3-osc synth with modulation matrix
3 *
4 * Copyright (c) 2014 Vesa Kivimäki <contact/dot/diizy/at/nbl/dot/fi>
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 MONSTRO_H
27#define MONSTRO_H
28
29#include <vector>
30
31#include "ComboBoxModel.h"
32#include "Instrument.h"
33#include "InstrumentView.h"
34#include "AutomatableModel.h"
35#include "TempoSyncKnob.h"
36#include "PixmapButton.h"
37#include "Oscillator.h"
38#include "lmms_math.h"
39#include "BandLimitedWave.h"
40
41namespace lmms
42{
43
44
45namespace gui
46{
47
48
49// UI constants
50const int O1ROW = 22;
51const int O2ROW = 22 + 39;
52const int O3ROW = 22 + 39 * 2;
53const int LFOROW = 22 + 39 * 3;
54const int E1ROW = 22 + 39 * 4;
55const int E2ROW = 22 + 39 * 5;
56
57const int KNOBCOL1 = 16;
58const int KNOBCOL2 = 16 + 30;
59const int KNOBCOL3 = 16 + 30 * 2;
60const int KNOBCOL4 = 16 + 30 * 3;
61const int KNOBCOL5 = 16 + 30 * 4;
62const int KNOBCOL6 = 16 + 30 * 5;
63const int KNOBCOL7 = 16 + 30 * 6;
64
65const int LFOCOL1 = KNOBCOL2;
66const int LFOCOL2 = KNOBCOL2 + 26;
67const int LFOCOL3 = KNOBCOL2 + 26*2;
68const int LFOCOL4 = 171;
69const int LFOCOL5 = 171 + 26;
70const int LFOCOL6 = 171 + 26*2;
71
72const int MATCOL1 = 32;
73const int MATCOL2 = 32 + 25;
74const int MATCOL3 = 32 + 25*2;
75const int MATCOL4 = 32 + 25*3;
76const int MATCOL5 = 149;
77const int MATCOL6 = 149 + 25;
78const int MATCOL7 = 149 + 25*2;
79const int MATCOL8 = 149 + 25*3;
80
81const int MATROW1 = 22;
82const int MATROW2 = 22 + 39;
83const int MATROW3 = 22 + 39*2;
84const int MATROW4 = 22 + 39*3;
85const int MATROW5 = 22 + 39*4;
86const int MATROW6 = 22 + 39*5;
87
88const int OPVIEW = 0;
89const int MATVIEW = 1;
90
91
92} // namespace gui
93
94// waveform enumerators
95const int WAVE_SINE = 0;
96const int WAVE_TRI = 1;
97const int WAVE_SAW = 2;
98const int WAVE_RAMP = 3;
99const int WAVE_SQR = 4;
100const int WAVE_MOOG = 5;
101
102const int WAVE_SQRSOFT = 6;
103const int WAVE_SINABS = 7;
104const int WAVE_EXP = 8;
105const int WAVE_NOISE = 9;
106
107const int WAVE_TRI_D = 10;
108const int WAVE_SAW_D = 11;
109const int WAVE_RAMP_D = 12;
110const int WAVE_SQR_D = 13;
111const int WAVE_MOOG_D = 14;
112
113const int NUM_WAVES = 15;
114
115// lfo-specific enumerators
116const int WAVE_RANDOM = 9;
117const int WAVE_RANDOM_SMOOTH = 10;
118const int NUM_LFO_WAVES = 11;
119
120// modulation enumerators
121const int MOD_MIX = 0;
122const int MOD_AM = 1;
123const int MOD_FM = 2;
124const int MOD_PM = 3;
125const int NUM_MODS = 4;
126
127const float MODCLIP = 2.0;
128
129const float MIN_FREQ = 18.0f;
130const float MAX_FREQ = 48000.0f;
131
132const float INTEGRATOR = 3.0f / 7.0f;
133
134const float FM_AMOUNT = 0.25f;
135
136const float PW_MIN = 0.25f;
137const float PW_MAX = 100.0f - PW_MIN;
138
140
141namespace gui
142{
143class MonstroView;
144class ComboBox;
145}
146
147
149{
150public:
152 virtual ~MonstroSynth() = default;
153
154 void renderOutput( f_cnt_t _frames, SampleFrame* _buf );
155
156private:
157
160
161 inline void updateModulators(float * env1, float * env2, float * lfo1, float * lfo2, f_cnt_t frames);
162
163 // linear interpolation
164/* inline sample_t interpolate( sample_t s1, sample_t s2, float x )
165 {
166 return s1 + ( s2 - s1 ) * x;
167 }*/ // using interpolation.h from now on
168
169 inline sample_t calcSlope( int slope, sample_t s );
170
171 // checks for lower bound for phase, upper bound is already checked by oscillator-functions in both
172 // oscillator.h and bandlimitedwave.h so we save some cpu by only checking lower bound
173 inline float lowBoundCheck( float ph )
174 {
175 return ph < 0.0f ? ph - ( static_cast<int>( ph ) - 1.0f ) : ph;
176 }
177
178 inline sample_t oscillate( int _wave, const float _ph, float _wavelen )
179 {
180 switch( _wave )
181 {
182 case WAVE_SINE:
183 return Oscillator::sinSample( _ph );
184 break;
185 case WAVE_TRI:
186 //return Oscillator::triangleSample( _ph );
188 break;
189 case WAVE_SAW:
190 //return Oscillator::sawSample( _ph );
192 break;
193 case WAVE_RAMP:
194 //return Oscillator::sawSample( _ph ) * -1.0;
195 return BandLimitedWave::oscillate( _ph, _wavelen, BandLimitedWave::Waveform::BLSaw ) * -1.0;
196 break;
197 case WAVE_SQR:
198 //return Oscillator::squareSample( _ph );
200 break;
201 case WAVE_SQRSOFT:
202 {
203 const float ph = fraction( _ph );
204 if( ph < 0.1 ) return Oscillator::sinSample( ph * 5 + 0.75 );
205 else if( ph < 0.5 ) return 1.0f;
206 else if( ph < 0.6 ) return Oscillator::sinSample( ph * 5 + 0.75 );
207 else return -1.0f;
208 break;
209 }
210 case WAVE_MOOG:
211 //return Oscillator::moogSawSample( _ph );
213 break;
214 case WAVE_SINABS:
215 return qAbs( Oscillator::sinSample( _ph ) );
216 break;
217 case WAVE_EXP:
218 return Oscillator::expSample( _ph );
219 break;
220 case WAVE_NOISE:
221 return Oscillator::noiseSample( _ph );
222 break;
223
224 case WAVE_TRI_D:
225 return Oscillator::triangleSample( _ph );
226 break;
227 case WAVE_SAW_D:
228 return Oscillator::sawSample( _ph );
229 break;
230 case WAVE_RAMP_D:
231 return Oscillator::sawSample( _ph ) * -1.0;
232 break;
233 case WAVE_SQR_D:
234 return Oscillator::squareSample( _ph );
235 break;
236 case WAVE_MOOG_D:
237 return Oscillator::moogSawSample( _ph );
238 break;
239
240 }
241 return 0.0;
242 }
243
244
251
253 float m_lfo_phase [2];
256 float m_lfo_inc [2];
257 float m_lfo_rate [2];
258 float m_env_sus [2];
259
261 int m_lfoatt[2];
262 float m_env_pre[2];
263 float m_env_att[2];
264 float m_env_hold[2];
265 float m_env_dec[2];
266 float m_env_rel[2];
267
270
273
276
279
284
289
290 std::vector<float> m_lfo[2];
291 std::vector<float> m_env[2];
292};
293
295{
296 Q_OBJECT
297
298#define setwavemodel( name ) \
299 name .addItem( tr( "Sine wave" ), std::make_unique<PluginPixmapLoader>( "sin" ) ); \
300 name .addItem( tr( "Bandlimited Triangle wave" ), std::make_unique<PluginPixmapLoader>( "tri" ) ); \
301 name .addItem( tr( "Bandlimited Saw wave" ), std::make_unique<PluginPixmapLoader>( "saw" ) ); \
302 name .addItem( tr( "Bandlimited Ramp wave" ), std::make_unique<PluginPixmapLoader>( "ramp" ) ); \
303 name .addItem( tr( "Bandlimited Square wave" ), std::make_unique<PluginPixmapLoader>( "sqr" ) ); \
304 name .addItem( tr( "Bandlimited Moog saw wave" ), std::make_unique<PluginPixmapLoader>( "moog" ) ); \
305 name .addItem( tr( "Soft square wave" ), std::make_unique<PluginPixmapLoader>( "sqrsoft" ) ); \
306 name .addItem( tr( "Absolute sine wave" ), std::make_unique<PluginPixmapLoader>( "sinabs" ) ); \
307 name .addItem( tr( "Exponential wave" ), std::make_unique<PluginPixmapLoader>( "exp" ) ); \
308 name .addItem( tr( "White noise" ), std::make_unique<PluginPixmapLoader>( "noise" ) ); \
309 name .addItem( tr( "Digital Triangle wave" ), std::make_unique<PluginPixmapLoader>( "tri" ) ); \
310 name .addItem( tr( "Digital Saw wave" ), std::make_unique<PluginPixmapLoader>( "saw" ) ); \
311 name .addItem( tr( "Digital Ramp wave" ), std::make_unique<PluginPixmapLoader>( "ramp" ) ); \
312 name .addItem( tr( "Digital Square wave" ), std::make_unique<PluginPixmapLoader>( "sqr" ) ); \
313 name .addItem( tr( "Digital Moog saw wave" ), std::make_unique<PluginPixmapLoader>( "moog" ) );
314
315
316#define setlfowavemodel( name ) \
317 name .addItem( tr( "Sine wave" ), std::make_unique<PluginPixmapLoader>( "sin" ) ); \
318 name .addItem( tr( "Triangle wave" ), std::make_unique<PluginPixmapLoader>( "tri" ) ); \
319 name .addItem( tr( "Saw wave" ), std::make_unique<PluginPixmapLoader>( "saw" ) ); \
320 name .addItem( tr( "Ramp wave" ), std::make_unique<PluginPixmapLoader>( "ramp" ) ); \
321 name .addItem( tr( "Square wave" ), std::make_unique<PluginPixmapLoader>( "sqr" ) ); \
322 name .addItem( tr( "Moog saw wave" ), std::make_unique<PluginPixmapLoader>( "moog" ) ); \
323 name .addItem( tr( "Soft square wave" ), std::make_unique<PluginPixmapLoader>( "sqrsoft" ) ); \
324 name .addItem( tr( "Abs. sine wave" ), std::make_unique<PluginPixmapLoader>( "sinabs" ) ); \
325 name .addItem( tr( "Exponential wave" ), std::make_unique<PluginPixmapLoader>( "exp" ) ); \
326 name .addItem( tr( "Random" ), std::make_unique<PluginPixmapLoader>( "rand" ) ); \
327 name .addItem( tr( "Random smooth" ), std::make_unique<PluginPixmapLoader>( "rand" ) );
328
329public:
330 MonstroInstrument( InstrumentTrack * _instrument_track );
331 ~MonstroInstrument() override = default;
332
333 void playNote( NotePlayHandle * _n,
334 SampleFrame* _working_buffer ) override;
335 void deleteNotePluginData( NotePlayHandle * _n ) override;
336
337 void saveSettings( QDomDocument & _doc,
338 QDomElement & _this ) override;
339 void loadSettings( const QDomElement & _this ) override;
340
341 QString nodeName() const override;
342
343 float desiredReleaseTimeMs() const override;
344
345 gui::PluginView* instantiateView( QWidget * _parent ) override;
346
347public slots:
348 void updateVolume1();
349 void updateVolume2();
350 void updateVolume3();
351 void updateFreq1();
352 void updateFreq2();
353 void updateFreq3();
354 void updatePO1();
355 void updatePO2();
356 void updatePO3();
357 void updateEnvelope1();
358 void updateEnvelope2();
359 void updateLFOAtts();
360 void updateSamplerate();
361 void updateSlope1();
362 void updateSlope2();
363
364protected:
371
377
384
390
396
399
402
403 float m_slope [2];
404
407
410
414
415private:
416 inline float leftCh( float _vol, float _pan )
417 {
418 return ( _pan <= 0 ? 1.0 : 1.0 - ( _pan / 100.0 ) ) * _vol / 100.0;
419 }
420
421 inline float rightCh( float _vol, float _pan )
422 {
423 return ( _pan >= 0 ? 1.0 : 1.0 + ( _pan / 100.0 ) ) * _vol / 100.0;
424 }
425
427// models of //
428// operator view knobs //
429// //
431
441
451
461
466
471
479
487
489
491
493// models of //
494// modulation matrix view knobs //
495// //
497
502
507
512
517
522
527
532
537
542
547
552
553 friend class MonstroSynth;
554 friend class gui::MonstroView;
555
556};
557
558
559namespace gui
560{
561
562
564{
565 Q_OBJECT
566public:
567 MonstroView( Instrument * _instrument,
568 QWidget * _parent );
569 ~MonstroView() override = default;
570
571protected slots:
572 void updateLayout();
573
574private:
575 void modelChanged() override;
576
577 void setWidgetBackground( QWidget * _widget, const QString & _pic );
578 QWidget * setupOperatorsView( QWidget * _parent );
579 QWidget * setupMatrixView( QWidget * _parent );
580
581 template<class T = Knob>
582 auto makeKnob(QWidget* view, int x, int y, const QString& hint,
583 const QString& unit, const QString& objName) -> T*
584 {
585 T* knob = new T(KnobType::Styled, view);
586 knob->move(x, y);
587 knob->setHintText(hint, unit);
588 knob->setObjectName(objName);
589 knob->setFixedSize(20, 20);
590 return knob;
591 }
592
594// //
595// operator view knobs //
596// //
598
608
618
628
633
638
646
654
656
658
660 QWidget * m_matrixView;
661
663// //
664// matrix view knobs //
665// //
667
672
677
682
687
692
697
702
707
712
717
722
723};
724
725
726} // namespace gui
727
728} // namespace lmms
729
730#endif
static sample_t oscillate(float _ph, float _wavelen, Waveform _wave)
This method provides interpolated samples of bandlimited waveforms.
Definition BandLimitedWave.h:131
@ BLSquare
Definition BandLimitedWave.h:95
@ BLTriangle
Definition BandLimitedWave.h:96
@ BLSaw
Definition BandLimitedWave.h:94
@ BLMoog
Definition BandLimitedWave.h:97
Definition AutomatableModel.h:497
Definition ComboBoxModel.h:39
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 AutomatableModel.h:481
Definition Monstro.h:295
float m_osc2l_vol
Definition Monstro.h:367
f_cnt_t m_lfo1_att
Definition Monstro.h:405
FloatModel m_osc2Crs
Definition Monstro.h:444
TempoSyncKnobModel m_env2Pre
Definition Monstro.h:480
IntModel m_o23Mod
Definition Monstro.h:488
BoolModel m_osc3SyncR
Definition Monstro.h:460
float m_env1_pre
Definition Monstro.h:385
float m_osc1l_vol
Definition Monstro.h:365
FloatModel m_pit2env1
Definition Monstro.h:533
TempoSyncKnobModel m_env1Pre
Definition Monstro.h:472
BoolModel m_osc2SyncR
Definition Monstro.h:450
void deleteNotePluginData(NotePlayHandle *_n) override
Definition Monstro.cpp:1079
TempoSyncKnobModel m_env1Dec
Definition Monstro.h:475
FloatModel m_vol2lfo2
Definition Monstro.h:506
FloatModel m_osc3Vol
Definition Monstro.h:452
FloatModel m_osc1Crs
Definition Monstro.h:434
void updatePO3()
Definition Monstro.cpp:1397
float desiredReleaseTimeMs() const override
Definition Monstro.cpp:1326
FloatModel m_osc3Sub
Definition Monstro.h:456
FloatModel m_sub3lfo2
Definition Monstro.h:551
FloatModel m_vol1lfo1
Definition Monstro.h:500
float m_osc1l_freq
Definition Monstro.h:372
FloatModel m_vol1env2
Definition Monstro.h:499
float m_env2_rel
Definition Monstro.h:395
FloatModel m_env1Slope
Definition Monstro.h:478
void saveSettings(QDomDocument &_doc, QDomElement &_this) override
Definition Monstro.cpp:1085
BoolModel m_osc2SyncH
Definition Monstro.h:449
FloatModel m_phs1env1
Definition Monstro.h:513
BoolModel m_osc1SSR
Definition Monstro.h:439
float m_osc1l_po
Definition Monstro.h:378
f_cnt_t m_fpp
Definition Monstro.h:409
void loadSettings(const QDomElement &_this) override
Definition Monstro.cpp:1203
TempoSyncKnobModel m_env2Dec
Definition Monstro.h:483
f_cnt_t m_env1_relF
Definition Monstro.h:400
FloatModel m_osc3Spo
Definition Monstro.h:455
FloatModel m_pw1lfo2
Definition Monstro.h:546
void updatePO2()
Definition Monstro.cpp:1390
f_cnt_t m_env1_len
Definition Monstro.h:397
FloatModel m_sub3env2
Definition Monstro.h:549
FloatModel m_osc1Vol
Definition Monstro.h:432
FloatModel m_osc2Pan
Definition Monstro.h:443
TempoSyncKnobModel m_lfo1Att
Definition Monstro.h:463
void updateFreq2()
Definition Monstro.cpp:1368
FloatModel m_vol3env2
Definition Monstro.h:509
ComboBoxModel m_osc2Wave
Definition Monstro.h:448
void updateVolume2()
Definition Monstro.cpp:1345
FloatModel m_phs3lfo1
Definition Monstro.h:525
FloatModel m_osc2Ftr
Definition Monstro.h:446
FloatModel m_vol3env1
Definition Monstro.h:508
FloatModel m_pit3env2
Definition Monstro.h:539
FloatModel m_osc2Spo
Definition Monstro.h:447
void updateEnvelope2()
Definition Monstro.cpp:1420
FloatModel m_osc1Ftl
Definition Monstro.h:435
void updateVolume3()
Definition Monstro.cpp:1352
float m_env2_pre
Definition Monstro.h:391
FloatModel m_pit3env1
Definition Monstro.h:538
~MonstroInstrument() override=default
FloatModel m_lfo2Phs
Definition Monstro.h:470
FloatModel m_sub3lfo1
Definition Monstro.h:550
FloatModel m_osc1Pw
Definition Monstro.h:438
void playNote(NotePlayHandle *_n, SampleFrame *_working_buffer) override
Definition Monstro.cpp:1061
FloatModel m_env1Sus
Definition Monstro.h:476
FloatModel m_phs1lfo1
Definition Monstro.h:515
float m_osc1r_po
Definition Monstro.h:379
float m_osc3_freq
Definition Monstro.h:376
void updateFreq1()
Definition Monstro.cpp:1359
FloatModel m_phs2env2
Definition Monstro.h:519
FloatModel m_vol1env1
Definition Monstro.h:498
FloatModel m_pit1lfo2
Definition Monstro.h:531
FloatModel m_phs2lfo2
Definition Monstro.h:521
FloatModel m_pw1env2
Definition Monstro.h:544
TempoSyncKnobModel m_env1Hold
Definition Monstro.h:474
FloatModel m_env2Slope
Definition Monstro.h:486
float m_env1_hold
Definition Monstro.h:387
f_cnt_t m_env2_len
Definition Monstro.h:398
FloatModel m_pit3lfo1
Definition Monstro.h:540
void updateSlope1()
Definition Monstro.cpp:1459
FloatModel m_osc2Ftl
Definition Monstro.h:445
float m_osc2l_po
Definition Monstro.h:380
void updatePO1()
Definition Monstro.cpp:1383
TempoSyncKnobModel m_env2Rel
Definition Monstro.h:485
float leftCh(float _vol, float _pan)
Definition Monstro.h:416
float m_fmCorrection
Definition Monstro.h:412
int m_counterMax
Definition Monstro.h:413
float m_osc3l_vol
Definition Monstro.h:369
float m_osc2r_po
Definition Monstro.h:381
TempoSyncKnobModel m_lfo2Att
Definition Monstro.h:468
void updateEnvelope1()
Definition Monstro.cpp:1404
FloatModel m_phs2env1
Definition Monstro.h:518
void updateVolume1()
Definition Monstro.cpp:1338
FloatModel m_pit2lfo1
Definition Monstro.h:535
float m_osc1r_freq
Definition Monstro.h:373
ComboBoxModel m_osc3Wave1
Definition Monstro.h:457
float m_osc3l_po
Definition Monstro.h:382
float m_env1_att
Definition Monstro.h:386
float m_env2_dec
Definition Monstro.h:394
float m_osc3r_po
Definition Monstro.h:383
FloatModel m_phs3lfo2
Definition Monstro.h:526
FloatModel m_pit1lfo1
Definition Monstro.h:530
float m_env2_att
Definition Monstro.h:392
float m_integrator
Definition Monstro.h:411
FloatModel m_phs1env2
Definition Monstro.h:514
IntModel m_selectedView
Definition Monstro.h:490
TempoSyncKnobModel m_lfo2Rate
Definition Monstro.h:469
QString nodeName() const override
Definition Monstro.cpp:1321
TempoSyncKnobModel m_env2Hold
Definition Monstro.h:482
FloatModel m_pit2env2
Definition Monstro.h:534
ComboBoxModel m_lfo2Wave
Definition Monstro.h:467
float m_osc2r_vol
Definition Monstro.h:368
FloatModel m_osc3Pan
Definition Monstro.h:453
sample_rate_t m_samplerate
Definition Monstro.h:408
float m_slope[2]
Definition Monstro.h:403
float m_env1_dec
Definition Monstro.h:388
FloatModel m_osc2Vol
Definition Monstro.h:442
FloatModel m_osc1Pan
Definition Monstro.h:433
FloatModel m_phs3env2
Definition Monstro.h:524
FloatModel m_pw1env1
Definition Monstro.h:543
FloatModel m_vol3lfo1
Definition Monstro.h:510
FloatModel m_osc3Crs
Definition Monstro.h:454
FloatModel m_vol1lfo2
Definition Monstro.h:501
FloatModel m_pit2lfo2
Definition Monstro.h:536
TempoSyncKnobModel m_lfo1Rate
Definition Monstro.h:464
float m_osc2l_freq
Definition Monstro.h:374
float m_env2_hold
Definition Monstro.h:393
FloatModel m_vol3lfo2
Definition Monstro.h:511
void updateSamplerate()
Definition Monstro.cpp:1445
f_cnt_t m_env2_relF
Definition Monstro.h:401
BoolModel m_osc1SSF
Definition Monstro.h:440
FloatModel m_phs3env1
Definition Monstro.h:523
float m_osc3r_vol
Definition Monstro.h:370
gui::PluginView * instantiateView(QWidget *_parent) override
Create a view for the model.
Definition Monstro.cpp:1332
friend class MonstroSynth
Definition Monstro.h:553
FloatModel m_pit3lfo2
Definition Monstro.h:541
float rightCh(float _vol, float _pan)
Definition Monstro.h:421
FloatModel m_pit1env1
Definition Monstro.h:528
FloatModel m_lfo1Phs
Definition Monstro.h:465
void updateFreq3()
Definition Monstro.cpp:1377
FloatModel m_sub3env1
Definition Monstro.h:548
FloatModel m_pit1env2
Definition Monstro.h:529
ComboBoxModel m_lfo1Wave
Definition Monstro.h:462
FloatModel m_env2Sus
Definition Monstro.h:484
MonstroInstrument(InstrumentTrack *_instrument_track)
Definition Monstro.cpp:862
FloatModel m_pw1lfo1
Definition Monstro.h:545
FloatModel m_vol2env1
Definition Monstro.h:503
FloatModel m_osc1Ftr
Definition Monstro.h:436
FloatModel m_phs1lfo2
Definition Monstro.h:516
FloatModel m_osc1Spo
Definition Monstro.h:437
FloatModel m_vol2lfo1
Definition Monstro.h:505
float m_osc1r_vol
Definition Monstro.h:366
void updateSlope2()
Definition Monstro.cpp:1466
f_cnt_t m_lfo2_att
Definition Monstro.h:406
BoolModel m_osc3SyncH
Definition Monstro.h:459
float m_env1_rel
Definition Monstro.h:389
float m_osc2r_freq
Definition Monstro.h:375
TempoSyncKnobModel m_env1Rel
Definition Monstro.h:477
ComboBoxModel m_osc3Wave2
Definition Monstro.h:458
TempoSyncKnobModel m_env2Att
Definition Monstro.h:481
FloatModel m_vol2env2
Definition Monstro.h:504
FloatModel m_phs2lfo1
Definition Monstro.h:520
void updateLFOAtts()
Definition Monstro.cpp:1438
TempoSyncKnobModel m_env1Att
Definition Monstro.h:473
sample_t m_osc1r_last
Definition Monstro.h:269
int m_counter3l
Definition Monstro.h:287
sample_t oscillate(int _wave, const float _ph, float _wavelen)
Definition Monstro.h:178
float m_osc2l_phase
Definition Monstro.h:247
int m_counter2l
Definition Monstro.h:285
float m_env_att[2]
Definition Monstro.h:263
bool m_invert2l
Definition Monstro.h:280
void updateModulators(float *env1, float *env2, float *lfo1, float *lfo2, f_cnt_t frames)
Definition Monstro.cpp:685
int m_lfoatt[2]
Definition Monstro.h:261
int m_counter3r
Definition Monstro.h:288
float m_ph2l_last
Definition Monstro.h:274
float m_env_pre[2]
Definition Monstro.h:262
std::vector< float > m_lfo[2]
Definition Monstro.h:290
sample_t m_lfo_next[2]
Definition Monstro.h:255
sample_t m_env_phase[2]
Definition Monstro.h:252
float lowBoundCheck(float ph)
Definition Monstro.h:173
NotePlayHandle * m_nph
Definition Monstro.h:159
MonstroInstrument * m_parent
Definition Monstro.h:158
float m_osc1l_phase
Definition Monstro.h:245
virtual ~MonstroSynth()=default
sample_t m_r_last
Definition Monstro.h:272
float m_osc3l_phase
Definition Monstro.h:249
float m_osc3r_phase
Definition Monstro.h:250
bool m_invert3r
Definition Monstro.h:283
float m_env_hold[2]
Definition Monstro.h:264
sample_t m_osc1l_last
Definition Monstro.h:268
float m_osc1r_phase
Definition Monstro.h:246
sample_t m_l_last
Definition Monstro.h:271
float m_env_sus[2]
Definition Monstro.h:258
int m_lfovalue[2]
Definition Monstro.h:260
float m_osc2r_phase
Definition Monstro.h:248
bool m_invert3l
Definition Monstro.h:281
void renderOutput(f_cnt_t _frames, SampleFrame *_buf)
Definition Monstro.cpp:110
float m_ph2r_last
Definition Monstro.h:275
std::vector< float > m_env[2]
Definition Monstro.h:291
float m_ph3r_last
Definition Monstro.h:278
float m_env_dec[2]
Definition Monstro.h:265
int m_counter2r
Definition Monstro.h:286
float m_lfo_rate[2]
Definition Monstro.h:257
float m_lfo_inc[2]
Definition Monstro.h:256
float m_lfo_phase[2]
Definition Monstro.h:253
bool m_invert2r
Definition Monstro.h:282
float m_env_rel[2]
Definition Monstro.h:266
float m_ph3l_last
Definition Monstro.h:277
sample_t m_lfo_last[2]
Definition Monstro.h:254
MonstroSynth(MonstroInstrument *_i, NotePlayHandle *_nph)
Definition Monstro.cpp:63
sample_t calcSlope(int slope, sample_t s)
Definition Monstro.cpp:854
Definition NotePlayHandle.h:48
static sample_t squareSample(const float _sample)
Definition Oscillator.h:138
static sample_t expSample(const float _sample)
Definition Oscillator.h:153
static sample_t sawSample(const float _sample)
Definition Oscillator.h:133
static sample_t noiseSample(const float)
Definition Oscillator.h:163
static sample_t triangleSample(const float _sample)
Definition Oscillator.h:119
static sample_t sinSample(const float _sample)
Definition Oscillator.h:114
static sample_t moogSawSample(const float _sample)
Definition Oscillator.h:143
Definition SampleFrame.h:41
Definition TempoSyncKnobModel.h:45
Definition AutomatableButton.h:84
Definition ComboBox.h:38
Instrument view with fixed LMMS-default size.
Definition InstrumentView.h:66
Definition Knob.h:47
Definition Monstro.h:564
void setWidgetBackground(QWidget *_widget, const QString &_pic)
Definition Monstro.cpp:1651
Knob * m_phs3env2Knob
Definition Monstro.h:694
TempoSyncKnob * m_env1DecKnob
Definition Monstro.h:642
TempoSyncKnob * m_env1AttKnob
Definition Monstro.h:640
void updateLayout()
Definition Monstro.cpp:1514
void modelChanged() override
Definition Monstro.cpp:1530
TempoSyncKnob * m_lfo1AttKnob
Definition Monstro.h:630
Knob * m_phs2lfo2Knob
Definition Monstro.h:691
Knob * m_phs3lfo2Knob
Definition Monstro.h:696
Knob * m_pit2env1Knob
Definition Monstro.h:703
Knob * m_pit1lfo1Knob
Definition Monstro.h:700
Knob * m_osc2SpoKnob
Definition Monstro.h:614
Knob * m_osc2PanKnob
Definition Monstro.h:610
Knob * m_osc1CrsKnob
Definition Monstro.h:601
Knob * m_osc1SpoKnob
Definition Monstro.h:604
TempoSyncKnob * m_env2AttKnob
Definition Monstro.h:648
Knob * m_vol2env1Knob
Definition Monstro.h:673
Knob * m_phs3env1Knob
Definition Monstro.h:693
MonstroView(Instrument *_instrument, QWidget *_parent)
Definition Monstro.cpp:1477
Knob * m_phs2lfo1Knob
Definition Monstro.h:690
Knob * m_pit3lfo1Knob
Definition Monstro.h:710
Knob * m_vol1lfo2Knob
Definition Monstro.h:671
Knob * m_phs2env1Knob
Definition Monstro.h:688
Knob * m_phs1lfo2Knob
Definition Monstro.h:686
Knob * m_vol1env1Knob
Definition Monstro.h:668
PixmapButton * m_osc2SyncRButton
Definition Monstro.h:617
TempoSyncKnob * m_lfo2AttKnob
Definition Monstro.h:635
Knob * m_osc1FtlKnob
Definition Monstro.h:602
Knob * m_osc2VolKnob
Definition Monstro.h:609
Knob * m_vol1env2Knob
Definition Monstro.h:669
Knob * m_lfo2PhsKnob
Definition Monstro.h:637
Knob * m_osc3VolKnob
Definition Monstro.h:619
PixmapButton * m_osc1SSRButton
Definition Monstro.h:606
Knob * m_osc3PanKnob
Definition Monstro.h:620
Knob * m_vol3env1Knob
Definition Monstro.h:678
Knob * m_pit3env2Knob
Definition Monstro.h:709
TempoSyncKnob * m_env1RelKnob
Definition Monstro.h:644
AutomatableButtonGroup * m_selectedViewGroup
Definition Monstro.h:657
ComboBox * m_osc3Wave1Box
Definition Monstro.h:624
AutomatableButtonGroup * m_o23ModGroup
Definition Monstro.h:655
Knob * m_vol2lfo2Knob
Definition Monstro.h:676
Knob * m_env2SusKnob
Definition Monstro.h:651
Knob * m_osc3SpoKnob
Definition Monstro.h:622
Knob * m_pit2env2Knob
Definition Monstro.h:704
Knob * m_phs1env2Knob
Definition Monstro.h:684
Knob * m_sub3env2Knob
Definition Monstro.h:719
Knob * m_osc1PwKnob
Definition Monstro.h:605
ComboBox * m_osc2WaveBox
Definition Monstro.h:615
Knob * m_osc3CrsKnob
Definition Monstro.h:621
ComboBox * m_lfo1WaveBox
Definition Monstro.h:629
Knob * m_osc1VolKnob
Definition Monstro.h:599
Knob * m_pit3lfo2Knob
Definition Monstro.h:711
Knob * m_pw1lfo1Knob
Definition Monstro.h:715
Knob * m_phs3lfo1Knob
Definition Monstro.h:695
Knob * m_vol3lfo2Knob
Definition Monstro.h:681
Knob * m_sub3lfo2Knob
Definition Monstro.h:721
Knob * m_pw1lfo2Knob
Definition Monstro.h:716
TempoSyncKnob * m_env1HoldKnob
Definition Monstro.h:641
Knob * m_env1SlopeKnob
Definition Monstro.h:645
Knob * m_pw1env2Knob
Definition Monstro.h:714
Knob * m_osc2FtrKnob
Definition Monstro.h:613
Knob * m_lfo1PhsKnob
Definition Monstro.h:632
Knob * m_env1SusKnob
Definition Monstro.h:643
Knob * m_vol2lfo1Knob
Definition Monstro.h:675
Knob * m_pit1env1Knob
Definition Monstro.h:698
Knob * m_vol3lfo1Knob
Definition Monstro.h:680
Knob * m_pw1env1Knob
Definition Monstro.h:713
Knob * m_osc1PanKnob
Definition Monstro.h:600
QWidget * setupMatrixView(QWidget *_parent)
Definition Monstro.cpp:1785
TempoSyncKnob * m_env2RelKnob
Definition Monstro.h:652
PixmapButton * m_osc3SyncHButton
Definition Monstro.h:626
Knob * m_phs1env1Knob
Definition Monstro.h:683
Knob * m_env2SlopeKnob
Definition Monstro.h:653
TempoSyncKnob * m_lfo2RateKnob
Definition Monstro.h:636
Knob * m_osc3SubKnob
Definition Monstro.h:623
PixmapButton * m_osc2SyncHButton
Definition Monstro.h:616
Knob * m_pit2lfo1Knob
Definition Monstro.h:705
Knob * m_phs1lfo1Knob
Definition Monstro.h:685
ComboBox * m_osc3Wave2Box
Definition Monstro.h:625
Knob * m_osc2FtlKnob
Definition Monstro.h:612
TempoSyncKnob * m_env1PreKnob
Definition Monstro.h:639
ComboBox * m_lfo2WaveBox
Definition Monstro.h:634
Knob * m_pit1lfo2Knob
Definition Monstro.h:701
Knob * m_sub3env1Knob
Definition Monstro.h:718
PixmapButton * m_osc3SyncRButton
Definition Monstro.h:627
Knob * m_pit3env1Knob
Definition Monstro.h:708
Knob * m_vol2env2Knob
Definition Monstro.h:674
QWidget * m_matrixView
Definition Monstro.h:660
PixmapButton * m_osc1SSFButton
Definition Monstro.h:607
QWidget * setupOperatorsView(QWidget *_parent)
Definition Monstro.cpp:1661
TempoSyncKnob * m_env2HoldKnob
Definition Monstro.h:649
auto makeKnob(QWidget *view, int x, int y, const QString &hint, const QString &unit, const QString &objName) -> T *
Definition Monstro.h:582
Knob * m_osc2CrsKnob
Definition Monstro.h:611
QWidget * m_operatorsView
Definition Monstro.h:659
Knob * m_pit2lfo2Knob
Definition Monstro.h:706
TempoSyncKnob * m_env2DecKnob
Definition Monstro.h:650
Knob * m_vol1lfo1Knob
Definition Monstro.h:670
TempoSyncKnob * m_env2PreKnob
Definition Monstro.h:647
~MonstroView() override=default
Knob * m_sub3lfo1Knob
Definition Monstro.h:720
Knob * m_vol3env2Knob
Definition Monstro.h:679
Knob * m_pit1env2Knob
Definition Monstro.h:699
Knob * m_phs2env2Knob
Definition Monstro.h:689
Knob * m_osc1FtrKnob
Definition Monstro.h:603
TempoSyncKnob * m_lfo1RateKnob
Definition Monstro.h:631
Definition PixmapButton.h:37
Definition PluginView.h:36
Definition TempoSyncKnob.h:41
int y
Definition inflate.c:1588
unsigned s
Definition inflate.c:1555
unsigned x[BMAX+1]
Definition inflate.c:1586
static PuglViewHint hint
Definition pugl.h:1707
Definition AudioPortAudio.cpp:209
const int MATCOL7
Definition Monstro.h:78
const int E2ROW
Definition Monstro.h:55
const int KNOBCOL1
Definition Monstro.h:57
const int KNOBCOL7
Definition Monstro.h:63
const int MATCOL6
Definition Monstro.h:77
const int MATROW6
Definition Monstro.h:86
const int KNOBCOL5
Definition Monstro.h:61
const int OPVIEW
Definition Monstro.h:88
const int MATROW2
Definition Monstro.h:82
const int MATROW4
Definition Monstro.h:84
const int MATCOL8
Definition Monstro.h:79
const int E1ROW
Definition Monstro.h:54
const int LFOCOL6
Definition Monstro.h:70
const int LFOCOL1
Definition Monstro.h:65
const int O3ROW
Definition Monstro.h:52
const int O1ROW
Definition Monstro.h:50
const int MATROW5
Definition Monstro.h:85
const int LFOCOL2
Definition Monstro.h:66
const int KNOBCOL6
Definition Monstro.h:62
const int MATROW3
Definition Monstro.h:83
const int KNOBCOL4
Definition Monstro.h:60
const int KNOBCOL3
Definition Monstro.h:59
const int LFOROW
Definition Monstro.h:53
const int LFOCOL4
Definition Monstro.h:68
@ Styled
Definition Knob.h:40
const int KNOBCOL2
Definition Monstro.h:58
const int MATVIEW
Definition Monstro.h:89
const int MATCOL5
Definition Monstro.h:76
const int MATROW1
Definition Monstro.h:81
const int MATCOL4
Definition Monstro.h:75
const int MATCOL3
Definition Monstro.h:74
const int O2ROW
Definition Monstro.h:51
const int LFOCOL3
Definition Monstro.h:67
const int MATCOL1
Definition Monstro.h:72
const int LFOCOL5
Definition Monstro.h:69
const int MATCOL2
Definition Monstro.h:73
Definition AudioAlsa.cpp:35
const int MOD_FM
Definition Monstro.h:123
const int MOD_MIX
Definition Monstro.h:121
const int NUM_LFO_WAVES
Definition Monstro.h:118
const int WAVE_RAMP
Definition Monstro.h:98
const int WAVE_SQRSOFT
Definition Monstro.h:102
const int WAVE_SINABS
Definition Monstro.h:103
const float PW_MIN
Definition Monstro.h:136
const int WAVE_SQR_D
Definition Monstro.h:110
const float PW_MAX
Definition Monstro.h:137
std::uint32_t sample_rate_t
Definition LmmsTypes.h:42
float sample_t
Definition LmmsTypes.h:39
const int WAVE_RANDOM
Definition Monstro.h:116
const float MAX_FREQ
Definition Monstro.h:130
const int WAVE_SQR
Definition Monstro.h:99
const int NUM_WAVES
Definition Monstro.h:113
const float FM_AMOUNT
Definition Monstro.h:134
const int NUM_MODS
Definition Monstro.h:125
const int WAVE_EXP
Definition Monstro.h:104
const int WAVE_SAW_D
Definition Monstro.h:108
const float MIN_FREQ
Definition Monstro.h:129
const int WAVE_RAMP_D
Definition Monstro.h:109
const float MODCLIP
Definition Monstro.h:127
std::uint64_t f_cnt_t
Definition LmmsTypes.h:43
const int WAVE_SINE
Definition Monstro.h:95
const float INTEGRATOR
Definition Monstro.h:132
const int MOD_AM
Definition Monstro.h:122
const int WAVE_RANDOM_SMOOTH
Definition Monstro.h:117
const int MOD_PM
Definition Monstro.h:124
auto fraction(std::floating_point auto x) noexcept
Returns the fractional part of a float, a value between -1.0f and 1.0f.
Definition lmms_math.h:63
const int WAVE_TRI
Definition Monstro.h:96
const int WAVE_MOOG
Definition Monstro.h:100
const int WAVE_TRI_D
Definition Monstro.h:107
const int WAVE_MOOG_D
Definition Monstro.h:111
const int WAVE_NOISE
Definition Monstro.h:105
const int WAVE_SAW
Definition Monstro.h:97
png_const_structrp png_const_inforp int * unit
Definition png.h:2161