@prefix bsize:  <http://lv2plug.in/ns/ext/buf-size#>.
@prefix doap:   <http://usefulinc.com/ns/doap#>.
@prefix epp:    <http://lv2plug.in/ns/ext/port-props/#>.
@prefix foaf:   <http://xmlns.com/foaf/0.1/>.
@prefix lv2:    <http://lv2plug.in/ns/lv2core#>.
@prefix mod:    <http://moddevices.com/ns/mod#>.
@prefix modgui: <http://moddevices.com/ns/modgui#>.
@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#>.
@prefix units:  <http://lv2plug.in/ns/extensions/units#>.

<http://moddevices.com/plugins/mod-devel/Harmonizer2>
a lv2:Plugin, lv2:SpectralPlugin;

lv2:requiredFeature bsize:fixedBlockLength, bsize:powerOf2BlockLength;

doap:name "Harmonizer2";

doap:developer [
    foaf:name "Andre";
    foaf:homepage <>;
    foaf:mbox <mailto:andre_coutinho@rocketmail.com>;
];

doap:maintainer [
    foaf:name "MOD Team";
    foaf:homepage <http://moddevices.com>;
    foaf:mbox <mailto:devel@moddevices.com>;
];

mod:brand "MOD";
mod:label "Harmonizer2";

doap:license "GPL";

rdfs:comment """
It’s a 2-voice harmonizer plugin that allows you to set the scale(*) to either Major, Minor, or Minor Harmonic, and then shift anywhere between down an -8th and up an +8th in that scale. Like with nearly all harmonizers, you will have to play in the correct key (which can also be configured). 

The “Mode” switch has three settings, in the first setting, it will mute the harmonized note when playing outside the scale. In the second setting, it will play the harmonized note, regardless of whether it is within the scale or not. In the third (“Bend”) setting, it behaves like the second setting, while also allowing you to bend notes, allowing for smooth transitions between harmonized notes. 

All plugins in the MOD-pitchshifter family have an option to set the fidelity of the plugin. As you lower the fidelity, the sound will become less pristine, but the plugin will also use less processing. The opposite holds true for increasing the fidelity, this will grant you a clearer pitch-shifted signal at the cost of significantly more processing being used. 

*The Lo-Fi setting is reminiscent of bit-crushed sounds, if you are looking for those synthesizer-like basslines, or dirty octave-up sounds, this is your setting!
*The Hi-Fi setting is great if you are looking to emulate (for example) something like a 12-string guitar, be sure to mind that CPU-meter in the bottom-right of the screen though! 
*The settings in between are created to let you make the perfect trade-off between quality and performance. 

A hint for making the right decision: the more you shift the pitch up, the higher you will need to set the Fidelity to get a clear sound. 

(*) The scale can be set by pressing the gear at the top-right corner of the plugin, in a future release, the interface will support doing this without entering the settings. 
""";

