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