1 /* B.Harvestr
2  * LV2 Plugin
3  *
4  * Copyright (C) 2018, 2019 by Sven Jähnichen
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3, or (at your option)
9  * any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19  */
20 
21 #ifndef PORTS_HPP_
22 #define PORTS_HPP_
23 
24 enum PortIndex {
25 	// Atom data ports
26 	CONTROL			= 0,	// Time, MIDI, GUI->DSP
27 	NOTIFY			= 1,	// DSP->GUI
28 
29 	// Audio ports
30 	AUDIO_OUT_1		= 2,
31 	AUDIO_OUT_2		= 3,
32 
33 	CONTROLLERS		= 4,
34 	// Global plugin definitions
35 	MAX_VOICES		= 0,
36 	MAX_GRAINS_PER_VOICE	= 1,
37 
38 	// Sample properies
39 	SAMPLE_START		= 2,
40 	SAMPLE_END		= 3,
41 	SAMPLE_FREQ		= 4,
42 
43 	// Motion pattern properties
44 	PATTERN_SIZE		= 5,
45 	PATTERN_TYPE		= 6,
46 
47 	// Grain properites
48 	PROPERTIES		= 7,
49 	PROPERTY_VALUE_START	= 0,
50 	PROPERTY_VALUE_END	= 1,
51 	PROPERTY_MODULATORS	= 2,
52 	NR_PROPERTY_MODULATORS	= 4,
53 	PROPERTIES_SIZE		= PROPERTY_MODULATORS + NR_PROPERTY_MODULATORS,
54 
55 	GRAIN_SIZE		= 0,
56 	GRAIN_RATE		= 1,
57 	GRAIN_PHASE		= 2,
58 	GRAIN_DRIVE		= 3,
59 	GRAIN_LEVEL		= 4,
60 	GRAIN_PAN		= 5,
61 	GRAIN_TUNE		= 6,
62 	GRAIN_FINE		= 7,
63 	NR_GRAIN_PROPERTIES	= 8,
64 
65 	// Shapes
66 	GRAIN_SHAPE		= PROPERTIES + NR_GRAIN_PROPERTIES * PROPERTIES_SIZE,
67 
68 	// LFOs
69 	LFOS			= GRAIN_SHAPE + 1,
70 	LFO_TYPE		= 0,
71 	LFO_FREQ		= 1,
72 	LFO_PHASE		= 2,
73 	LFO_AMP			= 3,
74 	LFO_SIZE		= 4,
75 	NR_LFOS			= 4,
76 
77 	// Sequencers
78 	SEQS			= LFOS + LFO_SIZE * NR_LFOS,
79 	SEQ_CHS			= 0,
80 	SEQ_FREQ		= 1,
81 	SEQ_PHASE		= 2,
82 	SEQ_STEPS		= 3,
83 	NR_SEQ_STEPS		= 16,
84 	SEQ_SIZE		= SEQ_STEPS + NR_SEQ_STEPS,
85 	NR_SEQS			= 4,
86 
87 	// Random engines
88 	RNDS			= SEQS + SEQ_SIZE * NR_SEQS,
89 	RND_MIN			= 0,
90 	RND_MAX			= 1,
91 	RND_SIZE		= 2,
92 	NR_RNDS			= 4,
93 
94 	// Envelopes
95 	ENVS			= RNDS + RND_SIZE * NR_RNDS,
96 	ENV_ATTACK		= 0,
97 	ENV_DECAY		= 1,
98 	ENV_SUSTAIN		= 2,
99 	ENV_RELEASE		= 3,
100 	ENV_SIZE		= 4,
101 	NR_ENVS			= 4,
102 
103 	// Synth
104 	SYNTH			= ENVS + ENV_SIZE * NR_ENVS,
105 	SYNTH_LEVEL		= 0,
106 	NR_SYNTH_PROPERTIES	= 1,
107 
108 	MAXCONTROLLERS		= SYNTH + NR_SYNTH_PROPERTIES * PROPERTIES_SIZE
109 };
110 
111 enum ShapeIndex
112 {
113 	SINE_SHAPE		= 0,
114 	HALF_SINE_SHAPE		= 1,
115 	TRIANGLE_SHAPE		= 2,
116 	TRAPEZ_SHAPE		= 3,
117 	USER_SHAPES		= 4,
118 	NR_USER_SHAPES		= 4,
119 };
120 
121 enum PlaybackIndex
122 {
123 	PLAY_SAMPLE	= 0,
124 	PLAY_SELECTION	= 1
125 };
126 
127 enum ModulatorIndex
128 {
129 	MODULATOR_NONE		= 0,
130 	MODULATOR_ENV1		= 1,
131 	MODULATOR_ENV2		= 2,
132 	MODULATOR_ENV3		= 3,
133 	MODULATOR_ENV4		= 4,
134 	MODULATOR_LFO1		= 5,
135 	MODULATOR_LFO2		= 6,
136 	MODULATOR_LFO3		= 7,
137 	MODULATOR_LFO4		= 8,
138 	MODULATOR_SEQ1		= 9,
139 	MODULATOR_SEQ2		= 10,
140 	MODULATOR_SEQ3		= 11,
141 	MODULATOR_SEQ4		= 12,
142 	MODULATOR_RANDOM1	= 13,
143 	MODULATOR_RANDOM2	= 14,
144 	MODULATOR_RANDOM3	= 15,
145 	MODULATOR_RANDOM4	= 16
146 };
147 
148 enum PatchInfoIndex
149 {
150 	PATCH_NAME		= 0,
151 	PATCH_TYPE		= 1,
152 	PATCH_DATE		= 2,
153 	PATCH_CREATOR		= 3,
154 	PATCH_URI		= 4,
155 	PATCH_LICENSE		= 5,
156 	PATCH_DESCRIPTION	= 6,
157 	NR_PATCHES		= 7
158 };
159 
160 #endif /* PORTS_HPP_ */
161