From 3a8df50af8cd1778b549fcbf734299055f75d99a Mon Sep 17 00:00:00 2001 From: eh2k Date: Sun, 5 Jan 2025 12:57:06 +0100 Subject: [PATCH] devsync 1b0b8eb --- CHANGELOG.txt | 222 +++++++++++++++++++++++++++++++++++++++++++ README.md | 221 +----------------------------------------- app/SYNTH/plaits.bin | Bin 118820 -> 118884 bytes app/SYNTH/plaits.cpp | 21 ++-- platformio.ini | 2 +- 5 files changed, 235 insertions(+), 231 deletions(-) create mode 100644 CHANGELOG.txt diff --git a/CHANGELOG.txt b/CHANGELOG.txt new file mode 100644 index 0000000..8b13ec8 --- /dev/null +++ b/CHANGELOG.txt @@ -0,0 +1,222 @@ +# CHANGELOG + +All notable changes to this project will be documented in this file. + +== 2025-0-05 + * Bugfix + * Plaits drums - pitch parameter no effect + * IO-config - accent input was set eq trigger input +== 2025-01-04 + * Bugfix/Enhancements + * M-OSC/Waveforms: + - Transpose fix: -1 OCT + - Braids Renaissance Chords + - SEMI quantizer - global plaits chords + - Value paramter (chord offsets) #121 + * M-OSC/Waveforms, M-OSC/Chords, SEQ/EuclidyArp + * Parameter texts, case insensitive chord-naming eg. m7->min7, M7 -> Maj7 + * V_OCT Paramter (modulation visualition timer fix) + * Quantizer edge case optimization + * CV/V_OCT: + - shows internal value for debugging/quantizer monitoring +== 2024-12-28 + * Bugfix + * M-OSC/Waveforms: Braids Renaissance Chords - fixed root offset #117 +== 2024-12-23 + * Bugifx + * Crash / parameter modulations wrap around #120 +== 2024-12-22 + * Bugfix + * SEQ/TuringMachine crash #119 + * M-OSC/Waveforms: Braids Renaissance Chords - fixed note offsets #117 + * Enhancements + * DrumSynth ... +== 2024-12-17 + * Bugfix/Enchancement #117 + * Parameter value was not visualized when modulations set (Bug since 2024-12-16) + * Midi pitch was added before quantizer + * V_OCT parameter value was added before quantized + * All modulations exept RND and TM are now added after quantizer +== 2024-12-16 + * New paramters io-page + * Quantizer-Root + * Transpose-Finetune + * Bugfix/Enchancement + * tanspose offset was quantized +== 2024-12-14 + * Bugfix/Enchancement + * SEQ triggered & trig-input triggered engines were not in sync + * V_OCT/Scale parameter, semitones from active quantizer (#117) + * Claps less RAM usage +== 2024-12-07 + * Bugfix: + * EnvFollower - IO-page AUX input + * Enhancements: + * EnvFollower - mode Follower, Vactrol (based on MU Streams) +== 2024-11-30 + * Bugfix: + * Crash on patch saving/restoring (#97) + * Enhancements: + * M-OSC/Waveforms: Braids Renaissance Chords (#110) + * SEQ/TuringMachine - OutputModes: Note-3...Note-7 (#109) + * Internal signal routing: src: $1-$9 (#108) +== 2024-11-07 + * Bugfix: + * M-OSC/Waveforms - V_OCT modulation + * SEQ/EuclidArp - Screensaver circle offset + * Crash on patch saving/restoring (#97 ?!) + * New Engines: + * SEQ/TuringMachine +== 2024-11-04 + * Bugfix + * 808ish-BD Crash #103 + * Enhancements: + * Crashreport fix (listing engine ids added) + * SEQ/EuclidArp + - fixed recalc pattern on slide > 1 + - gate timing (using samples_per_step) + * New APIs + - clock::samples_per_step + - engine::setPatchStateEx + - engine::stepReset +== 2024-11-02 + * Enhancement: + * SEQ/EuclidArp + - fixed: note order (starting with root note) + - quantized output + - slide modes: OFF, ON, RND25, RND50, RND75 + * Mod/TM + - reset #100 + - shift_reg & seed - added to patch state + * GND/Scope + - x-scale added #73 +== 2024-10-29 + * Enhancement: + * TR707 - dynamic level/pan params in io-page/mixer section #29 + * Bugfix: + * setPixel missing (scope app not working) +== 2024-10-28 + * Enhancement: + * Mod/SEQ - 4-step sequencer modulation #91 + * Multitrigs (TR707 etc) #29 + * TR707 - midi mapping (GM Standard Drum Map) #29 + * Mod/LFO - New paramter: Waveform #89 + * CV/LFO - New paramter: Scale, Offset, Waveform #89 + * IO-PAGE - Listing of modulation trig/cv inputs + * Bugfix: + * M-OSC/Waveforms - display correct waveform instead of "shape" + * out of memory handling / memory fragmentation - no new/delete usings in open303 + * crash-reporting improvment + * Sporadic midi stops working while update with webflasher + * Modulation/LFO Shape ist not saved in the patch storage (is set to sine, after restore) #98 + * New Engines: + * SEQ/EuclidRythm + * SEQ/EuclidArp + * DSM: + * One-Engine-Mode +== 2025-07-02 + * Bugfix: DSM0 "CRC32:0x63F R:1" +== 2024-06-15 + * Enhancement: + * T1 Clock - resets to begin after 200milis silence + * internal crc32 checks for debugging + * midi response optimization + * squares-and-circles api + * serial + * fs + * Bugfixes + * out of memory handling - prevent crashing +== 2024-04-19 + * Enhancement: Engine Load "Options" (Reset IO + Copy From) #74 + * SD Format - preserves stored patches +== 2024-04-14 + * Enhancement: Patch storage (managment) + * Bugfix: + * tinyusb buffer/optimization +== 2024-03-28 + * Enhancement: Turing Machine Modulation + * Enhancement: FV1emu (cleanup + 16bit delay optimization) + * Bugfix: Crash on Midi-CC + * Refactoring MIDI-Settings / Clock-Settings + * Enhancement: Midi-Channel moved to IO-Settings + * ***New Analysis Engines: GND/Scope, GND/FFT + * OC_T41 Support +== 2024-02-14 + * Enhancement/Bugfix: No usb midi response while 5sec startup #66 +== 2024-02-12 + * Enhancement/Bugfix: Unique midi device names (support multiple S&C devices for WebMidi #66) +== 2024-02-07 + * Enhancement/Bugfix: DXFM (custom syx handling) + * Enhancement: FV1emu / FX-Compiler (using 16bit delay buffer for less memory consumption) + * Enhancement: UI - one pixel left another up - bigger modulation popup +== 2024-01-23 + * Bugfix: Black screen ?! +== 2024-01-20 + * DevSync: + * Bugfix T4X: CV input > 6 V is received as negative voltage bug + * Bugfix: ClassicVAVCF -> param change Decay/Level + * Enhancement: Modualtion attenuverter resolution 1/2000 + * Enhancement/Bugfix: Modulation ranges.. + * Enhancement: NEw Modulation CV src aka "+" constant voltage + * Enhancement: Visualizing parameter modulations (moving knobs) + * Enhancement: squares-and-circles api + * Enhancement DSM: Support MID Button (ui navigaten - mid botton back function) +== 2024-01-14 + * DevSync: Fix DSM0 audio clipping +== 2023-12-21 + * DevSync: Fix DSM0 Callibration + Voltage engines +== 2023-12-18 + * DevSync: DSM0 ITCM usage + Bugfix DSM0 calibration + * Enhancements/BreakingChanges: + * Dynamic Loader (apps as header includes for now) - Noise, SAM, Faust engines ported +== 2023-12-03 == + * Bugfix: DxFM custom syx didnt work + * DevSync: DSM0 perf+wdt +== 2023-11-19 == + * Refactoring CV-Engines (based on modulations) + - CV-Output Scope-View + * New CV-Engines: + - EnvGen_AD + - EnvFollower + * Bugfix: CV-Engine (fine-tune after quantizer) + * Bugfix: #57 + * Bugfix: plaits engines trigger_patched reset +== 2023-11-04 == + * Bugfix: CV/Voltage modulation +== 2023-10-14 == + * Bugfix: CV/LFO shape selection +== 2023-10-07 == + * Bugfix: + - crash in dac calibration +== 2023-09-24 == + * Enhancements: + - I/O-Page: UI enhancements + - Speech/SAM "random numbers" + - Speech/LPC "AuxMix" Parameter + * Bugfix: + - Speech/LPC word selection + - VOCT semitone = encoder step (skipped increments) +== 2023-09-17 == + * mi-libs sync/upgrade + * new Synth-Engine: + - ClassicVAVCF (Classic waveshapes with filter) + - DxFM_BNK1-3 (using the SixOpEngine default patches) + * Several engines, parameter naming, ranges and defaults optimizations ... + * Optimised behaviour on encoders increments + - Value change is 1/128 per step if the increments don't immediately follow each other + - Short-time display of the value (0-127) + * Bugfix: + - GND engine - crash on encoder rotation +== 2023-09-03 == + * Enhancements, new engines: + * Claps refactoring, drumsynth based on RC808 models + * DxFM enhancement, 2 voice stereo mode + * Waveforms, 2 voice stereo mode + * JU60_chorus, emulation of Juno60 chorus, based on VA BBD + * Noise engines: NES_noise, 808_squares + * Bugfixes + * #52 Modulations & quantizer + * #51 Engine loading - IO config is lost / restored to defaults +== 2023-08-09 == + * Audio routing refactoring + * Optimizations and bugfixes \ No newline at end of file diff --git a/README.md b/README.md index ac92417..de9ceb5 100644 --- a/README.md +++ b/README.md @@ -5,226 +5,7 @@ **squares-and-circles** is an alternate firmware for the Eurorack module O_C, targeting Teensy 4.0. -
- ChangeLog - -```` -== 2025-01-04 - * Bugfix/Enhancements - * M-OSC/Waveforms: - - Transpose fix: -1 OCT - - Braids Renaissance Chords - - SEMI quantizer - global plaits chords - - Value paramter (chord offsets) #121 - * M-OSC/Waveforms, M-OSC/Chords, SEQ/EuclidyArp - * Parameter texts, case insensitive chord-naming eg. m7->min7, M7 -> Maj7 - * V_OCT Paramter (modulation visualition timer fix) - * Quantizer edge case optimization - * CV/V_OCT: - - shows internal value for debugging/quantizer monitoring -== 2024-12-28 - * Bugfix - * M-OSC/Waveforms: Braids Renaissance Chords - fixed root offset #117 -== 2024-12-23 - * Bugifx - * Crash / parameter modulations wrap around #120 -== 2024-12-22 - * Bugfix - * SEQ/TuringMachine crash #119 - * M-OSC/Waveforms: Braids Renaissance Chords - fixed note offsets #117 - * Enhancements - * DrumSynth ... -== 2024-12-17 - * Bugfix/Enchancement #117 - * Parameter value was not visualized when modulations set (Bug since 2024-12-16) - * Midi pitch was added before quantizer - * V_OCT parameter value was added before quantized - * All modulations exept RND and TM are now added after quantizer -== 2024-12-16 - * New paramters io-page - * Quantizer-Root - * Transpose-Finetune - * Bugfix/Enchancement - * tanspose offset was quantized -== 2024-12-14 - * Bugfix/Enchancement - * SEQ triggered & trig-input triggered engines were not in sync - * V_OCT/Scale parameter, semitones from active quantizer (#117) - * Claps less RAM usage -== 2024-12-07 - * Bugfix: - * EnvFollower - IO-page AUX input - * Enhancements: - * EnvFollower - mode Follower, Vactrol (based on MU Streams) -== 2024-11-30 - * Bugfix: - * Crash on patch saving/restoring (#97) - * Enhancements: - * M-OSC/Waveforms: Braids Renaissance Chords (#110) - * SEQ/TuringMachine - OutputModes: Note-3...Note-7 (#109) - * Internal signal routing: src: $1-$9 (#108) -== 2024-11-07 - * Bugfix: - * M-OSC/Waveforms - V_OCT modulation - * SEQ/EuclidArp - Screensaver circle offset - * Crash on patch saving/restoring (#97 ?!) - * New Engines: - * SEQ/TuringMachine -== 2024-11-04 - * Bugfix - * 808ish-BD Crash #103 - * Enhancements: - * Crashreport fix (listing engine ids added) - * SEQ/EuclidArp - - fixed recalc pattern on slide > 1 - - gate timing (using samples_per_step) - * New APIs - - clock::samples_per_step - - engine::setPatchStateEx - - engine::stepReset -== 2024-11-02 - * Enhancement: - * SEQ/EuclidArp - - fixed: note order (starting with root note) - - quantized output - - slide modes: OFF, ON, RND25, RND50, RND75 - * Mod/TM - - reset #100 - - shift_reg & seed - added to patch state - * GND/Scope - - x-scale added #73 -== 2024-10-29 - * Enhancement: - * TR707 - dynamic level/pan params in io-page/mixer section #29 - * Bugfix: - * setPixel missing (scope app not working) -== 2024-10-28 - * Enhancement: - * Mod/SEQ - 4-step sequencer modulation #91 - * Multitrigs (TR707 etc) #29 - * TR707 - midi mapping (GM Standard Drum Map) #29 - * Mod/LFO - New paramter: Waveform #89 - * CV/LFO - New paramter: Scale, Offset, Waveform #89 - * IO-PAGE - Listing of modulation trig/cv inputs - * Bugfix: - * M-OSC/Waveforms - display correct waveform instead of "shape" - * out of memory handling / memory fragmentation - no new/delete usings in open303 - * crash-reporting improvment - * Sporadic midi stops working while update with webflasher - * Modulation/LFO Shape ist not saved in the patch storage (is set to sine, after restore) #98 - * New Engines: - * SEQ/EuclidRythm - * SEQ/EuclidArp - * DSM: - * One-Engine-Mode -== 2025-07-02 - * Bugfix: DSM0 "CRC32:0x63F R:1" -== 2024-06-15 - * Enhancement: - * T1 Clock - resets to begin after 200milis silence - * internal crc32 checks for debugging - * midi response optimization - * squares-and-circles api - * serial - * fs - * Bugfixes - * out of memory handling - prevent crashing -== 2024-04-19 - * Enhancement: Engine Load "Options" (Reset IO + Copy From) #74 - * SD Format - preserves stored patches -== 2024-04-14 - * Enhancement: Patch storage (managment) - * Bugfix: - * tinyusb buffer/optimization -== 2024-03-28 - * Enhancement: Turing Machine Modulation - * Enhancement: FV1emu (cleanup + 16bit delay optimization) - * Bugfix: Crash on Midi-CC - * Refactoring MIDI-Settings / Clock-Settings - * Enhancement: Midi-Channel moved to IO-Settings - * ***New Analysis Engines: GND/Scope, GND/FFT - * OC_T41 Support -== 2024-02-14 - * Enhancement/Bugfix: No usb midi response while 5sec startup #66 -== 2024-02-12 - * Enhancement/Bugfix: Unique midi device names (support multiple S&C devices for WebMidi #66) -== 2024-02-07 - * Enhancement/Bugfix: DXFM (custom syx handling) - * Enhancement: FV1emu / FX-Compiler (using 16bit delay buffer for less memory consumption) - * Enhancement: UI - one pixel left another up - bigger modulation popup -== 2024-01-23 - * Bugfix: Black screen ?! -== 2024-01-20 - * DevSync: - * Bugfix T4X: CV input > 6 V is received as negative voltage bug - * Bugfix: ClassicVAVCF -> param change Decay/Level - * Enhancement: Modualtion attenuverter resolution 1/2000 - * Enhancement/Bugfix: Modulation ranges.. - * Enhancement: NEw Modulation CV src aka "+" constant voltage - * Enhancement: Visualizing parameter modulations (moving knobs) - * Enhancement: squares-and-circles api - * Enhancement DSM: Support MID Button (ui navigaten - mid botton back function) -== 2024-01-14 - * DevSync: Fix DSM0 audio clipping -== 2023-12-21 - * DevSync: Fix DSM0 Callibration + Voltage engines -== 2023-12-18 - * DevSync: DSM0 ITCM usage + Bugfix DSM0 calibration - * Enhancements/BreakingChanges: - * Dynamic Loader (apps as header includes for now) - Noise, SAM, Faust engines ported -== 2023-12-03 == - * Bugfix: DxFM custom syx didnt work - * DevSync: DSM0 perf+wdt -== 2023-11-19 == - * Refactoring CV-Engines (based on modulations) - - CV-Output Scope-View - * New CV-Engines: - - EnvGen_AD - - EnvFollower - * Bugfix: CV-Engine (fine-tune after quantizer) - * Bugfix: #57 - * Bugfix: plaits engines trigger_patched reset -== 2023-11-04 == - * Bugfix: CV/Voltage modulation -== 2023-10-14 == - * Bugfix: CV/LFO shape selection -== 2023-10-07 == - * Bugfix: - - crash in dac calibration -== 2023-09-24 == - * Enhancements: - - I/O-Page: UI enhancements - - Speech/SAM "random numbers" - - Speech/LPC "AuxMix" Parameter - * Bugfix: - - Speech/LPC word selection - - VOCT semitone = encoder step (skipped increments) -== 2023-09-17 == - * mi-libs sync/upgrade - * new Synth-Engine: - - ClassicVAVCF (Classic waveshapes with filter) - - DxFM_BNK1-3 (using the SixOpEngine default patches) - * Several engines, parameter naming, ranges and defaults optimizations ... - * Optimised behaviour on encoders increments - - Value change is 1/128 per step if the increments don't immediately follow each other - - Short-time display of the value (0-127) - * Bugfix: - - GND engine - crash on encoder rotation -== 2023-09-03 == - * Enhancements, new engines: - * Claps refactoring, drumsynth based on RC808 models - * DxFM enhancement, 2 voice stereo mode - * Waveforms, 2 voice stereo mode - * JU60_chorus, emulation of Juno60 chorus, based on VA BBD - * Noise engines: NES_noise, 808_squares - * Bugfixes - * #52 Modulations & quantizer - * #51 Engine loading - IO config is lost / restored to defaults -== 2023-08-09 == - * Audio routing refactoring - * Optimizations and bugfixes -```` -
+> CHANGELOG.txt ## ■ Demos diff --git a/app/SYNTH/plaits.bin b/app/SYNTH/plaits.bin index 2677267450db2e6be55125c31d315e6c5c94941b..161fae9fd4e158264b6744998eb25992e31de5f0 100644 GIT binary patch delta 7192 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 diff --git a/app/SYNTH/plaits.cpp b/app/SYNTH/plaits.cpp index c7c72a1..372cb84 100644 --- a/app/SYNTH/plaits.cpp +++ b/app/SYNTH/plaits.cpp @@ -55,6 +55,7 @@ float bufferOut[FRAME_BUFFER_SIZE]; float bufferAux[FRAME_BUFFER_SIZE]; float out_aux_mix = 0.5f; float _pitch = 0; +float _v_oct = 0; float _base_pitch = DEFAULT_NOTE; struct @@ -168,7 +169,7 @@ void engine::setup() case 0: alloc_engine(); init_params(0.5f, 0.5f, 0.5f, {0.8f, 0.8f, false}); - engine::addParam(V_OCT, &_pitch); + engine::addParam(V_OCT, &_v_oct); engine::addParam("Detune", &harmonics); engine::addParam("Square", &timbre); engine::addParam("CSAW", &morph); @@ -181,7 +182,7 @@ void engine::setup() case 1: alloc_engine(); init_params(0.8f, 0.8f, 0.75f, {0.7f, 0.6f, false}); - engine::addParam(V_OCT, &_pitch); + engine::addParam(V_OCT, &_v_oct); engine::addParam("Waveform", &harmonics); engine::addParam("Fold", &timbre); engine::addParam("Asym", &morph); @@ -194,7 +195,7 @@ void engine::setup() case 2: alloc_engine(); init_params(0.8f, 0.8f, 0.75f, {0.6f, 0.6f, false}); - engine::addParam(V_OCT, &_pitch); + engine::addParam(V_OCT, &_v_oct); engine::addParam("Ratio", &harmonics); engine::addParam("Mod", &timbre); engine::addParam("Feedb.", &morph); @@ -207,7 +208,7 @@ void engine::setup() case 3: alloc_engine(); init_params(0.8f, 0.8f, 0.75f, {0.7f, 0.6f, false}); - engine::addParam(V_OCT, &_pitch); + engine::addParam(V_OCT, &_v_oct); engine::addParam("Ratio", &harmonics); engine::addParam("Frm/Fq.", &timbre); engine::addParam("Width", &morph); @@ -217,7 +218,7 @@ void engine::setup() case 4: alloc_engine(); init_params(0.8f, 0.8f, 0.75f, {0.8f, 0.8f, false}); - engine::addParam(V_OCT, &_pitch); + engine::addParam(V_OCT, &_v_oct); engine::addParam("Bump", &harmonics); engine::addParam("Peak", &timbre); engine::addParam("Shape", &morph); @@ -230,7 +231,7 @@ void engine::setup() case WAVETABLE_ENGINE: alloc_engine(64 * sizeof(const int16_t *)); init_params(0.f, 0.8f, 0.75f, {0.6f, 0.6f, false}); - engine::addParam(V_OCT, &_pitch); + engine::addParam(V_OCT, &_v_oct); engine::addParam("Bank", &harmonics, 0.f, 0.5f); engine::addParam("Row", &timbre); engine::addParam("Column", &morph); @@ -245,7 +246,7 @@ void engine::setup() { alloc_engine(plaits::kChordNumChords * plaits::kChordNumNotes + plaits::kChordNumChords + plaits::kChordNumNotes); init_params(0.5f, 0.5f, 0.5f, {0.8f, 0.8f, false}); - engine::addParam(V_OCT, &_pitch); + engine::addParam(V_OCT, &_v_oct); int32_t *pchord = (int32_t *)&static_cast(_plaitsEngine)->chords_.chord_index_quantizer_.quantized_value_; *pchord = 8; @@ -309,7 +310,7 @@ void engine::setup() case CLASSIC_VAVCF_ENGINE: alloc_engine(); init_params(0.5f, 0.5f, 0.5f, {1.f, 1.f, false}); - engine::addParam(V_OCT, &_pitch); + engine::addParam(V_OCT, &_v_oct); engine::addParam("Morph", &morph); engine::addParam("Cutoff", &timbre); engine::addParam("Harsh", &harmonics); @@ -320,7 +321,7 @@ void engine::setup() patch.decay = 0.5f; engine::addParam("Decay", &patch.decay, 0.f, 0.99f); break; -#if 0 //TODO.... +#if 0 // TODO.... case 17: alloc_engine(plaits::kMaxBlockSize * 4); _plaitsEngine->post_processing_settings = {0.7f, 0.7f, false}; @@ -378,7 +379,7 @@ void engine::process() modulations.level_patched = false; modulations.level = 1.f; - patch.note = _base_pitch + engine::cv() * 12; + patch.note = _base_pitch + (_pitch + engine::cv()) * 12; float last_decay = patch.decay; float last_morph = patch.morph; diff --git a/platformio.ini b/platformio.ini index b807861..6b71a42 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,5 +9,5 @@ [env:squares-and-circles] apps_json = ./app/index.json -squares_and_circles_loader = f77f830 ; minimum loader version +squares_and_circles_loader = 1b0b8eb ; minimum loader version platform = .pio/ \ No newline at end of file