-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmultiple_dynamic_ads.patch
235 lines (217 loc) · 12.8 KB
/
multiple_dynamic_ads.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
diff --git a/src/sid_parameters.cpp b/src/sid_parameters.cpp
index d42c331..aec594e 100644
--- a/src/sid_parameters.cpp
+++ b/src/sid_parameters.cpp
@@ -17,66 +17,49 @@
#include "LinkedList.h"
-// Parameters, ie wrappers around destination object
-LinkedList<DataParameter*> available_parameters = LinkedList<DataParameter*>();
-
-DataParameter param_none = DataParameter("None");
-FrequencyParameter param_overall_pitch = FrequencyParameter<SID6581,double> ("Overall pitch", &sid, 0.0, &SID6581::setAllFrequency);
-Parameter param_overall_pulsewidth_modulation = Parameter<SID6581,double> ("Overall PW Mod", &sid, 0.0, &SID6581::modulateAllPulseWidths);
-Parameter param_overall_pitch_modulation = Parameter<SID6581,double> ("Overall Pitch Mod", &sid, 0.0, &SID6581::modulateAllPitches);
-Parameter param_filter_cutoff = Parameter<SID6581,double> ("Filter cutoff", &sid, 0.0, &SID6581::setCutoff);
-Parameter param_filter_resonance = Parameter<SID6581,double> ("Filter res", &sid, 0.0, &SID6581::setResonanceD);
-
-ToggleParameter param_filter_lowpass = ToggleParameter<SID6581,bool> ("Filter LP", &sid, sid.isFilterTypeLP(), &SID6581::setFilterTypeLP);
-ToggleParameter param_filter_bandpass = ToggleParameter<SID6581,bool> ("Filter BP", &sid, sid.isFilterTypeBP(), &SID6581::setFilterTypeBP);
-ToggleParameter param_filter_highpass = ToggleParameter<SID6581,bool> ("Filter HP", &sid, sid.isFilterTypeHP(), &SID6581::setFilterTypeHP);
-ToggleParameter param_filter_off3 = ToggleParameter<SID6581,bool> ("Filter Off3", &sid, sid.isFilterTypeOff3(), &SID6581::setFilterTypeOff3);
+LinkedList<VoltageSourceBase*> voltage_sources = LinkedList<VoltageSourceBase*> ();
-/*FrequencyParameter param_osc_1_pitch = FrequencyParameter<Voice,double> ("Osc 1 pitch", &sid.voice[0], &Voice::setFrequency);
-FrequencyParameter param_osc_2_pitch = FrequencyParameter<Voice,double> ("Osc 2 pitch", &sid.voice[1], &Voice::setFrequency);
-FrequencyParameter param_osc_3_pitch = FrequencyParameter<Voice,double> ("Osc 3 pitch", &sid.voice[2], &Voice::setFrequency);*/
-/*Parameter param_osc_1_waveforms = Parameter<Voice,double> ("Osc 1 wave", &sid.voice[0], &Voice::setOsc);
-Parameter param_osc_2_waveforms = Parameter<Voice,double> ("Osc 2 wave", &sid.voice[1], &Voice::setOsc);
-Parameter param_osc_3_waveforms = Parameter<Voice,double> ("Osc 3 wave", &sid.voice[2], &Voice::setOsc);*/
+/////// PARAMETER INPUTS & VOLTAGE SOURCES
-LinkedList<VoltageSourceBase*> voltage_sources = LinkedList<VoltageSourceBase*> ();
+//#define ENABLE_ADS_24V
+#define ENABLE_ADS_x48
-#ifdef ADS24V
- #define ADSCLASS ADS1015
- #define MAX_INPUT_VOLTAGE 10.0
- ADSCLASS ADS_OBJECT_1(0x48);
- //ADS1015 ADS_OBJECT_2(0x49);
-#else
- #define ADSCLASS ADS1115
- #define MAX_INPUT_VOLTAGE 5.0
- ADSCLASS ADS_OBJECT_1(0x48);
+#ifdef ENABLE_ADS_24V
+ #define MAX_INPUT_VOLTAGE_24V 10.0
+ ADS1015 ADS_OBJECT_24V(0x49);
+ ADSVoltageSource<ADS1015> voltage_source_1_channel_0 = ADSVoltageSource<ADS1015>(&ADS_OBJECT_24V, 0, MAX_INPUT_VOLTAGE_24V);
+ ADSVoltageSource<ADS1015> voltage_source_1_channel_1 = ADSVoltageSource<ADS1015>(&ADS_OBJECT_24V, 1, MAX_INPUT_VOLTAGE_24V);
+ ADSVoltageSource<ADS1015> voltage_source_1_channel_2 = ADSVoltageSource<ADS1015>(&ADS_OBJECT_24V, 2, MAX_INPUT_VOLTAGE_24V);
#endif
-ADSVoltageSource<ADSCLASS> voltage_source_1_channel_0 = ADSVoltageSource<ADSCLASS>(&ADS_OBJECT_1, 0, MAX_INPUT_VOLTAGE);
-ADSVoltageSource<ADSCLASS> voltage_source_1_channel_1 = ADSVoltageSource<ADSCLASS>(&ADS_OBJECT_1, 1, MAX_INPUT_VOLTAGE);
-ADSVoltageSource<ADSCLASS> voltage_source_1_channel_2 = ADSVoltageSource<ADSCLASS>(&ADS_OBJECT_1, 2, MAX_INPUT_VOLTAGE);
-
-/*ADSVoltageSource<ADS1015> source_2_channel_0 = ADSVoltageSource<ADS1015>(&ADS_OBJECT_2, 0);
-ADSVoltageSource<ADS1015> source_2_channel_1 = ADSVoltageSource<ADS1015>(&ADS_OBJECT_2, 1);
-ADSVoltageSource<ADS1015> source_2_channel_2 = ADSVoltageSource<ADS1015>(&ADS_OBJECT_2, 2);*/
+#ifdef ENABLE_ADS_x48
+ #define MAX_INPUT_VOLTAGE_x48 5.0
+ ADS1115 ADS_OBJECT_x48(0x48);
+ ADSVoltageSource<ADS1115> voltage_source_2_channel_0 = ADSVoltageSource<ADS1115>(&ADS_OBJECT_x48, 0, MAX_INPUT_VOLTAGE_x48);
+ ADSVoltageSource<ADS1115> voltage_source_2_channel_1 = ADSVoltageSource<ADS1115>(&ADS_OBJECT_x48, 1, MAX_INPUT_VOLTAGE_x48);
+ ADSVoltageSource<ADS1115> voltage_source_2_channel_2 = ADSVoltageSource<ADS1115>(&ADS_OBJECT_x48, 2, MAX_INPUT_VOLTAGE_x48);
+ ADSVoltageSource<ADS1115> voltage_source_2_channel_3 = ADSVoltageSource<ADS1115>(&ADS_OBJECT_x48, 3, MAX_INPUT_VOLTAGE_x48);
+#endif
void setup_voltage_sources() {
- ADS_OBJECT_1.begin();
- #ifdef ADS24V
- ADS_OBJECT_1.setGain(2);
- #else
- ADS_OBJECT_1.setGain(0);
+ #ifdef ENABLE_ADS_x48
+ ADS_OBJECT_x48.begin();
+ ADS_OBJECT_x48.setGain(0);
+ voltage_sources.add(&voltage_source_2_channel_0);
+ voltage_sources.add(&voltage_source_2_channel_1);
+ voltage_sources.add(&voltage_source_2_channel_2);
+ voltage_sources.add(&voltage_source_2_channel_3);
+ #endif
+
+ #ifdef ENABLE_ADS_24V
+ ADS_OBJECT_24V.begin();
+ ADS_OBJECT_24V.setGain(2);
+ voltage_sources.add(&voltage_source_1_channel_0);
+ voltage_sources.add(&voltage_source_1_channel_1);
+ voltage_sources.add(&voltage_source_1_channel_2);
#endif
-
- voltage_sources.add(&voltage_source_1_channel_0);
- voltage_sources.add(&voltage_source_1_channel_1);
- voltage_sources.add(&voltage_source_1_channel_2);
-
- /*voltage_sources.add(&source_2_channel_0);
- voltage_sources.add(&source_2_channel_1);
- voltage_sources.add(&source_2_channel_2);*/
}
void update_voltage_sources() {
@@ -85,6 +68,26 @@ void update_voltage_sources() {
}
}
+// ParameterInputs, ie wrappers around input mechanism, assignable to a Parameter
+LinkedList<BaseParameterInput*> available_inputs = LinkedList<BaseParameterInput*>();
+
+
+// Parameters, ie wrappers around destination object
+LinkedList<DataParameter*> available_parameters = LinkedList<DataParameter*>();
+
+DataParameter param_none = DataParameter("None");
+FrequencyParameter param_overall_pitch = FrequencyParameter<SID6581,double> ("Overall pitch", &sid, 0.0, &SID6581::setAllFrequency);
+Parameter param_overall_pulsewidth_modulation = Parameter<SID6581,double> ("Overall PW Mod", &sid, 0.0, &SID6581::modulateAllPulseWidths);
+Parameter param_overall_pitch_modulation = Parameter<SID6581,double> ("Overall Pitch Mod", &sid, 0.0, &SID6581::modulateAllPitches);
+
+Parameter param_filter_cutoff = Parameter<SID6581,double> ("Filter cutoff", &sid, 0.0, &SID6581::setCutoff);
+Parameter param_filter_resonance = Parameter<SID6581,double> ("Filter res", &sid, 0.0, &SID6581::setResonanceD);
+
+ToggleParameter param_filter_lowpass = ToggleParameter<SID6581,bool> ("Filter LP", &sid, sid.isFilterTypeLP(), &SID6581::setFilterTypeLP);
+ToggleParameter param_filter_bandpass = ToggleParameter<SID6581,bool> ("Filter BP", &sid, sid.isFilterTypeBP(), &SID6581::setFilterTypeBP);
+ToggleParameter param_filter_highpass = ToggleParameter<SID6581,bool> ("Filter HP", &sid, sid.isFilterTypeHP(), &SID6581::setFilterTypeHP);
+ToggleParameter param_filter_off3 = ToggleParameter<SID6581,bool> ("Filter Off3", &sid, sid.isFilterTypeOff3(), &SID6581::setFilterTypeOff3);
+
void add_voice_parameters(LinkedList<DataParameter*> *available_parameters, int voice_number) {
char label[40] = " ";
Voice *voice = &sid.voice[voice_number];
@@ -135,25 +138,11 @@ void add_voice_parameters(LinkedList<DataParameter*> *available_parameters, int
available_parameters->add(param2);
}
-// ParameterInputs, ie wrappers around input mechanism, assignable to a Parameter
-LinkedList<BaseParameterInput*> available_inputs = LinkedList<BaseParameterInput*>();
-
-VoltageParameterInput<BaseParameter> input_A = VoltageParameterInput<BaseParameter>('A', &voltage_source_1_channel_0);
-VoltageParameterInput<BaseParameter> input_B = VoltageParameterInput<BaseParameter>('B', &voltage_source_1_channel_0);
-VoltageParameterInput<BaseParameter> input_C = VoltageParameterInput<BaseParameter>('C', &voltage_source_1_channel_1);
-VoltageParameterInput<BaseParameter> input_D = VoltageParameterInput<BaseParameter>('D', &voltage_source_1_channel_1);
-VoltageParameterInput<BaseParameter> input_E = VoltageParameterInput<BaseParameter>('E', &voltage_source_1_channel_2);
-VoltageParameterInput<BaseParameter> input_F = VoltageParameterInput<BaseParameter>('F', &voltage_source_1_channel_2);
-
-// menu item for direct control over a Parameter via menu
-//ParameterMenuItem PulseWidthModulationPanel("Pulse width mod", ¶m_overall_pulsewidth_modulation);
-
void setup_parameters() {
+ // add the available parameters to a list used globally and later passed to each selector menuitem
Serial.println(F("==== begin setup_parameters ===="));
- //input_A.setTarget(¶m_overall_pitch);
- //input_B.setTarget(¶m_overall_pulsewidth_modulation);
-
- // add the available parameters to a list used globally and later passed to each selector menuitem
+
+ // global sid parameters
available_parameters.add(¶m_none);
available_parameters.add(¶m_overall_pitch);
available_parameters.add(¶m_overall_pitch_modulation);
@@ -166,20 +155,7 @@ void setup_parameters() {
available_parameters.add(¶m_filter_highpass);
available_parameters.add(¶m_filter_off3);
- /*available_parameters.add(¶m_osc_1_pitch);
- available_parameters.add(¶m_osc_2_pitch);
- available_parameters.add(¶m_osc_3_pitch);*/
-
- /*available_parameters.add(¶m_osc_1_waveforms);
- available_parameters.add(¶m_osc_2_waveforms);
- available_parameters.add(¶m_osc_3_waveforms);*/
-
- /*available_parameters.add(¶m_osc_1_triangle);
- available_parameters.add(¶m_osc_1_saw);
- available_parameters.add(¶m_osc_1_pulse);*/
-
- //param_overall_pitch.debug = true;
-
+ // add the parameters for each voice
available_parameters.add(
new ToggleParameter<SID6581,bool>("Osc 1 Filt", &sid, sid.isFilterVoice0On(), &SID6581::changeFilterVoice0)
);
@@ -195,28 +171,27 @@ void setup_parameters() {
);
add_voice_parameters(&available_parameters, 2);
- input_D.setInverted();
- //input_H.setInverted();
-
- input_D.map_unipolar = true;
-
- available_inputs.add(&input_A);
- available_inputs.add(&input_B);
- available_inputs.add(&input_C);
- available_inputs.add(&input_D);
- available_inputs.add(&input_E);
- available_inputs.add(&input_F);
- //available_inputs.add(&input_G);
- //available_inputs.add(&input_H);
+ // Dynamically create ParameterInputs based on the voltage_sources array
+ char name = 'A';
+ Serial.println("About to dynamically create ParameterInputs...");
+ for (int i = 0 ; i < voltage_sources.size() ; i++) {
+ Serial.printf("\tDynamically creating input %c...\n", name); Serial.flush();
+ VoltageParameterInput<BaseParameter> *vpi = new VoltageParameterInput<BaseParameter>(name, voltage_sources.get(i));
+ Serial.println("\tInstantiated, adding to available_inputs!");
+ available_inputs.add(vpi);
+ name++;
+
+ /*vpi = new VoltageParameterInput<BaseParameter>(name, voltage_sources.get(i));
+ vpi->setInverted();
+ available_inputs.add(vpi);
+ name++;*/
+ }
Serial.println("==== end setup_parameters ====");
}
// called every loop to update the inputs; maybe in future we also eventually want to process internal LFOs or other properties of parameter here
void update_parameters() {
- //Serial.println("update_parameters..");
- //input_A.loop();
- //input_B.loop();
for (int i = 0 ; i < available_inputs.size() ; i++) {
available_inputs.get(i)->loop();
//parameter_inputs[i]->loop();
@@ -243,7 +218,7 @@ void setup_parameter_menu() {
Serial.printf("%i: Creating control labelled '%s'...\n", i, input_label);
ParameterSelectorControl *ctrl = new ParameterSelectorControl(input_label);
- Serial.printf("%i:\tConfiguring it with available_inputs item target '%s'..\n", i, param->label);
+ Serial.printf("\tConfiguring it with available_inputs item target '%s'..\n", i, param->label);
//BaseParameterInput *param_input = available_inputs.get(i);
ctrl->configure(param_input, &available_parameters);