Skip to content

Commit 35e5b6e

Browse files
authored
Merge pull request #48 from mxmxmx/v1.3-beta
[OC] bump to beta3
2 parents 0f4e41d + 77ad3af commit 35e5b6e

36 files changed

+1085
-895
lines changed

software/o_c_REV/APP_ASR.ino

+16-60
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,6 @@ enum ASRSettings {
5959
ASR_SETTING_MULT,
6060
ASR_SETTING_DELAY,
6161
ASR_SETTING_BUFFER_LENGTH,
62-
#ifdef BUCHLA_SUPPORT
63-
ASR_SETTING_VOLTAGE_SCALING_A,
64-
ASR_SETTING_VOLTAGE_SCALING_B,
65-
ASR_SETTING_VOLTAGE_SCALING_C,
66-
ASR_SETTING_VOLTAGE_SCALING_D,
67-
#endif
6862
ASR_SETTING_CV_SOURCE,
6963
ASR_SETTING_CV4_DESTINATION,
7064
ASR_SETTING_TURING_LENGTH,
@@ -275,31 +269,6 @@ public:
275269
return int_seq_.get_n();
276270
}
277271

278-
#ifdef BUCHLA_SUPPORT
279-
uint8_t get_voltage_scaling(int channel_i) const {
280-
uint8_t value = 0;
281-
switch(channel_i) {
282-
case 3:
283-
value = values_[ASR_SETTING_VOLTAGE_SCALING_D];
284-
break;
285-
case 2:
286-
value = values_[ASR_SETTING_VOLTAGE_SCALING_C];
287-
break;
288-
case 1:
289-
value = values_[ASR_SETTING_VOLTAGE_SCALING_B];
290-
break;
291-
default:
292-
value = values_[ASR_SETTING_VOLTAGE_SCALING_A];
293-
break;
294-
}
295-
return value;
296-
}
297-
#else
298-
uint8_t get_voltage_scaling(int channel_i) const {
299-
return 0;
300-
}
301-
#endif
302-
303272
void toggle_delay_mechanics() {
304273
delay_type_ = (~delay_type_) & 1u;
305274
}
@@ -439,13 +408,6 @@ public:
439408
break;
440409
}
441410

442-
#ifdef BUCHLA_SUPPORT
443-
*settings++ = ASR_SETTING_VOLTAGE_SCALING_A;
444-
*settings++ = ASR_SETTING_VOLTAGE_SCALING_B;
445-
*settings++ = ASR_SETTING_VOLTAGE_SCALING_C;
446-
*settings++ = ASR_SETTING_VOLTAGE_SCALING_D;
447-
#endif
448-
449411
num_enabled_settings_ = settings - enabled_settings_;
450412
}
451413

@@ -491,7 +453,7 @@ public:
491453

492454
update = trigger_delay_.triggered();
493455