lv2:port
[
    a lv2:AudioPort, lv2:InputPort;
    lv2:index 0;
    lv2:symbol "In";
    lv2:name "In";
    lv2:shortName "In";
],
[
    a lv2:AudioPort, lv2:OutputPort;
    lv2:index 1;
    lv2:symbol "Out_clean";
    lv2:name "Clean Output";
    lv2:shortName "Clean Output";
],
[
    a lv2:AudioPort, lv2:OutputPort;
    lv2:index 2;
    lv2:symbol "Out1";
    lv2:name "Out 1";
    lv2:shortName "Out 1";
],
[
    a lv2:AudioPort, lv2:OutputPort;
    lv2:index 3;
    lv2:symbol "Out2";
    lv2:name "Out 2";
    lv2:shortName "Out 2";
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 4;
    lv2:symbol "Tone";
    lv2:name "Tone";
    lv2:shortName "Tone";
    lv2:default 0;
    lv2:minimum 0;
    lv2:maximum 11;
    lv2:portProperty lv2:integer, lv2:enumeration ;
    lv2:scalePoint [rdfs:label "C";  rdf:value 0];
    lv2:scalePoint [rdfs:label "C#"; rdf:value 1];
    lv2:scalePoint [rdfs:label "D";  rdf:value 2];
    lv2:scalePoint [rdfs:label "D#"; rdf:value 3];
    lv2:scalePoint [rdfs:label "E";  rdf:value 4];
    lv2:scalePoint [rdfs:label "F";  rdf:value 5];
    lv2:scalePoint [rdfs:label "F#"; rdf:value 6];
    lv2:scalePoint [rdfs:label "G";  rdf:value 7];
    lv2:scalePoint [rdfs:label "G#"; rdf:value 8];
    lv2:scalePoint [rdfs:label "A";  rdf:value 9];
    lv2:scalePoint [rdfs:label "A#"; rdf:value 10];
    lv2:scalePoint [rdfs:label "B";  rdf:value 11];
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 5;
    lv2:symbol "Scale";
    lv2:name "Scale";
    lv2:shortName "Scale";
    lv2:default 0;
    lv2:minimum 0;
    lv2:maximum 2;
    lv2:portProperty lv2:integer, lv2:enumeration;
    lv2:scalePoint [rdfs:label "Major"; rdf:value 0];
    lv2:scalePoint [rdfs:label "Minor"; rdf:value 1];
    lv2:scalePoint [rdfs:label "Harmonic Minor"; rdf:value 2];
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 6;
    lv2:symbol "Interval_1";
    lv2:name "Interval 1";
    lv2:shortName "Interval 1";
    lv2:default 0;
    lv2:minimum 0;
    lv2:maximum 11;
    lv2:portProperty lv2:integer, lv2:enumeration;
    lv2:scalePoint [rdfs:label "+3rd"; rdf:value 0];
    lv2:scalePoint [rdfs:label "+4th"; rdf:value 1];
    lv2:scalePoint [rdfs:label "+5th"; rdf:value 2];
    lv2:scalePoint [rdfs:label "+6th"; rdf:value 3];
    lv2:scalePoint [rdfs:label "+7th"; rdf:value 4];
    lv2:scalePoint [rdfs:label "+8th"; rdf:value 5];
    lv2:scalePoint [rdfs:label "-3rd"; rdf:value 6];
    lv2:scalePoint [rdfs:label "-4th"; rdf:value 7];
    lv2:scalePoint [rdfs:label "-5th"; rdf:value 8];
    lv2:scalePoint [rdfs:label "-6th"; rdf:value 9];
    lv2:scalePoint [rdfs:label "-7th"; rdf:value 10];
    lv2:scalePoint [rdfs:label "-8th"; rdf:value 11];
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 7;
    lv2:symbol "Interval_2";
    lv2:name "Interval 2";
    lv2:shortName "Interval 2";
    lv2:default 2;
    lv2:minimum 0;
    lv2:maximum 11;
    lv2:portProperty lv2:integer, lv2:enumeration ;
    lv2:scalePoint [rdfs:label "+3rd"; rdf:value 0];
    lv2:scalePoint [rdfs:label "+4th"; rdf:value 1];
    lv2:scalePoint [rdfs:label "+5th"; rdf:value 2];
    lv2:scalePoint [rdfs:label "+6th"; rdf:value 3];
    lv2:scalePoint [rdfs:label "+7th"; rdf:value 4];
    lv2:scalePoint [rdfs:label "+8th"; rdf:value 5];
    lv2:scalePoint [rdfs:label "-3rd"; rdf:value 6];
    lv2:scalePoint [rdfs:label "-4th"; rdf:value 7];
    lv2:scalePoint [rdfs:label "-5th"; rdf:value 8];
    lv2:scalePoint [rdfs:label "-6th"; rdf:value 9];
    lv2:scalePoint [rdfs:label "-7th"; rdf:value 10];
    lv2:scalePoint [rdfs:label "-8th"; rdf:value 11];
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 8;
    lv2:symbol "Mode";
    lv2:name "Mode";
    lv2:shortName "Mode";
    lv2:default 0;
    lv2:minimum 0;
    lv2:maximum 2;
    lv2:portProperty lv2:integer, lv2:enumeration;
    lv2:scalePoint [rdfs:label "I"; rdf:value 0];
    lv2:scalePoint [rdfs:label "II"; rdf:value 1];
    lv2:scalePoint [rdfs:label "Bend"; rdf:value 2];
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 9;
    lv2:symbol "LowestNoteToChangeThePitch";
    lv2:name "Lowest note to change the pitch";
    lv2:shortName "Lowest Wet";
    lv2:default 0;
    lv2:minimum 0;
    lv2:maximum 14;
    lv2:portProperty lv2:integer, lv2:enumeration;
    lv2:scalePoint [rdfs:label "B1";  rdf:value 0];
    lv2:scalePoint [rdfs:label "C2";  rdf:value 1];
    lv2:scalePoint [rdfs:label "C#2"; rdf:value 2];
    lv2:scalePoint [rdfs:label "D2";  rdf:value 3];
    lv2:scalePoint [rdfs:label "D#2"; rdf:value 4];
    lv2:scalePoint [rdfs:label "E2";  rdf:value 5];
    lv2:scalePoint [rdfs:label "F2";  rdf:value 6];
    lv2:scalePoint [rdfs:label "F#2"; rdf:value 7];
    lv2:scalePoint [rdfs:label "G2";  rdf:value 8];
    lv2:scalePoint [rdfs:label "G#2"; rdf:value 9];
    lv2:scalePoint [rdfs:label "A2";  rdf:value 10];
    lv2:scalePoint [rdfs:label "A#2"; rdf:value 11];
    lv2:scalePoint [rdfs:label "B2";  rdf:value 12];
    lv2:scalePoint [rdfs:label "C3";  rdf:value 13];
    lv2:scalePoint [rdfs:label "C#3"; rdf:value 14];
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 10;
    lv2:symbol "Gain_clean";
    lv2:name "Clean Gain";
    lv2:shortName "Clean Gain";
    lv2:default 0.0;
    lv2:minimum -20.0;
    lv2:maximum 20.0;
    units:unit units:db;
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 11;
    lv2:symbol "Gain1";
    lv2:name "Gain 1";
    lv2:shortName "Gain 1";
    lv2:default 3.0;
    lv2:minimum -20.0;
    lv2:maximum 20.0;
    units:unit units:db;
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 12;
    lv2:symbol "Gain2";
    lv2:name "Gain 2";
    lv2:shortName "Gain 2";
    lv2:default 3.0;
    lv2:minimum -20.0;
    lv2:maximum 20.0;
    units:unit units:db;
],
[
    a lv2:ControlPort, lv2:InputPort;
    lv2:index 13;
    lv2:symbol "Fidelity";
    lv2:name "Fidelity";
    lv2:shortName "Fidelity";
    lv2:default 1;
    lv2:minimum 0;
    lv2:maximum 2;
    lv2:portProperty lv2:integer, lv2:enumeration;
    lv2:scalePoint [rdfs:label "Lo-Fi"; rdf:value 0];
    lv2:scalePoint [rdfs:label "Normal"; rdf:value 1];
    lv2:scalePoint [rdfs:label "Hi-Fi"; rdf:value 2];
];

modgui:gui [
    modgui:resourcesDirectory <modgui>;
    modgui:stylesheet <modgui/icon-harmonizer2.css>;
    modgui:iconTemplate <modgui/icon-harmonizer2.html>;
    modgui:templateData <modgui/data-harmonizer2.json>;
    modgui:screenshot <modgui/screenshot-harmonizer2.png>;
    modgui:thumbnail <modgui/thumb-harmonizer2.png>;
].

