LMMS
Loading...
Searching...
No Matches
Sfxr.h
Go to the documentation of this file.
1/*
2 * Sfxr.h - declaration of classes of the LMMS sfxr plugin
3 * Originally written by Tomas Pettersson. For the original license,
4 * please read readme.txt in this directory
5 *
6 * Copyright (c) 2014 Wong Cho Ching
7 *
8 * This file is part of LMMS - https://lmms.io
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public
12 * License as published by the Free Software Foundation; either
13 * version 2 of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public
21 * License along with this program (see COPYING); if not, write to the
22 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
23 * Boston, MA 02110-1301 USA.
24 *
25 */
26
27
28#ifndef SFXR_H
29#define SFXR_H
30
31#include <array>
32
33#include "AutomatableModel.h"
34#include "Instrument.h"
35#include "InstrumentView.h"
36
37namespace lmms
38{
39
40
41enum class SfxrWave
42{
44};
45constexpr auto NumSfxrWaves = static_cast<std::size_t>(SfxrWave::Count);
46
47const int WAVEFORM_BASE_X = 20;
48const int WAVEFORM_BASE_Y = 15;
49const int WAVEFORM_BUTTON_WIDTH = 16;
50
51const int GENERATOR_BASE_X = 110;
52const int GENERATOR_BASE_Y = 25;
54
55const int RAND_BUTTON_X = 160;
56const int RAND_BUTTON_Y = 4;
57
58const int MUTA_BUTTON_X = 205;
59const int MUTA_BUTTON_Y = 4;
60
61const int KNOBS_BASE_X = 20;
62const int KNOBS_BASE_Y = 50;
63const int KNOB_BLOCK_SIZE_X = 40;
64const int KNOB_BLOCK_SIZE_Y = 40;
65
66
67
68class SfxrInstrument;
69
70namespace gui
71{
72class AutomatableButtonGroup;
73class Knob;
74class PixmapButton;
75class SfxrInstrumentView;
76}
77
78
79
81{
82public:
83 SfxrSynth( const SfxrInstrument * s );
84 virtual ~SfxrSynth() = default;
85
86 void resetSample( bool restart );
87 void update( SampleFrame* buffer, const int32_t frameNum );
88
89 bool isPlaying() const;
90
91private:
94 int phase;
95 double fperiod;
96 double fmaxperiod;
97 double fslide;
98 double fdslide;
99 int period;
105 float env_vol;
106 float fphase;
107 float fdphase;
109 std::array<float, 1024> phaser_buffer;
110 int ipp;
111 float noise_buffer[32];
112 float fltp;
113 float fltdp;
114 float fltw;
115 float fltw_d;
116 float fltdmp;
117 float fltphp;
118 float flthp;
119 float flthp_d;
122 float vib_amp;
127 double arp_mod;
128
129} ;
130
131
132
137{
138public:
140 FloatModel(val, 0.f, 1.f, 0.001f, parent, displayName)
141 {
142 }
143 /* purpose: prevent the initial value of the model from being changed */
144 void loadSettings( const QDomElement& element, const QString& name = QString( "value" ) ) override
145 {
146 float oldInitValue = initValue();
148 float oldValue = value();
149 setInitValue(oldInitValue);
150 setValue(oldValue);
151 }
152};
153
158{
159public:
161 FloatModel(val, -1.f, 1.f, 0.001f, parent, displayName)
162 {
163 }
164 /* purpose: prevent the initial value of the model from being changed */
165 void loadSettings( const QDomElement& element, const QString& name = QString( "value" ) ) override
166 {
167 float oldInitValue = initValue();
169 float oldValue = value();
170 setInitValue(oldInitValue);
171 setValue(oldValue);
172 }
173};
174
176{
177 Q_OBJECT
178public:
179 SfxrInstrument(InstrumentTrack * _instrument_track );
180 ~SfxrInstrument() override = default;
181
182 void playNote( NotePlayHandle * _n, SampleFrame* _working_buffer ) override;
183 void deleteNotePluginData( NotePlayHandle * _n ) override;
184
185 void saveSettings( QDomDocument & _doc,
186 QDomElement & _parent ) override;
187 void loadSettings( const QDomElement & _this ) override;
188
189 QString nodeName() const override;
190
191 gui::PluginView* instantiateView( QWidget * _parent ) override;
192
193 void resetModels();
194
195
196private:
201
208
211
214
216
219
225
227
229 friend class SfxrSynth;
230};
231
232
233namespace gui
234{
235
236
238{
239 Q_OBJECT
240public:
241 SfxrInstrumentView( Instrument * _instrument,
242 QWidget * _parent );
243
244 ~SfxrInstrumentView() override = default;
245
246protected slots:
247 void genPickup();
248 void genLaser();
249 void genExplosion();
250 void genPowerup();
251 void genHit();
252 void genJump();
253 void genBlip();
254 void randomize();
255 void mutate();
256
257 void previewSound();
258
259private:
260 void modelChanged() override;
261
262 Knob * m_attKnob; //Attack Time
263 Knob * m_holdKnob; //Sustain Time
264 Knob * m_susKnob; //Sustain Punch
265 Knob * m_decKnob; //Decay Time
266
267 Knob * m_startFreqKnob; //Start Frequency
268 Knob * m_minFreqKnob; //Min Frequency
269 Knob * m_slideKnob; //Slide
270 Knob * m_dSlideKnob; //Delta Slide
271 Knob * m_vibDepthKnob; //Vibrato Depth
272 Knob * m_vibSpeedKnob; //Vibrato Speed
273
274 Knob * m_changeAmtKnob; //Change Amount
275 Knob * m_changeSpeedKnob; //Change Speed
276
277 Knob * m_sqrDutyKnob; //Square Wave Duty
278 Knob * m_sqrSweepKnob; //Square Wave Duty Sweep
279
280 Knob * m_repeatSpeedKnob; //Repeat Speed
281
282 Knob * m_phaserOffsetKnob; //Phaser Offset
283 Knob * m_phaserSweepKnob; //Phaser Sweep
284
285 Knob * m_lpFilCutKnob; //LP Filter Cutoff
286 Knob * m_lpFilCutSweepKnob; //LP Filter Cutoff Sweep
287 Knob * m_lpFilResoKnob; //LP Filter Resonance
288 Knob * m_hpFilCutKnob; //HP Filter Cutoff
289 Knob * m_hpFilCutSweepKnob; //HP Filter Cutoff Sweep
290
292 PixmapButton * m_sqrWaveBtn; //NOTE: This button has Square Duty
293 //and Square Speed configurable
297
298
306
309
310 static QPixmap * s_artwork;
311};
312
313
314} // namespace gui
315
316} // namespace lmms
317
318#endif
virtual void loadSettings(const QDomElement &element, const QString &name)
Loads settings (value, automation links and controller connections) of AutomatableModel from specifie...
Definition AutomatableModel.cpp:178
void setValue(const float value, const bool isAutomated=false)
Definition AutomatableModel.cpp:294
void setInitValue(const float value)
Definition AutomatableModel.cpp:647
FloatModel(float val=0, float min=0, float max=0, float step=0, Model *parent=nullptr, const QString &displayName=QString(), bool defaultConstructed=false)
Definition AutomatableModel.h:467
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 Model.h:37
virtual QString displayName() const
Definition Model.cpp:47
Definition NotePlayHandle.h:48
Definition SampleFrame.h:41
Definition Sfxr.h:176
SfxrNegPosOneFloatModel m_slideModel
Definition Sfxr.h:204
SfxrZeroToOneFloatModel m_decModel
Definition Sfxr.h:200
void loadSettings(const QDomElement &_this) override
Definition Sfxr.cpp:390
~SfxrInstrument() override=default
SfxrNegPosOneFloatModel m_phaserSweepModel
Definition Sfxr.h:218
friend class SfxrSynth
Definition Sfxr.h:229
SfxrZeroToOneFloatModel m_holdModel
Definition Sfxr.h:198
SfxrZeroToOneFloatModel m_startFreqModel
Definition Sfxr.h:202
void saveSettings(QDomDocument &_doc, QDomElement &_parent) override
Definition Sfxr.cpp:352
IntModel m_waveFormModel
Definition Sfxr.h:226
SfxrZeroToOneFloatModel m_lpFilResoModel
Definition Sfxr.h:222
SfxrInstrument(InstrumentTrack *_instrument_track)
Definition Sfxr.cpp:315
gui::PluginView * instantiateView(QWidget *_parent) override
Create a view for the model.
Definition Sfxr.cpp:488
void playNote(NotePlayHandle *_n, SampleFrame *_working_buffer) override
Definition Sfxr.cpp:437
SfxrZeroToOneFloatModel m_susModel
Definition Sfxr.h:199
SfxrZeroToOneFloatModel m_sqrDutyModel
Definition Sfxr.h:212
SfxrZeroToOneFloatModel m_repeatSpeedModel
Definition Sfxr.h:215
SfxrNegPosOneFloatModel m_hpFilCutSweepModel
Definition Sfxr.h:224
SfxrNegPosOneFloatModel m_sqrSweepModel
Definition Sfxr.h:213
SfxrNegPosOneFloatModel m_changeAmtModel
Definition Sfxr.h:209
SfxrZeroToOneFloatModel m_attModel
Definition Sfxr.h:197
QString nodeName() const override
Definition Sfxr.cpp:429
SfxrNegPosOneFloatModel m_phaserOffsetModel
Definition Sfxr.h:217
SfxrZeroToOneFloatModel m_minFreqModel
Definition Sfxr.h:203
void resetModels()
Definition Sfxr.cpp:496
SfxrZeroToOneFloatModel m_hpFilCutModel
Definition Sfxr.h:223
SfxrZeroToOneFloatModel m_vibDepthModel
Definition Sfxr.h:206
SfxrNegPosOneFloatModel m_lpFilCutSweepModel
Definition Sfxr.h:221
void deleteNotePluginData(NotePlayHandle *_n) override
Definition Sfxr.cpp:480
SfxrZeroToOneFloatModel m_vibSpeedModel
Definition Sfxr.h:207
SfxrNegPosOneFloatModel m_dSlideModel
Definition Sfxr.h:205
SfxrZeroToOneFloatModel m_lpFilCutModel
Definition Sfxr.h:220
SfxrZeroToOneFloatModel m_changeSpeedModel
Definition Sfxr.h:210
A class that simplify the constructor of FloatModel, with value [-1,1].
Definition Sfxr.h:158
SfxrNegPosOneFloatModel(float val, Model *parent, const QString &displayName)
Definition Sfxr.h:160
void loadSettings(const QDomElement &element, const QString &name=QString("value")) override
Loads settings (value, automation links and controller connections) of AutomatableModel from specifie...
Definition Sfxr.h:165
double fmaxperiod
Definition Sfxr.h:96
double fdslide
Definition Sfxr.h:98
float vib_speed
Definition Sfxr.h:121
int rep_limit
Definition Sfxr.h:124
int env_length[3]
Definition Sfxr.h:104
int env_stage
Definition Sfxr.h:102
float vib_phase
Definition Sfxr.h:120
float fdphase
Definition Sfxr.h:107
void resetSample(bool restart)
Definition Sfxr.cpp:80
float noise_buffer[32]
Definition Sfxr.h:111
bool playing_sample
Definition Sfxr.h:93
double fperiod
Definition Sfxr.h:95
float vib_amp
Definition Sfxr.h:122
float fltphp
Definition Sfxr.h:117
double arp_mod
Definition Sfxr.h:127
int arp_time
Definition Sfxr.h:125
float env_vol
Definition Sfxr.h:105
int ipp
Definition Sfxr.h:110
int env_time
Definition Sfxr.h:103
std::array< float, 1024 > phaser_buffer
Definition Sfxr.h:109
virtual ~SfxrSynth()=default
int iphase
Definition Sfxr.h:108
float fltw_d
Definition Sfxr.h:115
float square_duty
Definition Sfxr.h:100
float fltp
Definition Sfxr.h:112
double fslide
Definition Sfxr.h:97
float fphase
Definition Sfxr.h:106
int period
Definition Sfxr.h:99
bool isPlaying() const
Definition Sfxr.cpp:307
float fltdp
Definition Sfxr.h:113
float flthp_d
Definition Sfxr.h:119
int phase
Definition Sfxr.h:94
const SfxrInstrument * s
Definition Sfxr.h:92
int rep_time
Definition Sfxr.h:123
float fltw
Definition Sfxr.h:114
float flthp
Definition Sfxr.h:118
void update(SampleFrame *buffer, const int32_t frameNum)
Definition Sfxr.cpp:150
SfxrSynth(const SfxrInstrument *s)
Definition Sfxr.cpp:70
int arp_limit
Definition Sfxr.h:126
float square_slide
Definition Sfxr.h:101
float fltdmp
Definition Sfxr.h:116
A class that simplify the constructor of FloatModel, with value [0,1].
Definition Sfxr.h:137
void loadSettings(const QDomElement &element, const QString &name=QString("value")) override
Loads settings (value, automation links and controller connections) of AutomatableModel from specifie...
Definition Sfxr.h:144
SfxrZeroToOneFloatModel(float val, Model *parent, const QString &displayName)
Definition Sfxr.h:139
float initValue() const
Definition AutomatableModel.h:443
Definition AutomatableButton.h:84
Instrument view with fixed LMMS-default size.
Definition InstrumentView.h:66
Definition Knob.h:47
Definition PixmapButton.h:37
Definition PluginView.h:36
Definition Sfxr.h:238
Knob * m_changeSpeedKnob
Definition Sfxr.h:275
void genPickup()
Definition Sfxr.cpp:738
~SfxrInstrumentView() override=default
Knob * m_sqrDutyKnob
Definition Sfxr.h:277
Knob * m_startFreqKnob
Definition Sfxr.h:267
Knob * m_holdKnob
Definition Sfxr.h:263
void genPowerup()
Definition Sfxr.cpp:847
PixmapButton * m_sawWaveBtn
Definition Sfxr.h:294
SfxrInstrumentView(Instrument *_instrument, QWidget *_parent)
Definition Sfxr.cpp:583
Knob * m_phaserSweepKnob
Definition Sfxr.h:283
Knob * m_hpFilCutSweepKnob
Definition Sfxr.h:289
PixmapButton * m_blipBtn
Definition Sfxr.h:305
PixmapButton * m_sqrWaveBtn
Definition Sfxr.h:292
Knob * m_minFreqKnob
Definition Sfxr.h:268
PixmapButton * m_explosionBtn
Definition Sfxr.h:301
static QPixmap * s_artwork
Definition Sfxr.h:310
void mutate()
Definition Sfxr.cpp:1002
void genExplosion()
Definition Sfxr.cpp:801
Knob * m_vibDepthKnob
Definition Sfxr.h:271
Knob * m_attKnob
Definition Sfxr.h:262
void genJump()
Definition Sfxr.cpp:896
PixmapButton * m_mutateBtn
Definition Sfxr.h:308
void genBlip()
Definition Sfxr.cpp:916
Knob * m_dSlideKnob
Definition Sfxr.h:270
Knob * m_lpFilCutKnob
Definition Sfxr.h:285
AutomatableButtonGroup * m_waveBtnGroup
Definition Sfxr.h:291
PixmapButton * m_randomizeBtn
Definition Sfxr.h:307
Knob * m_vibSpeedKnob
Definition Sfxr.h:272
Knob * m_repeatSpeedKnob
Definition Sfxr.h:280
void genHit()
Definition Sfxr.cpp:878
Knob * m_lpFilCutSweepKnob
Definition Sfxr.h:286
PixmapButton * m_pickupBtn
Definition Sfxr.h:299
PixmapButton * m_hitBtn
Definition Sfxr.h:303
Knob * m_sqrSweepKnob
Definition Sfxr.h:278
void genLaser()
Definition Sfxr.cpp:756
Knob * m_susKnob
Definition Sfxr.h:264
Knob * m_decKnob
Definition Sfxr.h:265
PixmapButton * m_laserBtn
Definition Sfxr.h:300
void modelChanged() override
Definition Sfxr.cpp:701
void randomize()
Definition Sfxr.cpp:940
PixmapButton * m_jumpBtn
Definition Sfxr.h:304
Knob * m_slideKnob
Definition Sfxr.h:269
Knob * m_phaserOffsetKnob
Definition Sfxr.h:282
Knob * m_changeAmtKnob
Definition Sfxr.h:274
Knob * m_lpFilResoKnob
Definition Sfxr.h:287
PixmapButton * m_powerupBtn
Definition Sfxr.h:302
PixmapButton * m_sinWaveBtn
Definition Sfxr.h:295
PixmapButton * m_noiseWaveBtn
Definition Sfxr.h:296
Knob * m_hpFilCutKnob
Definition Sfxr.h:288
void previewSound()
Definition Sfxr.cpp:1039
static PuglViewHint int value
Definition pugl.h:1708
static const char * name
Definition pugl.h:1582
static uintptr_t parent
Definition pugl.h:1644
int val
Definition jpeglib.h:956
int int32_t
Definition mid.cpp:97
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
const int KNOB_BLOCK_SIZE_X
Definition Sfxr.h:63
const int MUTA_BUTTON_Y
Definition Sfxr.h:59
const int WAVEFORM_BASE_X
Definition Sfxr.h:47
const int RAND_BUTTON_X
Definition Sfxr.h:55
const int GENERATOR_BUTTON_WIDTH
Definition Sfxr.h:53
const int RAND_BUTTON_Y
Definition Sfxr.h:56
const int GENERATOR_BASE_Y
Definition Sfxr.h:52
const int KNOB_BLOCK_SIZE_Y
Definition Sfxr.h:64
constexpr auto NumSfxrWaves
Definition Sfxr.h:45
SfxrWave
Definition Sfxr.h:42
@ Sine
Definition Sfxr.h:43
@ Noise
Definition Sfxr.h:43
@ Saw
Definition Sfxr.h:43
@ Square
Definition Sfxr.h:43
@ Count
Definition Sfxr.h:43
const int WAVEFORM_BASE_Y
Definition Sfxr.h:48
const int KNOBS_BASE_Y
Definition Sfxr.h:62
const int MUTA_BUTTON_X
Definition Sfxr.h:58
const int GENERATOR_BASE_X
Definition Sfxr.h:51
const int KNOBS_BASE_X
Definition Sfxr.h:61
const int WAVEFORM_BUTTON_WIDTH
Definition Sfxr.h:49