@prefix doap: <http://usefulinc.com/ns/doap#> .
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
@prefix mda: <http://drobilla.net/plugins/mda/> .
@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
@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#> .

mda:RePsycho
	a lv2:Plugin ,
		lv2:PitchPlugin ;
	lv2:project mda: ;
	lv2:symbol "RePsycho" ;
	doap:name "MDA RePsycho!" ;
	doap:shortdesc "Drum loop pitch changer" ;
	doap:license <http://usefulinc.com/doap/licenses/gpl> ;
	lv2:optionalFeature lv2:hardRTCapable ;
	pg:mainInput mda:mainIn ;
	pg:mainOutput mda:mainOut ;
	rdfs:comment """Event-based pitch shifter

Chops audio into individual beats and shifts each beat downwards in pitch. Only allowing downwards shifts helps keep timing very tight - depending on complexity, whole rhythm sections can be shifted!

Alternative uses include a triggered flanger or sub-octave doubler (both with mix set to 50% or less) and a swing quantizer (with a high threshold so not all beats trigger).""" ;
	lv2:port [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 0 ;
		lv2:name "Tune" ;
		lv2:symbol "tune" ;
		lv2:default 1.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		units:unit units:semitone12TET ;
		rdfs:comment "Coarse tune (semitones)"
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 1 ;
		lv2:name "Fine" ;
		lv2:symbol "fine" ;
		lv2:default 1.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		units:unit units:cent ;
		rdfs:comment "Fine tune (cents)"
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 2 ;
		lv2:name "Decay" ;
		lv2:symbol "decay" ;
		lv2:default 0.5 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		rdfs:comment "Adjust envelope of each chunk (a fast decay can be useful while setting up)"
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 3 ;
		lv2:name "Thresh" ;
		lv2:symbol "thresh" ;
		lv2:default 0.6 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		rdfs:comment "Trigger level to divide the input into chunks"
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 4 ;
		lv2:name "Hold" ;
		lv2:symbol "hold" ;
		lv2:default 0.45 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		rdfs:comment "Minimum chunk length"
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 5 ;
		lv2:name "Mix" ;
		lv2:symbol "mix" ;
		lv2:default 1.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		rdfs:comment "Mix original signal with output"
	] , [
		a lv2:InputPort ,
			lv2:ControlPort ;
		lv2:index 6 ;
		lv2:name "Quality" ;
		lv2:symbol "quality" ;
		lv2:default 0.0 ;
		lv2:minimum 0.0 ;
		lv2:maximum 1.0 ;
		lv2:portProperty lv2:enumeration ;
		lv2:scalePoint [
			rdfs:label "Low" ;
			rdf:value 0.0
		] , [
			rdfs:label "High" ;
			rdf:value 1.0
		] ;
		rdfs:comment "The High setting uses smoother pitch-shifting and allows processing of stereo signals"
	] , [
		a lv2:InputPort ,
			lv2:AudioPort ;
		lv2:index 7 ;
		lv2:symbol "left_in" ;
		lv2:name "Left In" ;
		lv2:designation pg:left ;
		pg:group mda:mainIn
	] , [
		a lv2:InputPort ,
			lv2:AudioPort ;
		lv2:index 8 ;
		lv2:symbol "right_in" ;
		lv2:name "Right In" ;
		lv2:designation pg:right ;
		pg:group mda:mainIn
	] , [
		a lv2:OutputPort ,
			lv2:AudioPort ;
		lv2:index 9 ;
		lv2:symbol "left_out" ;
		lv2:name "Left Out" ;
		lv2:designation pg:left ;
		pg:group mda:mainOut
	] , [
		a lv2:OutputPort ,
			lv2:AudioPort ;
		lv2:index 10 ;
		lv2:symbol "right_out" ;
		lv2:name "Right Out" ;
		lv2:designation pg:right ;
		pg:group mda:mainOut
	] .
