@prefix atom:  <http://lv2plug.in/ns/ext/atom#> .
@prefix doap:  <http://usefulinc.com/ns/doap#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix kx:    <http://kxstudio.sf.net/ns/lv2ext/external-ui#> .
@prefix log:   <http://lv2plug.in/ns/ext/log#> .
@prefix lv2:   <http://lv2plug.in/ns/lv2core#> .
@prefix midi:  <http://lv2plug.in/ns/ext/midi#> .
@prefix mod:   <http://moddevices.com/ns/mod#> .
@prefix opts:  <http://lv2plug.in/ns/ext/options#> .
@prefix pprop: <http://lv2plug.in/ns/ext/port-props#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ui:    <http://lv2plug.in/ns/extensions/ui#> .
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
@prefix urid:  <http://lv2plug.in/ns/ext/urid#> .

@prefix fat1: <http://gareus.org/oss/lv2/fat1#> .

<http://gareus.org/rgareus#me>
	a foaf:Person;
	foaf:name "Robin Gareus";
	foaf:mbox <mailto:robin@gareus.org>;
	foaf:homepage <http://gareus.org/> .

<http://gareus.org/oss/lv2/fat1>
	a lv2:Plugin, doap:Project, lv2:PitchPlugin;
	doap:license <http://usefulinc.com/doap/licenses/gpl>;
	doap:maintainer <http://gareus.org/rgareus#me>;
	doap:name "x42-Autotune";
	lv2:microVersion 0 ;lv2:minorVersion 2054 ;
	ui:ui fat1:ui_gl ;
	lv2:optionalFeature lv2:hardRTCapable, log:log;
	lv2:requiredFeature urid:map;
	
	
	
	lv2:port [
		a atom:AtomPort, lv2:InputPort;
		atom:bufferType atom:Sequence;
		atom:supports midi:MidiEvent;
		lv2:index 0;
		lv2:symbol "midiin";
		lv2:name "MIDI In";
		lv2:portProperty lv2:isSideChain;
	] , [
		a lv2:AudioPort ,
			lv2:InputPort ;
		lv2:index 1 ;
		lv2:symbol "in" ;
		lv2:name "Input"
	] , [
		a lv2:AudioPort ,
			lv2:OutputPort ;
		lv2:index 2 ;
		lv2:symbol "out" ;
		lv2:name "Output"
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 3 ;
		lv2:symbol "mode" ;
		lv2:name "Mode";
		lv2:default 0 ;
		lv2:minimum 0 ;
		lv2:maximum 2 ;
		lv2:portProperty lv2:integer, lv2:enumeration;
		lv2:scalePoint [ rdfs:label  "Auto"; rdf:value 0 ; ] ;
		lv2:scalePoint [ rdfs:label  "MIDI"; rdf:value 1 ; ] ;
		lv2:scalePoint [ rdfs:label  "Manual"; rdf:value 2 ; ] ;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 4 ;
		lv2:symbol "channelf" ;
		lv2:name "Filter Channel";
		lv2:minimum 0 ;
		lv2:maximum 16 ;
		lv2:default 0;
		lv2:scalePoint [ rdfs:label "Any"; rdf:value 0 ];
		lv2:scalePoint [ rdfs:label "01" ; rdf:value 1 ];
		lv2:scalePoint [ rdfs:label "02" ; rdf:value 2 ];
		lv2:scalePoint [ rdfs:label "03" ; rdf:value 3 ];
		lv2:scalePoint [ rdfs:label "04" ; rdf:value 4 ];
		lv2:scalePoint [ rdfs:label "05" ; rdf:value 5 ];
		lv2:scalePoint [ rdfs:label "06" ; rdf:value 6 ];
		lv2:scalePoint [ rdfs:label "07" ; rdf:value 7 ];
		lv2:scalePoint [ rdfs:label "08" ; rdf:value 8 ];
		lv2:scalePoint [ rdfs:label "09" ; rdf:value 9 ];
		lv2:scalePoint [ rdfs:label "10" ; rdf:value 10 ];
		lv2:scalePoint [ rdfs:label "11" ; rdf:value 11 ];
		lv2:scalePoint [ rdfs:label "12" ; rdf:value 12 ];
		lv2:scalePoint [ rdfs:label "13" ; rdf:value 13 ];
		lv2:scalePoint [ rdfs:label "14" ; rdf:value 14 ];
		lv2:scalePoint [ rdfs:label "15" ; rdf:value 15 ];
		lv2:scalePoint [ rdfs:label "16" ; rdf:value 16 ];
		lv2:portProperty lv2:integer, lv2:enumeration;
		rdfs:comment "MIDI Channel (1..16) on which the filter is active; 0: any)." ;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 5 ;
		lv2:symbol "tuning" ;
		lv2:name "Tuning";
		lv2:default 440.0 ;
		lv2:minimum 400.0 ;
		lv2:maximum 480.0 ;
		units:unit units:hz;
		pprop:rangeSteps 401;
		rdfs:comment "This sets the frequency corresponding to 'A' pitch, in other words the required tuning. This will be the default 440 Hz in most cases.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 6 ;
		lv2:symbol "bias" ;
		lv2:name "Bias";
		lv2:default 0.5 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		pprop:rangeSteps 271;
		rdfs:comment "Normally the pitch estimator will select the enabled note closest to the measured pitch. The Bias control adds some preference for the current note - this allows it to go off-tune more than would be the case otherwise.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 7 ;
		lv2:symbol "filter" ;
		lv2:name "Filter";
		lv2:default 0.1 ;
		lv2:minimum 0.02 ;
		lv2:maximum 0.5 ;
		lv2:scalePoint [ rdfs:label  "Slow"; rdf:value 0.5 ; ] ;
		lv2:scalePoint [ rdfs:label  "Med";  rdf:value 0.1 ; ] ;
		lv2:scalePoint [ rdfs:label  "Fast"; rdf:value 0.02 ; ] ;
		lv2:portProperty pprop:logarithmic;
		pprop:rangeSteps 201;
		rdfs:comment "This sets the amount of smoothing on the pitch correction while the current note does not change. If it does change the filter is bypassed and the correction jumps immediately to the new value.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 8 ;
		lv2:symbol "corr" ;
		lv2:name "Correction";
		lv2:default 1.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		pprop:rangeSteps 271;
		rdfs:comment "Determines how much of the estimated pitch error gets corrected. Full correction may remove expression or vibrato.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 9 ;
		lv2:symbol "offset" ;
		lv2:name "Offset";
		lv2:default 0.0 ;
		lv2:minimum -2.0 ;
		lv2:maximum  2.0 ;
		pprop:rangeSteps 401;
		units:unit units:semitone12TET;
		rdfs:comment "Adds an offset in the range of +/- two semitones to the pitch correction. With the Correction control set to zero the result is a constant pitch change.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 10 ;
		lv2:symbol "bendrange" ;
		lv2:name "Pitch Bend Range";
		lv2:default 2.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 7.0 ;
		units:unit units:semitone12TET;
		rdfs:comment "Configures the effect range of MIDI pitch-bend messages. Pitch-bend is added to the pitch correction offset.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 11 ;
		lv2:symbol "fastmode" ;
		lv2:name "Fast Correction";
		lv2:default 0 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
		rdfs:comment "Reduces latency by allowing initially uncorrected signal. This can be useful in live situations.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 12 ;
		lv2:symbol "m00" ;
		lv2:name "C";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 13 ;
		lv2:symbol "m01" ;
		lv2:name "C#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 14 ;
		lv2:symbol "m02" ;
		lv2:name "D";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 15 ;
		lv2:symbol "m03" ;
		lv2:name "D#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 16 ;
		lv2:symbol "m04" ;
		lv2:name "E";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 17 ;
		lv2:symbol "m05" ;
		lv2:name "F";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 18 ;
		lv2:symbol "m06" ;
		lv2:name "F#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 19 ;
		lv2:symbol "m07" ;
		lv2:name "G";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 20 ;
		lv2:symbol "m08" ;
		lv2:name "G#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 21 ;
		lv2:symbol "m09" ;
		lv2:name "A";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 22 ;
		lv2:symbol "m10" ;
		lv2:name "A#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 23 ;
		lv2:symbol "m11" ;
		lv2:name "B";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 24 ;
		lv2:symbol "nmask" ;
		lv2:name "Note Mask";
		lv2:minimum 0 ;
		lv2:maximum 4096 ;
		lv2:portProperty lv2:integer;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 25 ;
		lv2:symbol "nset" ;
		lv2:name "Note Set";
		lv2:minimum 0 ;
		lv2:maximum 4096 ;
		lv2:portProperty lv2:integer;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 26 ;
		lv2:symbol "bend" ;
		lv2:name "Pitch Bend";
		lv2:minimum -1.0 ;
		lv2:maximum  1.0 ;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 27 ;
		lv2:symbol "error" ;
		lv2:name "Pitch Error";
		lv2:minimum -1.0 ;
		lv2:maximum  1.0 ;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 28 ;
		lv2:symbol "latency" ;
		lv2:name "latency";
		lv2:minimum 0 ;
		lv2:maximum 4096;
		lv2:portProperty lv2:reportsLatency, lv2:integer;
		units:unit units:frame;
	];
	rdfs:comment "AT1 is an 'autotuner', normally used to correct the pitch of a voice singing (slightly) out of tune. The 'expected' pitch can be controlled by MIDI, or be a fixed set of notes. AT1 can probably be used on some instruments as well, but is primarily designed to cover the vocal range.";
	.

