diff --git a/CHANGELOG.md b/CHANGELOG.md index a6e4f05..0e44aa6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 2.6.0 * New modules, SplitSort and MergeSort, split and merge polyphonic cables while sorting the channels. Sort criteria can be shared across modules via a LINK cable. A reimplementation of Aria Salvatrice's Splort and Smerge modules. +* A related module, PolySort, sorts polyphonic signals, optionally reusing sort order foe each signal. ## 2.5.0 diff --git a/README.md b/README.md index bef8e26..e6a2a77 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ The [Changelog](./CHANGELOG.md) describes changes. [![module-screenshot](./doc/Inv.png)](#inv) [![module-screenshot](./doc/SplitSort.png)](#splitsort) [![module-screenshot](./doc/MergeSort.png)](#mergesort) +[![module-screenshot](./doc/PolySort.png)](#polysort) * [MIDI Recorder](#midi-recorder) - a polyphonic multi-track recorder to convert CV to standard MIDI files. @@ -34,6 +35,8 @@ The [Changelog](./CHANGELOG.md) describes changes. * [SplitSort](#splitsort) - Split a polyphonic cable and optionally sort the channels, with possibility to share sort criteria with another SplitSort or MergeSort. * [MergeSort](#mergesort) - Merge monophonic cables into a polyphonic output and optionally sort the channels, with possibility to share sort criteria with another SplitSort or MergeSort. + +* [PolySort](#polysort) - Sort polyphonic signals, optionally reusing the same sort order as other inputs. ### MIDI Recorder @@ -320,6 +323,28 @@ Outputs: * **Link** - a polyphonic signal that can be used to control the sort order of another MergeSort or SplitSort module. Can be daisy chained - the first module in the chain determines the sort order. +### PolySort + +![module-screenshot](./doc/PolySort.png) + +Sort polyphonic signals, optionally reusing the same sort order as other inputs. Sorted output remain in sync with one another at the sample level. + +Buttons: + +* **Link** - When pressed, the input is sorted using the same sort order and the previous input above it. When unpressed, the input is sorted on its own. + +Inputs: + +* **In** - 10 separate polyphonic inputs. + +Outputs: + +* **Out** - 10 polyphonic sorted output corresponding to each input. + +For example, an alternate way to sort MIDI similar to the example above for SplitSort](#splitsort) would be: + +![module-screenshot](./doc/PolySort-chained.png) + ## Acknowledgements diff --git a/plugin.json b/plugin.json index 35815f4..e57f857 100644 --- a/plugin.json +++ b/plugin.json @@ -1,7 +1,7 @@ { "slug": "Chinenual-VCV", "name": "Chinenual", - "version": "2.6.0-beta1", + "version": "2.6.0-beta2", "license": "GPL-3.0-or-later", "brand": "Chinenual", "author": "Steve Tynor", @@ -97,6 +97,16 @@ "polyphonic", "utility" ] + }, + { + "slug": "PolySort", + "name": "Polyphonic signal sorter with linked sort", + "description": "Sorts polyphonic signals, optionally linking the sort order to other signals", + "manualUrl": "https://github.com/chinenual/Chinenual-VCV/blob/main/README.md#polysort", + "tags": [ + "polyphonic", + "utility" + ] } ] } diff --git a/src/plugin.cpp b/src/plugin.cpp index 516296d..589e51b 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -7,7 +7,6 @@ void init(Plugin* p) pluginInstance = p; // Add modules here - // p->addModel(modelMyModule); p->addModel(modelMIDIRecorder); p->addModel(modelMIDIRecorderCC); p->addModel(modelDrumMap); @@ -16,6 +15,7 @@ void init(Plugin* p) p->addModel(modelInv); p->addModel(modelSplitSort); p->addModel(modelMergeSort); + p->addModel(modelPolySort); // Any other plugin initialization may go here. // As an alternative, consider lazy-loading assets and lookup tables when your diff --git a/src/plugin.hpp b/src/plugin.hpp index 6fa33b9..6eb147a 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -13,5 +13,6 @@ extern Model* modelMergeSort; extern Model* modelMIDIRecorder; extern Model* modelMIDIRecorderCC; extern Model* modelNoteMeter; +extern Model* modelPolySort; extern Model* modelSplitSort; extern Model* modelTint;