494-
if (update) {
456+
if (update) {
495457

496458
bool _freeze_switch, _freeze = digitalReadFast(TR2);
497459
int8_t _root = get_root();
@@ -505,7 +467,7 @@ public:
505467
bool forced_update = force_update_;
506468
force_update_ = false;
507469
update_scale(forced_update, (OC::ADC::value<ADC_CHANNEL_3>() + 127) >> 8);
508-
470+
509471
// cv4 destination, defaults to octave:
510472
switch(get_cv4_destination()) {
511473

@@ -635,17 +597,17 @@ public:
635597
_int_seq_index += ((_pitch + 255) >> 9);
636598
CONSTRAIN(_int_seq_index, 0, 8);
637599
break;
638-
case 2: // sequence start point, 0-254
639-
_int_seq_start += ((_pitch + 7) >> 4);
640-
CONSTRAIN(_int_seq_start, 0, 254);
600+
case 2: // sequence start point, 0 to kIntSeqLen - 2
601+
_int_seq_start += ((_pitch + 15) >> 5);
602+
CONSTRAIN(_int_seq_start, 0, kIntSeqLen - 2);
641603
break;
642-
case 3: // sequence loop length, 1-255
643-
_int_seq_length += ((_pitch + 7) >> 4);
644-
CONSTRAIN(_int_seq_length, 1, 255);
604+
case 3: // sequence loop length, 1 to kIntSeqLen - 1
605+
_int_seq_length += ((_pitch + 15) >> 5);
606+
CONSTRAIN(_int_seq_length, 1, kIntSeqLen - 1);
645607
break;
646-
case 4: // fractal sequence stride length, 1-255
647-
_fractal_seq_stride += ((_pitch + 7) >> 4);
648-
CONSTRAIN(_fractal_seq_stride, 1, 255);
608+
case 4: // fractal sequence stride length, 1 to kIntSeqLen - 1
609+
_fractal_seq_stride += ((_pitch + 15) >> 5);
610+
CONSTRAIN(_fractal_seq_stride, 1, kIntSeqLen - 1);
649611
break;
650612
case 5: // fractal sequence modulus
651613
_int_seq_modulus += ((_pitch + 15) >> 5);
@@ -716,7 +678,7 @@ public:
716678
}
717679

718680
_sample = quantizer_.Process(_sample, _root << 7, _transpose);
719-
_sample = OC::DAC::pitch_to_scaled_voltage_dac(static_cast<DAC_CHANNEL>(i), _sample, _octave, get_voltage_scaling(i));
681+
_sample = OC::DAC::pitch_to_scaled_voltage_dac(static_cast<DAC_CHANNEL>(i), _sample, _octave, OC::DAC::get_voltage_scaling(i));
720682
scrolling_history_[i].Push(_sample);
721683
_asr_buffer[i] = _sample;
722684
}
@@ -797,12 +759,6 @@ SETTINGS_DECLARE(ASR, ASR_SETTING_LAST) {
797759
{ MULT_ONE, 0, NUM_INPUT_SCALING - 1, "input gain", mult, settings::STORAGE_TYPE_U8 },
798760
{ 0, 0, OC::kNumDelayTimes - 1, "trigger delay", OC::Strings::trigger_delay_times, settings::STORAGE_TYPE_U8 },
799761
{ 4, 4, ASR_HOLD_BUF_SIZE - 1, "hold (buflen)", NULL, settings::STORAGE_TYPE_U8 },
800-
#ifdef BUCHLA_SUPPORT
801-
{ 0, 0, 7, "Ch A V/oct", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
802-
{ 0, 0, 7, "Ch B V/oct", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
803-
{ 0, 0, 7, "Ch C V/oct", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
804-
{ 0, 0, 7, "Ch D V/oct", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
805-
#endif
806762
{ 0, 0, ASR_CHANNEL_SOURCE_LAST -1, "CV source", asr_input_sources, settings::STORAGE_TYPE_U4 },
807763
{ 0, 0, ASR_DEST_LAST - 1, "CV4 dest. ->", asr_cv4_destinations, settings::STORAGE_TYPE_U4 },
808764
{ 16, 1, 32, "> LFSR length", NULL, settings::STORAGE_TYPE_U8 },
@@ -815,10 +771,10 @@ SETTINGS_DECLARE(ASR, ASR_SETTING_LAST) {
815771
{ 0, 0, 4, "> BB CV1", bb_CV_destinations, settings::STORAGE_TYPE_U4 },
816772
{ 0, 0, 9, "> IntSeq", OC::Strings::integer_sequence_names, settings::STORAGE_TYPE_U4 },
817773
{ 24, 2, 121, "> IntSeq modul", NULL, settings::STORAGE_TYPE_U8 },
818-
{ 0, 0, 254, "> IntSeq start", NULL, settings::STORAGE_TYPE_U8 },
819-
{ 8, 2, 256, "> IntSeq len", NULL, settings::STORAGE_TYPE_U8 },
774+
{ 0, 0, kIntSeqLen - 2, "> IntSeq start", NULL, settings::STORAGE_TYPE_U8 },
775+
{ 8, 2, kIntSeqLen, "> IntSeq len", NULL, settings::STORAGE_TYPE_U8 },
820776
{ 1, 0, 1, "> IntSeq dir", OC::Strings::integer_sequence_dirs, settings::STORAGE_TYPE_U4 },
821-
{ 1, 1, 255, "> Fract stride", NULL, settings::STORAGE_TYPE_U8 },
777+
{ 1, 1, kIntSeqLen - 1, "> Fract stride", NULL, settings::STORAGE_TYPE_U8 },
822778
{ 0, 0, 5, "> IntSeq CV1", int_seq_CV_destinations, settings::STORAGE_TYPE_U4 }
823779
};
824780

@@ -829,7 +785,7 @@ public:
829785

830786
void Init() {
831787
cursor.Init(ASR_SETTING_SCALE, ASR_SETTING_LAST - 1);
832-
scale_editor.Init();
788+
scale_editor.Init(false);
833789
left_encoder_value = OC::Scales::SCALE_SEMI;
834790
}
835791

software/o_c_REV/APP_AUTOMATONNETZ.ino

+32-31
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,9 @@ enum GridSettings {
157157
GRID_SETTING_DY,
158158
GRID_SETTING_MODE,
159159
GRID_SETTING_OCTAVE,
160+
GRID_SETTING_TRIGGER_DELAY,
160161
GRID_SETTING_OUTPUTMODE,
161162
GRID_SETTING_CLEARMODE,
162-
GRID_SETTING_VOLTAGE_SCALING_A,
163-
GRID_SETTING_VOLTAGE_SCALING_B,
164-
GRID_SETTING_VOLTAGE_SCALING_C,
165-
GRID_SETTING_VOLTAGE_SCALING_D,
166163
GRID_SETTING_LAST
167164
};
168165

@@ -198,6 +195,9 @@ public:
198195
quantizer.Init();
199196
tonnetz_state.init();
200197

198+
trigger_delay_.Init();
199+
delayed_triggers_ = 0;
200+
201201
memset(&ui, 0, sizeof(ui));
202202
ui.cell_cursor.Init(CELL_SETTING_TRANSFORM, CELL_SETTING_LAST - 1);
203203
ui.grid_cursor.Init(GRID_SETTING_DX, GRID_SETTING_LAST - 1);
@@ -250,6 +250,10 @@ public:
250250
return values_[GRID_SETTING_OCTAVE];
251251
}
252252

253+
uint16_t get_trigger_delay() const {
254+
return values_[GRID_SETTING_TRIGGER_DELAY];
255+
}
256+
253257
EOutputAMode output_mode() const {
254258
return static_cast<EOutputAMode>(values_[GRID_SETTING_OUTPUTMODE]);
255259
}
@@ -258,18 +262,12 @@ public:
258262
return static_cast<ClearMode>(values_[GRID_SETTING_CLEARMODE]);
259263
}
260264

261-
uint8_t get_voltage_scaling_a() const {
262-
return values_[GRID_SETTING_VOLTAGE_SCALING_A];
265+
void set_delayed_triggers(uint32_t delayed_triggers) {
266+
delayed_triggers_ = delayed_triggers;
263267
}
264268

265-
uint8_t get_voltage_scaling_b() const {
266-
return values_[GRID_SETTING_VOLTAGE_SCALING_B];
267-
}
268-
uint8_t get_voltage_scaling_c() const {
269-
return values_[GRID_SETTING_VOLTAGE_SCALING_C];
270-
}
271-
uint8_t get_voltage_scaling_d() const {
272-
return values_[GRID_SETTING_VOLTAGE_SCALING_D];
269+
uint32_t get_delayed_triggers() {
270+
return(delayed_triggers_);
273271
}
274272

275273
// End of settings
@@ -314,6 +312,9 @@ private:
314312
int cell_transpose_, cell_inversion_;
315313
uint32_t history_;
316314

315+
util::TriggerDelay<OC::kMaxTriggerDelayTicks> trigger_delay_;
316+
uint32_t delayed_triggers_;
317+
317318
util::RingBuffer<uint32_t, 4> user_actions_;
318319
util::CriticalSection critical_section_;
319320

@@ -341,19 +342,9 @@ SETTINGS_DECLARE(AutomatonnetzState, GRID_SETTING_LAST) {
341342
{4, 0, 8*GRID_DIMENSION - 1, "dy", NULL, settings::STORAGE_TYPE_I8},
342343
{MODE_MAJOR, 0, MODE_LAST-1, "Mode", mode_names, settings::STORAGE_TYPE_U8},
343344
{0, -3, 3, "Oct", NULL, settings::STORAGE_TYPE_I8},
345+
{ 0, 0, OC::kNumDelayTimes - 1, "TrDly", OC::Strings::trigger_delay_times, settings::STORAGE_TYPE_U8 },
344346
{OUTPUTA_MODE_ROOT, OUTPUTA_MODE_ROOT, OUTPUTA_MODE_LAST - 1, "OutA", outputa_mode_names, settings::STORAGE_TYPE_U4},
345347
{CLEAR_MODE_ZERO, CLEAR_MODE_ZERO, CLEAR_MODE_LAST - 1, "Clr", clear_mode_names, settings::STORAGE_TYPE_U4},
346-
#ifdef BUCHLA_SUPPORT
347-
{ 0, 0, 5, "A V/o", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
348-
{ 0, 0, 5, "B V/o", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
349-
{ 0, 0, 5, "C V/o", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
350-
{ 0, 0, 5, "D V/o", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
351-
#else
352-
{ 0, 0, 0, "A V/o", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
353-
{ 0, 0, 0, "B V/o", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
354-
{ 0, 0, 0, "C V/o", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
355-
{ 0, 0, 0, "D V/o", OC::voltage_scalings, settings::STORAGE_TYPE_U4 },
356-
#endif
357348
};
358349

359350
AutomatonnetzState automatonnetz_state;
@@ -374,6 +365,15 @@ void FASTRUN AutomatonnetzState::ISR() {
374365

375366
uint32_t triggers = OC::DigitalInputs::clocked();
376367

368+
trigger_delay_.Update();
369+
if (triggers) {
370+
trigger_delay_.Push(OC::trigger_delay_ticks[get_trigger_delay()]);
371+
set_delayed_triggers(triggers) ;
372+
triggers = 0;
373+
}
374+
if (trigger_delay_.triggered())
375+
triggers = get_delayed_triggers();
376+
377377
bool reset = false;
378378
while (user_actions_.readable()) {
379379
switch (user_actions_.Read()) {
@@ -436,7 +436,8 @@ void FASTRUN AutomatonnetzState::ISR() {
436436
arp_index_ = 0;
437437
}
438438

439-
update_outputs(chord_changed, cell_transpose_, cell_inversion_);
439+
if (triggers & TRIGGER_MASK_GRID)
440+
update_outputs(chord_changed, cell_transpose_, cell_inversion_);
440441
}
441442

442443
void AutomatonnetzState::Reset() {
@@ -463,7 +464,7 @@ void AutomatonnetzState::update_outputs(bool chord_changed, int transpose, int i
463464

464465
switch (output_mode()) {
465466
case OUTPUTA_MODE_ROOT:
466-
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_A>(tonnetz_state.outputs(0), octave(), get_voltage_scaling_a());
467+
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_A>(tonnetz_state.outputs(0), octave(), OC::DAC::get_voltage_scaling(DAC_CHANNEL_A));
467468
break;
468469
case OUTPUTA_MODE_TRIG:
469470
if (chord_changed) {
@@ -473,16 +474,16 @@ void AutomatonnetzState::update_outputs(bool chord_changed, int transpose, int i
473474
break;
474475
case OUTPUTA_MODE_ARP:
475476
case OUTPUTA_MODE_STRUM:
476-
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_A>(tonnetz_state.outputs(arp_index_ + 1), octave(), get_voltage_scaling_a());
477+
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_A>(tonnetz_state.outputs(arp_index_ + 1), octave(), OC::DAC::get_voltage_scaling(DAC_CHANNEL_A));
477478
break;
478479
case OUTPUTA_MODE_LAST:
479480
default:
480481
break;
481482
}
482483

483-
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_B>(tonnetz_state.outputs(1), octave(), get_voltage_scaling_b());
484-
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_C>(tonnetz_state.outputs(2), octave(), get_voltage_scaling_c());
485-
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_D>(tonnetz_state.outputs(3), octave(), get_voltage_scaling_d());
484+
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_B>(tonnetz_state.outputs(1), octave(), OC::DAC::get_voltage_scaling(DAC_CHANNEL_B));
485+
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_C>(tonnetz_state.outputs(2), octave(), OC::DAC::get_voltage_scaling(DAC_CHANNEL_C));
486+
OC::DAC::set_voltage_scaled_semitone<DAC_CHANNEL_D>(tonnetz_state.outputs(3), octave(), OC::DAC::get_voltage_scaling(DAC_CHANNEL_D));
486487
}
487488

488489
void AutomatonnetzState::update_trigger_out() {

0 commit comments

Comments
 (0)