LMMS
Loading...
Searching...
No Matches
InstrumentFunctions.h
Go to the documentation of this file.
1/*
2 * InstrumentFunctions.h - models for instrument-functions-tab
3 *
4 * Copyright (c) 2004-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
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_INSTRUMENT_FUNCTIONS_H
26#define LMMS_INSTRUMENT_FUNCTIONS_H
27
28#include <array>
29
30#include "AutomatableModel.h"
31#include "ComboBoxModel.h"
32#include "JournallingObject.h"
33#include "TempoSyncKnobModel.h"
34
35namespace lmms
36{
37
38class InstrumentTrack; // IWYU pragma: keep
39class NotePlayHandle;
40
41namespace gui
42{
43
46
47}
48
49
51{
52 Q_OBJECT
53
54public:
55 static const int MAX_CHORD_POLYPHONY = 13;
56 static const int NUM_CHORD_TABLES = 95;
57
58private:
59 using ChordSemiTones = std::array<int8_t, MAX_CHORD_POLYPHONY>;
60
61public:
63 ~InstrumentFunctionNoteStacking() override = default;
64
66
67
68 void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
69 void loadSettings( const QDomElement & _this ) override;
70
71 inline QString nodeName() const override
72 {
73 return "chordcreator";
74 }
75
76
77 struct Chord
78 {
79 private:
80 QString m_name;
82 int m_size;
83
84 public:
85 Chord() : m_size( 0 ) {}
86
87 Chord( const char * n, const ChordSemiTones & semi_tones );
88
89 int size() const
90 {
91 return m_size;
92 }
93
94 bool isScale() const
95 {
96 return size() > 6;
97 }
98
99 bool isEmpty() const
100 {
101 return size() == 0;
102 }
103
104 bool hasSemiTone( int8_t semiTone ) const;
105
106 int8_t last() const
107 {
108 return m_semiTones[size() - 1];
109 }
110
111 const QString & getName() const
112 {
113 return m_name;
114 }
115
116 int8_t operator [] ( int n ) const
117 {
118 return m_semiTones[n];
119 }
120 };
121
122
124 {
125 private:
126 ChordTable();
127
128 struct Init
129 {
130 const char * m_name;
132 };
133
134 static std::array<Init, NUM_CHORD_TABLES> s_initTable;
135 std::vector<Chord> m_chords;
136
137 public:
138 static const ChordTable & getInstance()
139 {
140 static ChordTable inst;
141 return inst;
142 }
143
144 const Chord & getByName( const QString & name, bool is_scale = false ) const;
145
146 const Chord & getScaleByName( const QString & name ) const
147 {
148 return getByName( name, true );
149 }
150
151 const Chord & getChordByName( const QString & name ) const
152 {
153 return getByName( name, false );
154 }
155
156 const std::vector<Chord>& chords() const
157 {
158 return m_chords;
159 }
160 };
161
162
163private:
167
168
170
171} ;
172
173
174
175
177{
178 Q_OBJECT
179public:
188
190 ~InstrumentFunctionArpeggio() override = default;
191
193
194
195 void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
196 void loadSettings( const QDomElement & _this ) override;
197
198 inline QString nodeName() const override
199 {
200 return "arpeggiator";
201 }
202
203
204private:
205 enum class ArpMode
206 {
210 } ;
211
223
224
225 friend class InstrumentTrack;
227
228} ;
229
230
231} // namespace lmms
232
233#endif // LMMS_INSTRUMENT_FUNCTIONS_H
Definition AutomatableModel.h:497
Definition ComboBoxModel.h:39
Definition AutomatableModel.h:463
FloatModel m_arpCycleModel
Definition InstrumentFunctions.h:216
ComboBoxModel m_arpModel
Definition InstrumentFunctions.h:213
~InstrumentFunctionArpeggio() override=default
void processNote(NotePlayHandle *n)
Definition InstrumentFunctions.cpp:339
ArpDirection
Definition InstrumentFunctions.h:181
@ Down
Definition InstrumentFunctions.h:183
@ UpAndDown
Definition InstrumentFunctions.h:184
@ Up
Definition InstrumentFunctions.h:182
@ DownAndUp
Definition InstrumentFunctions.h:185
@ Random
Definition InstrumentFunctions.h:186
TempoSyncKnobModel m_arpTimeModel
Definition InstrumentFunctions.h:219
FloatModel m_arpGateModel
Definition InstrumentFunctions.h:220
FloatModel m_arpSkipModel
Definition InstrumentFunctions.h:217
friend class InstrumentTrack
Definition InstrumentFunctions.h:225
ComboBoxModel m_arpModeModel
Definition InstrumentFunctions.h:222
QString nodeName() const override
Definition InstrumentFunctions.h:198
FloatModel m_arpRepeatsModel
Definition InstrumentFunctions.h:215
void saveSettings(QDomDocument &_doc, QDomElement &_parent) override
Definition InstrumentFunctions.cpp:525
void loadSettings(const QDomElement &_this) override
Definition InstrumentFunctions.cpp:543
FloatModel m_arpRangeModel
Definition InstrumentFunctions.h:214
ComboBoxModel m_arpDirectionModel
Definition InstrumentFunctions.h:221
InstrumentFunctionArpeggio(Model *_parent)
Definition InstrumentFunctions.cpp:302
FloatModel m_arpMissModel
Definition InstrumentFunctions.h:218
BoolModel m_arpEnabledModel
Definition InstrumentFunctions.h:212
ArpMode
Definition InstrumentFunctions.h:206
@ Sort
Definition InstrumentFunctions.h:208
@ Free
Definition InstrumentFunctions.h:207
@ Sync
Definition InstrumentFunctions.h:209
std::array< int8_t, MAX_CHORD_POLYPHONY > ChordSemiTones
Definition InstrumentFunctions.h:59
InstrumentFunctionNoteStacking(Model *_parent)
Definition InstrumentFunctions.cpp:211
QString nodeName() const override
Definition InstrumentFunctions.h:71
FloatModel m_chordRangeModel
Definition InstrumentFunctions.h:166
BoolModel m_chordsEnabledModel
Definition InstrumentFunctions.h:164
static const int NUM_CHORD_TABLES
Definition InstrumentFunctions.h:56
void processNote(NotePlayHandle *n)
Definition InstrumentFunctions.cpp:231
void loadSettings(const QDomElement &_this) override
Definition InstrumentFunctions.cpp:289
void saveSettings(QDomDocument &_doc, QDomElement &_parent) override
Definition InstrumentFunctions.cpp:279
ComboBoxModel m_chordsModel
Definition InstrumentFunctions.h:165
static const int MAX_CHORD_POLYPHONY
Definition InstrumentFunctions.h:55
~InstrumentFunctionNoteStacking() override=default
Definition InstrumentTrack.h:62
JournallingObject()
Definition JournallingObject.cpp:36
Definition Model.h:37
Model(Model *parent, QString displayName=QString(), bool defaultConstructed=false)
Definition Model.cpp:30
Definition NotePlayHandle.h:48
Definition TempoSyncKnobModel.h:45
Definition InstrumentFunctionViews.h:72
Definition InstrumentFunctionViews.h:49
static const char * name
Definition pugl.h:1582
signed char int8_t
Definition mid.cpp:95
Definition AudioPortAudio.cpp:223
Definition AudioAlsa.cpp:35
Definition InstrumentFunctions.h:78
QString m_name
Definition InstrumentFunctions.h:80
const QString & getName() const
Definition InstrumentFunctions.h:111
int8_t operator[](int n) const
Definition InstrumentFunctions.h:116
ChordSemiTones m_semiTones
Definition InstrumentFunctions.h:81
bool isEmpty() const
Definition InstrumentFunctions.h:99
bool isScale() const
Definition InstrumentFunctions.h:94
int8_t last() const
Definition InstrumentFunctions.h:106
bool hasSemiTone(int8_t semiTone) const
Definition InstrumentFunctions.cpp:168
int m_size
Definition InstrumentFunctions.h:82
int size() const
Definition InstrumentFunctions.h:89
Chord()
Definition InstrumentFunctions.h:85
Definition InstrumentFunctions.h:129
const char * m_name
Definition InstrumentFunctions.h:130
ChordSemiTones m_semiTones
Definition InstrumentFunctions.h:131
const Chord & getByName(const QString &name, bool is_scale=false) const
Definition InstrumentFunctions.cpp:194
std::vector< Chord > m_chords
Definition InstrumentFunctions.h:135
const Chord & getChordByName(const QString &name) const
Definition InstrumentFunctions.h:151
static const ChordTable & getInstance()
Definition InstrumentFunctions.h:138
static std::array< Init, NUM_CHORD_TABLES > s_initTable
Definition InstrumentFunctions.h:134
ChordTable()
Definition InstrumentFunctions.cpp:183
const Chord & getScaleByName(const QString &name) const
Definition InstrumentFunctions.h:146
const std::vector< Chord > & chords() const
Definition InstrumentFunctions.h:156
int n
Definition crypt.c:458