<http://gareus.org/oss/lv2/fat1#microtonal>
	a lv2:Plugin, doap:Project, lv2:PitchPlugin;
	doap:license <http://usefulinc.com/doap/licenses/gpl>;
	doap:maintainer <http://gareus.org/rgareus#me>;
	doap:name "x42-Autotune (microtonal)";
	lv2:microVersion 0 ;lv2:minorVersion 2054 ;
	ui:ui fat1:ui_gl ;
	lv2:optionalFeature lv2:hardRTCapable, log:log;
	lv2:requiredFeature urid:map;
	
	
	
	lv2:port [
		a atom:AtomPort, lv2:InputPort;
		atom:bufferType atom:Sequence;
		atom:supports midi:MidiEvent;
		lv2:index 0;
		lv2:symbol "midiin";
		lv2:name "MIDI In";
		lv2:portProperty lv2:isSideChain;
	] , [
		a lv2:AudioPort ,
			lv2:InputPort ;
		lv2:index 1 ;
		lv2:symbol "in" ;
		lv2:name "Input"
	] , [
		a lv2:AudioPort ,
			lv2:OutputPort ;
		lv2:index 2 ;
		lv2:symbol "out" ;
		lv2:name "Output"
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 3 ;
		lv2:symbol "mode" ;
		lv2:name "Mode";
		lv2:default 0 ;
		lv2:minimum 0 ;
		lv2:maximum 2 ;
		lv2:portProperty lv2:integer, lv2:enumeration;
		lv2:scalePoint [ rdfs:label  "Auto"; rdf:value 0 ; ] ;
		lv2:scalePoint [ rdfs:label  "MIDI"; rdf:value 1 ; ] ;
		lv2:scalePoint [ rdfs:label  "Manual"; rdf:value 2 ; ] ;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 4 ;
		lv2:symbol "channelf" ;
		lv2:name "Filter Channel";
		lv2:minimum 0 ;
		lv2:maximum 16 ;
		lv2:default 0;
		lv2:scalePoint [ rdfs:label "Any"; rdf:value 0 ];
		lv2:scalePoint [ rdfs:label "01" ; rdf:value 1 ];
		lv2:scalePoint [ rdfs:label "02" ; rdf:value 2 ];
		lv2:scalePoint [ rdfs:label "03" ; rdf:value 3 ];
		lv2:scalePoint [ rdfs:label "04" ; rdf:value 4 ];
		lv2:scalePoint [ rdfs:label "05" ; rdf:value 5 ];
		lv2:scalePoint [ rdfs:label "06" ; rdf:value 6 ];
		lv2:scalePoint [ rdfs:label "07" ; rdf:value 7 ];
		lv2:scalePoint [ rdfs:label "08" ; rdf:value 8 ];
		lv2:scalePoint [ rdfs:label "09" ; rdf:value 9 ];
		lv2:scalePoint [ rdfs:label "10" ; rdf:value 10 ];
		lv2:scalePoint [ rdfs:label "11" ; rdf:value 11 ];
		lv2:scalePoint [ rdfs:label "12" ; rdf:value 12 ];
		lv2:scalePoint [ rdfs:label "13" ; rdf:value 13 ];
		lv2:scalePoint [ rdfs:label "14" ; rdf:value 14 ];
		lv2:scalePoint [ rdfs:label "15" ; rdf:value 15 ];
		lv2:scalePoint [ rdfs:label "16" ; rdf:value 16 ];
		lv2:portProperty lv2:integer, lv2:enumeration;
		rdfs:comment "MIDI Channel (1..16) on which the filter is active; 0: any)." ;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 5 ;
		lv2:symbol "tuning" ;
		lv2:name "Tuning";
		lv2:default 440.0 ;
		lv2:minimum 400.0 ;
		lv2:maximum 480.0 ;
		units:unit units:hz;
		pprop:rangeSteps 401;
		rdfs:comment "This sets the frequency corresponding to 'A' pitch, in other words the required tuning. This will be the default 440 Hz in most cases.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 6 ;
		lv2:symbol "bias" ;
		lv2:name "Bias";
		lv2:default 0.5 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		pprop:rangeSteps 271;
		rdfs:comment "Normally the pitch estimator will select the enabled note closest to the measured pitch. The Bias control adds some preference for the current note - this allows it to go off-tune more than would be the case otherwise.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 7 ;
		lv2:symbol "filter" ;
		lv2:name "Filter";
		lv2:default 0.1 ;
		lv2:minimum 0.02 ;
		lv2:maximum 0.5 ;
		lv2:scalePoint [ rdfs:label  "Slow"; rdf:value 0.5 ; ] ;
		lv2:scalePoint [ rdfs:label  "Med";  rdf:value 0.1 ; ] ;
		lv2:scalePoint [ rdfs:label  "Fast"; rdf:value 0.02 ; ] ;
		lv2:portProperty pprop:logarithmic;
		pprop:rangeSteps 201;
		rdfs:comment "This sets the amount of smoothing on the pitch correction while the current note does not change. If it does change the filter is bypassed and the correction jumps immediately to the new value.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 8 ;
		lv2:symbol "corr" ;
		lv2:name "Correction";
		lv2:default 1.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		pprop:rangeSteps 271;
		rdfs:comment "Determines how much of the estimated pitch error gets corrected. Full correction may remove expression or vibrato.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 9 ;
		lv2:symbol "offset" ;
		lv2:name "Offset";
		lv2:default 0.0 ;
		lv2:minimum -2.0 ;
		lv2:maximum  2.0 ;
		pprop:rangeSteps 401;
		units:unit units:semitone12TET;
		rdfs:comment "Adds an offset in the range of +/- two semitones to the pitch correction. With the Correction control set to zero the result is a constant pitch change.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 10 ;
		lv2:symbol "bendrange" ;
		lv2:name "Pitch Bend Range";
		lv2:default 2.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 7.0 ;
		units:unit units:semitone12TET;
		rdfs:comment "Configures the effect range of MIDI pitch-bend messages. Pitch-bend is added to the pitch correction offset.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 11 ;
		lv2:symbol "fastmode" ;
		lv2:name "Fast Correction";
		lv2:default 0 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
		rdfs:comment "Reduces latency by allowing initially uncorrected signal. This can be useful in live situations.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 12 ;
		lv2:symbol "m00" ;
		lv2:name "C";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 13 ;
		lv2:symbol "m01" ;
		lv2:name "C#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 14 ;
		lv2:symbol "m02" ;
		lv2:name "D";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 15 ;
		lv2:symbol "m03" ;
		lv2:name "D#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 16 ;
		lv2:symbol "m04" ;
		lv2:name "E";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 17 ;
		lv2:symbol "m05" ;
		lv2:name "F";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 18 ;
		lv2:symbol "m06" ;
		lv2:name "F#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 19 ;
		lv2:symbol "m07" ;
		lv2:name "G";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 20 ;
		lv2:symbol "m08" ;
		lv2:name "G#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 21 ;
		lv2:symbol "m09" ;
		lv2:name "A";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 22 ;
		lv2:symbol "m10" ;
		lv2:name "A#";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 23 ;
		lv2:symbol "m11" ;
		lv2:name "B";
		lv2:default 1 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 24 ;
		lv2:symbol "nmask" ;
		lv2:name "Note Mask";
		lv2:minimum 0 ;
		lv2:maximum 4096 ;
		lv2:portProperty lv2:integer;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 25 ;
		lv2:symbol "nset" ;
		lv2:name "Note Set";
		lv2:minimum 0 ;
		lv2:maximum 4096 ;
		lv2:portProperty lv2:integer;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 26 ;
		lv2:symbol "bend" ;
		lv2:name "Pitch Bend";
		lv2:minimum -1.0 ;
		lv2:maximum  1.0 ;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 27 ;
		lv2:symbol "error" ;
		lv2:name "Pitch Error";
		lv2:minimum -1.0 ;
		lv2:maximum  1.0 ;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 28 ;
		lv2:symbol "latency" ;
		lv2:name "latency";
		lv2:minimum 0 ;
		lv2:maximum 4096;
		lv2:portProperty lv2:reportsLatency, lv2:integer;
		units:unit units:frame;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 29 ;
	    lv2:symbol "scale00" ;
	    lv2:name "Note Tuning (C)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 30 ;
	    lv2:symbol "scale01" ;
	    lv2:name "Note Tuning (C#)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 31 ;
	    lv2:symbol "scale02" ;
	    lv2:name "Note Tuning (D)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 32 ;
	    lv2:symbol "scale03" ;
	    lv2:name "Note Tuning (D#)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 33 ;
	    lv2:symbol "scale04" ;
	    lv2:name "Note Tuning (E)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 34 ;
	    lv2:symbol "scale05" ;
	    lv2:name "Note Tuning (F)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 35 ;
	    lv2:symbol "scale06" ;
	    lv2:name "Note Tuning (F#)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 36 ;
	    lv2:symbol "scale07" ;
	    lv2:name "Note Tuning (G)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 37 ;
	    lv2:symbol "scale08" ;
	    lv2:name "Note Tuning (G#)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 38 ;
	    lv2:symbol "scale09" ;
	    lv2:name "Note Tuning (A)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 39 ;
	    lv2:symbol "scale10" ;
	    lv2:name "Note Tuning (A#)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	] , [
	    a lv2:InputPort ,
	        lv2:ControlPort ;
	    lv2:index 40 ;
	    lv2:symbol "scale11" ;
	    lv2:name "Note Tuning (B)";
	    lv2:default 0 ;
	    lv2:minimum -1 ;
	    lv2:maximum 1 ;
	];
	rdfs:comment "AT1 is an 'autotuner', normally used to correct the pitch of a voice singing (slightly) out of tune. The 'expected' pitch can be controlled by MIDI, or be a fixed set of notes. AT1 can probably be used on some instruments as well, but is primarily designed to cover the vocal range. This variant allows to apply microtonal adjustments per note.";
	.

