LMMS
Loading...
Searching...
No Matches
OpulenZ.h
Go to the documentation of this file.
1/*
2 * OpulenZ.h - AdLib OPL2 FM synth based instrument
3 *
4 * Copyright (c) 2013 Raine M. Ekman <raine/at/iki/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#ifndef OPULENZ_H
26#define OPULENZ_H
27
28
29#include "AutomatableModel.h"
30#include "Instrument.h"
31#include "InstrumentView.h"
32
33class Copl;
34
35
36namespace lmms
37{
38
39namespace gui
40{
41class Knob;
42class LcdSpinBox;
43class PixmapButton;
45}
46
47
48// This one is a flag, MIDI notes take 7 low bits
49#define OPL2_VOICE_FREE 128
50#define OPL2_NO_VOICE 255
51#define OPL2_VOICES 9
52
53// The "normal" range for LMMS pitchbends
54#define DEFAULT_BEND_CENTS 100
55
57{
58 Q_OBJECT
59public:
60 OpulenzInstrument( InstrumentTrack * _instrument_track );
61 ~OpulenzInstrument() override;
62
63 QString nodeName() const override;
64 gui::PluginView* instantiateView( QWidget * _parent ) override;
65
66 bool handleMidiEvent( const MidiEvent& event, const TimePos& time, f_cnt_t offset = 0 ) override;
67 void play( SampleFrame* _working_buffer ) override;
68
69 void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
70 void loadSettings( const QDomElement & _this ) override;
71 void loadPatch(const unsigned char inst[14]);
72 void tuneEqual(int center, float Hz);
73 void loadFile( const QString& file ) override;
74
76
94
95
112
116
117
118private slots:
119 void updatePatch();
120 void reloadEmulator();
121 void loadGMPatch();
122
123private:
125 QString storedname;
129 // Least recently used voices
131 // 0 - no note, >0 - note on velocity
132 int velocities[128];
133 // These include both octave and Fnumber
134 int fnums[128];
135 // in cents, range defaults to +/-100 cents (should this be changeable?)
138
139 int popVoice();
140 int pushVoice(int v);
141
142 int Hz2fnum(float Hz);
143 static QMutex emulatorMutex;
144 void setVoiceVelocity(int voice, int vel);
145
146 // Pitch bend range comes through RPNs.
148};
149
150
151namespace gui
152{
153
154
212
213
214} // namespace gui
215
216} // namespace lmms
217
218#endif
#define OPL2_VOICES
Definition OpulenZ.h:51
Definition opl.h:26
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 MidiEvent.h:37
void loadFile(const QString &file) override
Definition OpulenZ.cpp:588
BoolModel op1_vib_mdl
Definition OpulenZ.h:88
FloatModel op1_d_mdl
Definition OpulenZ.h:78
FloatModel op1_r_mdl
Definition OpulenZ.h:80
BoolModel op1_w1_mdl
Definition OpulenZ.h:90
QString nodeName() const override
Definition OpulenZ.cpp:382
void updatePatch()
Definition OpulenZ.cpp:534
FloatModel op2_mul_mdl
Definition OpulenZ.h:102
BoolModel vib_depth_mdl
Definition OpulenZ.h:114
int pitchbend
Definition OpulenZ.h:136
void play(SampleFrame *_working_buffer) override
Definition OpulenZ.cpp:393
BoolModel op1_w3_mdl
Definition OpulenZ.h:92
void loadSettings(const QDomElement &_this) override
Definition OpulenZ.cpp:446
BoolModel op1_ksr_mdl
Definition OpulenZ.h:85
BoolModel op2_w1_mdl
Definition OpulenZ.h:108
BoolModel op1_w0_mdl
Definition OpulenZ.h:89
void saveSettings(QDomDocument &_doc, QDomElement &_this) override
Definition OpulenZ.cpp:410
int fnums[128]
Definition OpulenZ.h:134
int RPNcoarse
Definition OpulenZ.h:147
bool handleMidiEvent(const MidiEvent &event, const TimePos &time, f_cnt_t offset=0) override
Definition OpulenZ.cpp:295
FloatModel op2_d_mdl
Definition OpulenZ.h:97
OpulenzInstrument(InstrumentTrack *_instrument_track)
Definition OpulenZ.cpp:97
BoolModel op2_ksr_mdl
Definition OpulenZ.h:103
FloatModel op2_a_mdl
Definition OpulenZ.h:96
BoolModel op2_perc_mdl
Definition OpulenZ.h:104
void reloadEmulator()
Definition OpulenZ.cpp:231
int RPNfine
Definition OpulenZ.h:147
FloatModel op1_s_mdl
Definition OpulenZ.h:79
IntModel op1_waveform_mdl
Definition OpulenZ.h:93
int pitchBendRange
Definition OpulenZ.h:137
int pushVoice(int v)
Definition OpulenZ.cpp:279
FloatModel op2_s_mdl
Definition OpulenZ.h:98
void loadGMPatch()
Definition OpulenZ.cpp:528
static QMutex emulatorMutex
Definition OpulenZ.h:143
FloatModel feedback_mdl
Definition OpulenZ.h:84
BoolModel trem_depth_mdl
Definition OpulenZ.h:115
~OpulenzInstrument() override
Definition OpulenZ.cpp:222
gui::PluginView * instantiateView(QWidget *_parent) override
Create a view for the model.
Definition OpulenZ.cpp:387
QString storedname
Definition OpulenZ.h:125
FloatModel op1_mul_mdl
Definition OpulenZ.h:83
FloatModel op2_r_mdl
Definition OpulenZ.h:99
BoolModel op1_w2_mdl
Definition OpulenZ.h:91
IntModel op2_waveform_mdl
Definition OpulenZ.h:111
BoolModel op2_w2_mdl
Definition OpulenZ.h:109
FloatModel op1_lvl_mdl
Definition OpulenZ.h:81
void loadPatch(const unsigned char inst[14])
Definition OpulenZ.cpp:491
void setVoiceVelocity(int voice, int vel)
Definition OpulenZ.cpp:246
int Hz2fnum(float Hz)
Definition OpulenZ.cpp:517
int voiceNote[OPL2_VOICES]
Definition OpulenZ.h:128
FloatModel op2_lvl_mdl
Definition OpulenZ.h:100
int popVoice()
Definition OpulenZ.cpp:266
BoolModel op2_w0_mdl
Definition OpulenZ.h:107
FloatModel op1_scale_mdl
Definition OpulenZ.h:82
Copl * theEmulator
Definition OpulenZ.h:124
short * renderbuffer
Definition OpulenZ.h:127
IntModel m_patchModel
Definition OpulenZ.h:75
BoolModel op1_perc_mdl
Definition OpulenZ.h:86
void tuneEqual(int center, float Hz)
Definition OpulenZ.cpp:509
FloatModel op2_scale_mdl
Definition OpulenZ.h:101
FloatModel op1_a_mdl
Definition OpulenZ.h:77
f_cnt_t frameCount
Definition OpulenZ.h:126
BoolModel fm_mdl
Definition OpulenZ.h:113
BoolModel op2_w3_mdl
Definition OpulenZ.h:110
BoolModel op1_trem_mdl
Definition OpulenZ.h:87
BoolModel op2_trem_mdl
Definition OpulenZ.h:105
int velocities[128]
Definition OpulenZ.h:132
BoolModel op2_vib_mdl
Definition OpulenZ.h:106
int voiceLRU[OPL2_VOICES]
Definition OpulenZ.h:130
Definition SampleFrame.h:41
Definition TimePos.h:68
Definition AutomatableButton.h:84
Instrument view with fixed LMMS-default size.
Definition InstrumentView.h:66
Definition Knob.h:47
Definition LcdSpinBox.h:35
LcdSpinBox * m_patch
Definition OpulenZ.h:161
Knob * op2_a_kn
Definition OpulenZ.h:183
Knob * op1_scale_kn
Definition OpulenZ.h:169
~OpulenzInstrumentView() override
Definition OpulenZ.cpp:763
PixmapButton * op2_trem_btn
Definition OpulenZ.h:192
Knob * op1_d_kn
Definition OpulenZ.h:165
Knob * op1_a_kn
Definition OpulenZ.h:164
PixmapButton * op2_ksr_btn
Definition OpulenZ.h:190
PixmapButton * op2_w1_btn
Definition OpulenZ.h:195
Knob * op1_mul_kn
Definition OpulenZ.h:170
Knob * op1_r_kn
Definition OpulenZ.h:167
PixmapButton * vib_depth_btn
Definition OpulenZ.h:202
PixmapButton * op1_w0_btn
Definition OpulenZ.h:176
PixmapButton * op2_w3_btn
Definition OpulenZ.h:197
PixmapButton * op2_perc_btn
Definition OpulenZ.h:191
Knob * op2_lvl_kn
Definition OpulenZ.h:187
Knob * op1_lvl_kn
Definition OpulenZ.h:168
Knob * feedback_kn
Definition OpulenZ.h:171
OpulenzInstrumentView(Instrument *_instrument, QWidget *_parent)
Definition OpulenZ.cpp:681
PixmapButton * op2_vib_btn
Definition OpulenZ.h:193
PixmapButton * op1_w3_btn
Definition OpulenZ.h:179
Knob * op2_d_kn
Definition OpulenZ.h:184
void updateKnobHints()
Definition OpulenZ.cpp:779
PixmapButton * op1_vib_btn
Definition OpulenZ.h:175
PixmapButton * op1_perc_btn
Definition OpulenZ.h:173
AutomatableButtonGroup * op2_waveform
Definition OpulenZ.h:198
PixmapButton * op1_w2_btn
Definition OpulenZ.h:178
PixmapButton * op1_trem_btn
Definition OpulenZ.h:174
PixmapButton * op2_w0_btn
Definition OpulenZ.h:194
PixmapButton * op1_w1_btn
Definition OpulenZ.h:177
PixmapButton * fm_btn
Definition OpulenZ.h:201
Knob * op2_scale_kn
Definition OpulenZ.h:188
PixmapButton * trem_depth_btn
Definition OpulenZ.h:203
Knob * op1_s_kn
Definition OpulenZ.h:166
QString knobHintHelper(float n)
Definition OpulenZ.cpp:769
Knob * op2_mul_kn
Definition OpulenZ.h:189
Knob * op2_s_kn
Definition OpulenZ.h:185
PixmapButton * op2_w2_btn
Definition OpulenZ.h:196
void modelChanged() override
Definition OpulenZ.cpp:819
AutomatableButtonGroup * op1_waveform
Definition OpulenZ.h:180
Knob * op2_r_kn
Definition OpulenZ.h:186
PixmapButton * op1_ksr_btn
Definition OpulenZ.h:172
Definition PixmapButton.h:37
Definition PluginView.h:36
unsigned v[N_MAX]
Definition inflate.c:1584
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
std::uint64_t f_cnt_t
Definition LmmsTypes.h:43
int n
Definition crypt.c:458
struct zdirent * file
Definition win32.c:1500