LMMS
Loading...
Searching...
No Matches
Vibed.h
Go to the documentation of this file.
1/*
2 * Vibed.h - combination of PluckedStringSynth and BitInvader
3 *
4 * Copyright (c) 2006-2008 Danny McRae <khjklujn/at/yahoo/com>
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 LMMS_VIBED_H
26#define LMMS_VIBED_H
27
28#include "Instrument.h"
29#include "InstrumentView.h"
30#include "NineButtonSelector.h"
31#include "Knob.h"
32#include "LedCheckBox.h"
33#include "Graph.h"
34#include "PixmapButton.h"
35
36#include <array>
37#include <memory>
38
39namespace lmms
40{
41
42
43class NotePlayHandle; // IWYU pragma: keep
44
45namespace gui
46{
47class VibedView;
48}
49
50class Vibed : public Instrument
51{
52 Q_OBJECT
53public:
55 ~Vibed() override = default;
56
57 void playNote(NotePlayHandle* n, SampleFrame* workingBuffer) override;
59
60 void saveSettings(QDomDocument& doc, QDomElement& elem) override;
61 void loadSettings(const QDomElement& elem) override;
62
63 QString nodeName() const override;
64
65 gui::PluginView* instantiateView(QWidget* parent) override;
66
67private:
68 class StringContainer;
69
70 static constexpr int s_sampleLength = 128;
71 static constexpr int s_stringCount = 9;
72
73 std::array<std::unique_ptr<FloatModel>, s_stringCount> m_pickModels;
74 std::array<std::unique_ptr<FloatModel>, s_stringCount> m_pickupModels;
75 std::array<std::unique_ptr<FloatModel>, s_stringCount> m_stiffnessModels;
76 std::array<std::unique_ptr<FloatModel>, s_stringCount> m_volumeModels;
77 std::array<std::unique_ptr<FloatModel>, s_stringCount> m_panModels;
78 std::array<std::unique_ptr<FloatModel>, s_stringCount> m_detuneModels;
79 std::array<std::unique_ptr<FloatModel>, s_stringCount> m_randomModels;
80 std::array<std::unique_ptr<FloatModel>, s_stringCount> m_lengthModels;
81 std::array<std::unique_ptr<BoolModel>, s_stringCount> m_powerModels;
82 std::array<std::unique_ptr<graphModel>, s_stringCount> m_graphModels;
83 std::array<std::unique_ptr<BoolModel>, s_stringCount> m_impulseModels;
84 std::array<std::unique_ptr<NineButtonSelectorModel>, s_stringCount> m_harmonicModels;
85
86 friend class gui::VibedView;
87};
88
89
90namespace gui
91{
92
93
95{
96 Q_OBJECT
97public:
98 VibedView(Instrument* instrument, QWidget* parent);
99 ~VibedView() override = default;
100
101public slots:
102 void showString(int str);
103 void contextMenuEvent(QContextMenuEvent*) override;
104
105protected slots:
106 void sinWaveClicked();
107 void triangleWaveClicked();
108 void sawWaveClicked();
109 void sqrWaveClicked();
110 void noiseWaveClicked();
111 void usrWaveClicked();
112 void smoothClicked();
113 void normalizeClicked();
114
115private:
116 void modelChanged() override;
117
118 // String-related
130 std::unique_ptr<NineButtonSelector> m_harmonic;
131
132 // Not in model
133 std::unique_ptr<NineButtonSelector> m_stringSelector;
136
137 // From impulse editor
144};
145
146
147} // namespace gui
148
149} // namespace lmms
150
151#endif // LMMS_VIBED_H
Definition Instrument.h:52
InstrumentTrack * instrumentTrack() const
Definition Instrument.h:156
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 NotePlayHandle.h:48
Definition SampleFrame.h:41
Definition Vibed.cpp:68
std::array< std::unique_ptr< FloatModel >, s_stringCount > m_stiffnessModels
Definition Vibed.h:75
void loadSettings(const QDomElement &elem) override
Definition Vibed.cpp:158
std::array< std::unique_ptr< graphModel >, s_stringCount > m_graphModels
Definition Vibed.h:82
std::array< std::unique_ptr< NineButtonSelectorModel >, s_stringCount > m_harmonicModels
Definition Vibed.h:84
std::array< std::unique_ptr< FloatModel >, s_stringCount > m_detuneModels
Definition Vibed.h:78
std::array< std::unique_ptr< FloatModel >, s_stringCount > m_pickModels
Definition Vibed.h:73
gui::PluginView * instantiateView(QWidget *parent) override
Create a view for the model.
Definition Vibed.cpp:259
~Vibed() override=default
Vibed(InstrumentTrack *instrumentTrack)
Definition Vibed.cpp:99
static constexpr int s_sampleLength
Definition Vibed.h:70
std::array< std::unique_ptr< FloatModel >, s_stringCount > m_lengthModels
Definition Vibed.h:80
static constexpr int s_stringCount
Definition Vibed.h:71
QString nodeName() const override
Definition Vibed.cpp:199
void playNote(NotePlayHandle *n, SampleFrame *workingBuffer) override
Definition Vibed.cpp:204
std::array< std::unique_ptr< BoolModel >, s_stringCount > m_impulseModels
Definition Vibed.h:83
void saveSettings(QDomDocument &doc, QDomElement &elem) override
Definition Vibed.cpp:129
std::array< std::unique_ptr< FloatModel >, s_stringCount > m_volumeModels
Definition Vibed.h:76
std::array< std::unique_ptr< FloatModel >, s_stringCount > m_pickupModels
Definition Vibed.h:74
std::array< std::unique_ptr< FloatModel >, s_stringCount > m_panModels
Definition Vibed.h:77
std::array< std::unique_ptr< BoolModel >, s_stringCount > m_powerModels
Definition Vibed.h:81
void deleteNotePluginData(NotePlayHandle *n) override
Definition Vibed.cpp:254
std::array< std::unique_ptr< FloatModel >, s_stringCount > m_randomModels
Definition Vibed.h:79
Definition Graph.h:48
Instrument view with fixed LMMS-default size.
Definition InstrumentView.h:66
Definition Knob.h:47
Definition LedCheckBox.h:37
Definition PixmapButton.h:37
Definition PluginView.h:36
Definition Vibed.h:95
Graph m_graph
Definition Vibed.h:127
PixmapButton m_sawWaveBtn
Definition Vibed.h:140
PixmapButton m_normalizeBtn
Definition Vibed.h:135
Knob m_pickupKnob
Definition Vibed.h:122
PixmapButton m_usrWaveBtn
Definition Vibed.h:143
PixmapButton m_sqrWaveBtn
Definition Vibed.h:141
void normalizeClicked()
Definition Vibed.cpp:506
PixmapButton m_triangleWaveBtn
Definition Vibed.h:139
Knob m_volumeKnob
Definition Vibed.h:119
std::unique_ptr< NineButtonSelector > m_stringSelector
Definition Vibed.h:133
void sinWaveClicked()
Definition Vibed.cpp:463
PixmapButton m_smoothBtn
Definition Vibed.h:134
Knob m_lengthKnob
Definition Vibed.h:126
void modelChanged() override
Definition Vibed.cpp:440
Knob m_randomKnob
Definition Vibed.h:125
void triangleWaveClicked()
Definition Vibed.cpp:469
Knob m_detuneKnob
Definition Vibed.h:124
void sawWaveClicked()
Definition Vibed.cpp:475
Knob m_pickKnob
Definition Vibed.h:121
void smoothClicked()
Definition Vibed.cpp:500
void showString(int str)
Definition Vibed.cpp:445
LedCheckBox m_power
Definition Vibed.h:129
PixmapButton m_sinWaveBtn
Definition Vibed.h:138
~VibedView() override=default
void contextMenuEvent(QContextMenuEvent *) override
Definition Vibed.cpp:512
std::unique_ptr< NineButtonSelector > m_harmonic
Definition Vibed.h:130
void usrWaveClicked()
Definition Vibed.cpp:493
LedCheckBox m_impulse
Definition Vibed.h:128
PixmapButton m_whiteNoiseWaveBtn
Definition Vibed.h:142
Knob m_panKnob
Definition Vibed.h:123
VibedView(Instrument *instrument, QWidget *parent)
Definition Vibed.cpp:269
Knob m_stiffnessKnob
Definition Vibed.h:120
void sqrWaveClicked()
Definition Vibed.cpp:481
void noiseWaveClicked()
Definition Vibed.cpp:487
static uintptr_t parent
Definition pugl.h:1644
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
int n
Definition crypt.c:458