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 2677267..161fae9 100644 Binary files a/app/SYNTH/plaits.bin and b/app/SYNTH/plaits.bin differ 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