LMMS
Loading...
Searching...
No Matches
TripleOscillator.h
Go to the documentation of this file.
1/*
2 * TripleOscillator.h - declaration of class TripleOscillator a powerful
3 * instrument-plugin with 3 oscillators
4 *
5 * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
6 *
7 * This file is part of LMMS - https://lmms.io
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public
11 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public
20 * License along with this program (see COPYING); if not, write to the
21 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 * Boston, MA 02110-1301 USA.
23 *
24 */
25
26#ifndef _TRIPLE_OSCILLATOR_H
27#define _TRIPLE_OSCILLATOR_H
28
29#include <memory>
30
31#include "Instrument.h"
32#include "InstrumentView.h"
33#include "AutomatableModel.h"
34#include "OscillatorConstants.h"
35#include "SampleBuffer.h"
36
37namespace lmms
38{
39
40
41class NotePlayHandle; // IWYU pragma: keep
42class Oscillator;
43
44
45namespace gui
46{
48class Knob;
49class PixmapButton;
51} // namespace gui
52
53
54const int NUM_OF_OSCILLATORS = 3;
55
56
57class OscillatorObject : public Model
58{
59 Q_OBJECT
60public:
61 OscillatorObject( Model * _parent, int _idx );
62private:
73 std::shared_ptr<const SampleBuffer> m_sampleBuffer = SampleBuffer::emptyBuffer();
74 std::shared_ptr<const OscillatorConstants::waveform_t> m_userAntiAliasWaveTable;
75
76 float m_volumeLeft;
77 float m_volumeRight;
78
79 // normalized detuning -> x/sampleRate
80 float m_detuningLeft;
81 float m_detuningRight;
82 // normalized offset -> x/360
86
87 friend class TripleOscillator;
89
90
91private slots:
93
95 void updateDetuningLeft();
99 void updateUseWaveTable();
100
101} ;
102
103
104
105
107{
108 Q_OBJECT
109public:
111 ~TripleOscillator() override = default;
112
113 void playNote( NotePlayHandle * _n,
114 SampleFrame* _working_buffer ) override;
115 void deleteNotePluginData( NotePlayHandle * _n ) override;
116
117
118 void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
119 void loadSettings( const QDomElement & _this ) override;
120
121 QString nodeName() const override;
122
123 float desiredReleaseTimeMs() const override
124 {
125 return 3.f;
126 }
127
128 gui::PluginView* instantiateView( QWidget * _parent ) override;
129
130
131protected slots:
132 void updateAllDetuning();
133
134
135private:
137
143
144
146
147} ;
148
149
150namespace gui
151{
152
153
208
209
210} // namespace gui
211
212} // namespace lmms
213
214#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 Model.h:37
Model(Model *parent, QString displayName=QString(), bool defaultConstructed=false)
Definition Model.cpp:30
Definition NotePlayHandle.h:48
Definition Oscillator.h:49
Definition Organic.h:84
OscillatorObject(Model *_parent, int _idx)
std::shared_ptr< const OscillatorConstants::waveform_t > m_userAntiAliasWaveTable
Definition TripleOscillator.h:74
bool m_useWaveTable
Definition TripleOscillator.h:85
void updatePhaseOffsetLeft()
Definition TripleOscillator.cpp:193
FloatModel m_volumeModel
Definition TripleOscillator.h:63
float m_phaseOffsetLeft
Definition Organic.h:101
FloatModel m_stereoPhaseDetuningModel
Definition TripleOscillator.h:69
void updateUseWaveTable()
Definition TripleOscillator.cpp:207
IntModel m_modulationAlgoModel
Definition TripleOscillator.h:71
BoolModel m_useWaveTableModel
Definition TripleOscillator.h:72
void updateDetuningRight()
Definition TripleOscillator.cpp:184
float m_phaseOffsetRight
Definition Organic.h:102
FloatModel m_coarseModel
Definition TripleOscillator.h:65
void updateDetuningLeft()
Definition TripleOscillator.cpp:175
friend class TripleOscillator
Definition TripleOscillator.h:87
std::shared_ptr< const SampleBuffer > m_sampleBuffer
Definition TripleOscillator.h:73
float m_volumeLeft
Definition Organic.h:95
FloatModel m_fineRightModel
Definition TripleOscillator.h:67
float m_volumeRight
Definition Organic.h:96
FloatModel m_phaseOffsetModel
Definition TripleOscillator.h:68
FloatModel m_panModel
Definition Organic.h:92
float m_detuningRight
Definition Organic.h:99
float m_detuningLeft
Definition Organic.h:98
void updatePhaseOffsetRight()
Definition TripleOscillator.cpp:202
FloatModel m_fineLeftModel
Definition TripleOscillator.h:66
void oscUserDefWaveDblClick()
Definition TripleOscillator.cpp:137
IntModel m_waveShapeModel
Definition TripleOscillator.h:70
static auto emptyBuffer() -> std::shared_ptr< const SampleBuffer >
Definition SampleBuffer.cpp:67
Definition SampleFrame.h:41
void deleteNotePluginData(NotePlayHandle *_n) override
Definition TripleOscillator.cpp:387
float desiredReleaseTimeMs() const override
Definition TripleOscillator.h:123
gui::PluginView * instantiateView(QWidget *_parent) override
Create a view for the model.
Definition TripleOscillator.cpp:399
void loadSettings(const QDomElement &_this) override
Definition TripleOscillator.cpp:262
void saveSettings(QDomDocument &_doc, QDomElement &_parent) override
Definition TripleOscillator.cpp:231
TripleOscillator(InstrumentTrack *_track)
Definition TripleOscillator.cpp:215
void playNote(NotePlayHandle *_n, SampleFrame *_working_buffer) override
Definition TripleOscillator.cpp:306
QString nodeName() const override
Definition TripleOscillator.cpp:298
~TripleOscillator() override=default
void updateAllDetuning()
Definition TripleOscillator.cpp:407
OscillatorObject * m_osc[NUM_OF_OSCILLATORS]
Definition TripleOscillator.h:136
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 TripleOscillator.h:155
AutomatableButtonGroup * m_mod1BtnGrp
Definition TripleOscillator.h:165
TripleOscillatorView(Instrument *_instrument, QWidget *_parent)
Definition TripleOscillator.cpp:435
AutomatableButtonGroup * m_mod2BtnGrp
Definition TripleOscillator.h:166
OscillatorKnobs m_oscKnobs[NUM_OF_OSCILLATORS]
Definition TripleOscillator.h:206
~TripleOscillatorView() override=default
void modelChanged() override
Definition TripleOscillator.cpp:702
unsigned v[N_MAX]
Definition inflate.c:1584
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
const int NUM_OF_OSCILLATORS
Definition TripleOscillator.h:54
Definition TripleOscillator.h:139
Oscillator * oscLeft
Definition TripleOscillator.h:140
Oscillator * oscRight
Definition TripleOscillator.h:141
Definition TripleOscillator.h:169
PixmapButton * m_userWaveButton
Definition TripleOscillator.h:200
Knob * m_volKnob
Definition TripleOscillator.h:193
AutomatableButtonGroup * m_waveShapeBtnGrp
Definition TripleOscillator.h:201
Knob * m_fineRightKnob
Definition TripleOscillator.h:197
Knob * m_fineLeftKnob
Definition TripleOscillator.h:196
OscillatorKnobs(Knob *v, Knob *p, Knob *c, Knob *fl, Knob *fr, Knob *po, Knob *spd, PixmapButton *uwb, AutomatableButtonGroup *wsbg, PixmapButton *wt)
Definition TripleOscillator.h:170
Knob * m_phaseOffsetKnob
Definition TripleOscillator.h:198
Knob * m_panKnob
Definition TripleOscillator.h:194
PixmapButton * m_multiBandWaveTableButton
Definition TripleOscillator.h:202
Knob * m_coarseKnob
Definition TripleOscillator.h:195
Knob * m_stereoPhaseDetuningKnob
Definition TripleOscillator.h:199
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175