<http://gareus.org/oss/lv2/fat1#scales>
	a lv2:Plugin, doap:Project, lv2:PitchPlugin;
	doap:license <http://usefulinc.com/doap/licenses/gpl>;
	doap:maintainer <http://gareus.org/rgareus#me>;
	doap:name "x42-Autotune (scales)";
	lv2:microVersion 0 ;lv2:minorVersion 2054 ;
	ui:ui fat1:ui_gl ;
	lv2:optionalFeature lv2:hardRTCapable, log:log;
	lv2:requiredFeature urid:map;
	
	
	
	lv2:port [
		a atom:AtomPort, lv2:InputPort;
		atom:bufferType atom:Sequence;
		atom:supports midi:MidiEvent;
		lv2:index 0;
		lv2:symbol "midiin";
		lv2:name "MIDI In";
		lv2:portProperty lv2:isSideChain;
	] , [
		a lv2:AudioPort ,
			lv2:InputPort ;
		lv2:index 1 ;
		lv2:symbol "in" ;
		lv2:name "Input"
	] , [
		a lv2:AudioPort ,
			lv2:OutputPort ;
		lv2:index 2 ;
		lv2:symbol "out" ;
		lv2:name "Output"
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 3 ;
		lv2:symbol "mode" ;
		lv2:name "Mode";
		lv2:default 0 ;
		lv2:minimum 0 ;
		lv2:maximum 2 ;
		lv2:portProperty lv2:integer, lv2:enumeration;
		lv2:scalePoint [ rdfs:label  "Auto"; rdf:value 0 ; ] ;
		lv2:scalePoint [ rdfs:label  "MIDI"; rdf:value 1 ; ] ;
		lv2:scalePoint [ rdfs:label  "Manual"; rdf:value 2 ; ] ;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 4 ;
		lv2:symbol "channelf" ;
		lv2:name "Filter Channel";
		lv2:minimum 0 ;
		lv2:maximum 16 ;
		lv2:default 0;
		lv2:scalePoint [ rdfs:label "Any"; rdf:value 0 ];
		lv2:scalePoint [ rdfs:label "01" ; rdf:value 1 ];
		lv2:scalePoint [ rdfs:label "02" ; rdf:value 2 ];
		lv2:scalePoint [ rdfs:label "03" ; rdf:value 3 ];
		lv2:scalePoint [ rdfs:label "04" ; rdf:value 4 ];
		lv2:scalePoint [ rdfs:label "05" ; rdf:value 5 ];
		lv2:scalePoint [ rdfs:label "06" ; rdf:value 6 ];
		lv2:scalePoint [ rdfs:label "07" ; rdf:value 7 ];
		lv2:scalePoint [ rdfs:label "08" ; rdf:value 8 ];
		lv2:scalePoint [ rdfs:label "09" ; rdf:value 9 ];
		lv2:scalePoint [ rdfs:label "10" ; rdf:value 10 ];
		lv2:scalePoint [ rdfs:label "11" ; rdf:value 11 ];
		lv2:scalePoint [ rdfs:label "12" ; rdf:value 12 ];
		lv2:scalePoint [ rdfs:label "13" ; rdf:value 13 ];
		lv2:scalePoint [ rdfs:label "14" ; rdf:value 14 ];
		lv2:scalePoint [ rdfs:label "15" ; rdf:value 15 ];
		lv2:scalePoint [ rdfs:label "16" ; rdf:value 16 ];
		lv2:portProperty lv2:integer, lv2:enumeration;
		rdfs:comment "MIDI Channel (1..16) on which the filter is active; 0: any)." ;
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 5 ;
		lv2:symbol "tuning" ;
		lv2:name "Tuning";
		lv2:default 440.0 ;
		lv2:minimum 400.0 ;
		lv2:maximum 480.0 ;
		units:unit units:hz;
		pprop:rangeSteps 401;
		rdfs:comment "This sets the frequency corresponding to 'A' pitch, in other words the required tuning. This will be the default 440 Hz in most cases.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 6 ;
		lv2:symbol "bias" ;
		lv2:name "Bias";
		lv2:default 0.5 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		pprop:rangeSteps 271;
		rdfs:comment "Normally the pitch estimator will select the enabled note closest to the measured pitch. The Bias control adds some preference for the current note - this allows it to go off-tune more than would be the case otherwise.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 7 ;
		lv2:symbol "filter" ;
		lv2:name "Filter";
		lv2:default 0.1 ;
		lv2:minimum 0.02 ;
		lv2:maximum 0.5 ;
		lv2:scalePoint [ rdfs:label  "Slow"; rdf:value 0.5 ; ] ;
		lv2:scalePoint [ rdfs:label  "Med";  rdf:value 0.1 ; ] ;
		lv2:scalePoint [ rdfs:label  "Fast"; rdf:value 0.02 ; ] ;
		lv2:portProperty pprop:logarithmic;
		pprop:rangeSteps 201;
		rdfs:comment "This sets the amount of smoothing on the pitch correction while the current note does not change. If it does change the filter is bypassed and the correction jumps immediately to the new value.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 8 ;
		lv2:symbol "corr" ;
		lv2:name "Correction";
		lv2:default 1.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		pprop:rangeSteps 271;
		rdfs:comment "Determines how much of the estimated pitch error gets corrected. Full correction may remove expression or vibrato.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 9 ;
		lv2:symbol "offset" ;
		lv2:name "Offset";
		lv2:default 0.0 ;
		lv2:minimum -2.0 ;
		lv2:maximum  2.0 ;
		pprop:rangeSteps 401;
		units:unit units:semitone12TET;
		rdfs:comment "Adds an offset in the range of +/- two semitones to the pitch correction. With the Correction control set to zero the result is a constant pitch change.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 10 ;
		lv2:symbol "bendrange" ;
		lv2:name "Pitch Bend Range";
		lv2:default 2.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 7.0 ;
		units:unit units:semitone12TET;
		rdfs:comment "Configures the effect range of MIDI pitch-bend messages. Pitch-bend is added to the pitch correction offset.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 11 ;
		lv2:symbol "fastmode" ;
		lv2:name "Fast Correction";
		lv2:default 0 ;
		lv2:minimum 0 ;
		lv2:maximum 1 ;
		lv2:portProperty lv2:integer, lv2:toggled;
		rdfs:comment "Reduces latency by allowing initially uncorrected signal. This can be useful in live situations.";
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 12 ;
		lv2:symbol "scale" ;
		lv2:name "Scale";
		lv2:default 0 ;
		lv2:minimum 0 ;
		lv2:maximum 24 ;
		lv2:scalePoint [ rdf:value  0; rdfs:label "Chromatic"; ] ;
		lv2:scalePoint [ rdf:value  1; rdfs:label "C Major"; ] ;
		lv2:scalePoint [ rdf:value  2; rdfs:label "Db Major"; ] ;
		lv2:scalePoint [ rdf:value  3; rdfs:label "D Major"; ] ;
		lv2:scalePoint [ rdf:value  4; rdfs:label "Eb Major"; ] ;
		lv2:scalePoint [ rdf:value  5; rdfs:label "E Major"; ] ;
		lv2:scalePoint [ rdf:value  6; rdfs:label "F Major"; ] ;
		lv2:scalePoint [ rdf:value  7; rdfs:label "F# Major"; ] ;
		lv2:scalePoint [ rdf:value  8; rdfs:label "G Major"; ] ;
		lv2:scalePoint [ rdf:value  9; rdfs:label "Ab Major"; ] ;
		lv2:scalePoint [ rdf:value 10; rdfs:label "A Major"; ] ;
		lv2:scalePoint [ rdf:value 11; rdfs:label "Bb Major"; ] ;
		lv2:scalePoint [ rdf:value 12; rdfs:label "B Major"; ] ;
		lv2:scalePoint [ rdf:value 13; rdfs:label "C Minor"; ] ;
		lv2:scalePoint [ rdf:value 14; rdfs:label "Db Minor"; ] ;
		lv2:scalePoint [ rdf:value 15; rdfs:label "D Minor"; ] ;
		lv2:scalePoint [ rdf:value 16; rdfs:label "Eb Minor"; ] ;
		lv2:scalePoint [ rdf:value 17; rdfs:label "E Minor"; ] ;
		lv2:scalePoint [ rdf:value 18; rdfs:label "F Minor"; ] ;
		lv2:scalePoint [ rdf:value 19; rdfs:label "F# Minor"; ] ;
		lv2:scalePoint [ rdf:value 20; rdfs:label "G Minor"; ] ;
		lv2:scalePoint [ rdf:value 21; rdfs:label "Ab Minor"; ] ;
		lv2:scalePoint [ rdf:value 22; rdfs:label "A Minor"; ] ;
		lv2:scalePoint [ rdf:value 23; rdfs:label "Bb Minor"; ] ;
		lv2:scalePoint [ rdf:value 24; rdfs:label "B Minor"; ] ;
		lv2:portProperty lv2:integer;
		lv2:portProperty lv2:enumeration ;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 13 ;
		lv2:symbol "nmask" ;
		lv2:name "Note Mask";
		lv2:minimum 0 ;
		lv2:maximum 4096 ;
		lv2:portProperty lv2:integer;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 14 ;
		lv2:symbol "nset" ;
		lv2:name "Note Set";
		lv2:minimum 0 ;
		lv2:maximum 4096 ;
		lv2:portProperty lv2:integer;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 15 ;
		lv2:symbol "bend" ;
		lv2:name "Pitch Bend";
		lv2:minimum -1.0 ;
		lv2:maximum  1.0 ;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 16 ;
		lv2:symbol "error" ;
		lv2:name "Pitch Error";
		lv2:minimum -1.0 ;
		lv2:maximum  1.0 ;
	] , [
		a lv2:OutputPort ,
			lv2:ControlPort ;
		lv2:index 17 ;
		lv2:symbol "latency" ;
		lv2:name "latency";
		lv2:minimum 0 ;
		lv2:maximum 4096;
		lv2:portProperty lv2:reportsLatency, lv2:integer;
		units:unit units:frame;
	];
	rdfs:comment "AT1 is an 'autotuner', normally used to correct the pitch of a voice singing (slightly) out of tune. The 'expected' pitch can be controlled by MIDI, or be a fixed set of notes. AT1 can probably be used on some instruments as well, but is primarily designed to cover the vocal range.";
	.

fat1:ui_gl
	a ui:X11UI ;
	lv2:requiredFeature urid:map;
	lv2:optionalFeature opts:options ;
	opts:supportedOption <http://lv2plug.in/ns/extensions/ui#scaleFactor> ;
	lv2:requiredFeature ui:idleInterface; lv2:extensionData ui:idleInterface;
  .

