# sprout/profile.ttl
#
# GENERATED by bin/write-profile.js. Do not edit: the digests are of the
# files on disk, and editing them by hand is how a profile comes to describe
# artefacts that no longer exist. Edit profile.json and run ./build.sh.

@base <https://strandz.it/jigdaw/plugins/sprout/> .

@prefix jig:   <http://purl.org/stuff/jigdaw/> .
@prefix trn:   <http://purl.org/stuff/transmissions/> .
@prefix pu:    <http://purl.org/stuff/plugin-universe/> .
@prefix lv2:   <http://lv2plug.in/ns/lv2core#> .
@prefix midi:  <http://lv2plug.in/ns/ext/midi#> .
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix doap:  <http://usefulinc.com/ns/doap#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .

<>
    a jig:WebPlugin , trn:PluginProfile ;
    rdfs:label "Sprout" ;
    rdfs:comment "L-system MIDI generator: a grammar is rewritten for up to 16 generations, read as a turtle, and played as a monophonic, scale-quantised line locked to the host transport, optionally growing by one generation every few bars." ;
    trn:vendor "danja" ;
    doap:revision "1.0.0" ;
    doap:developer <http://danny.ayers.name> ;
    foaf:homepage <> ;
    trn:role trn:MidiGenerator ;
    trn:accepts trn:Midi , trn:ControlMidi ;
    trn:produces trn:Midi ;
    trn:caution "Silent until the host transport is rolling and reports a tempo and a beat position. Pure MIDI, no audio: route its MIDI output to an instrument. Ported from the Downspout VST3 of the same name; the status read-outs and the panel are not carried over, and the random draw is the VST3's 64-bit mix." ;
    trn:caution "Monophonic by design. A new note ends the note before it rather than overlapping. An expansion longer than 131,072 symbols is not used; the deepest generation that fits plays instead." ;
    trn:caution "Declares no jig:module and so no jig:abi. A host that loads a module directly, such as the native adapter, cannot load this plugin; a JavaScript AudioWorklet host can." ;
    trn:format trn:Jig ;
    pu:licenceId "MIT" ;
    trn:requires jig:MidiEvents ;
    trn:requires jig:MidiOut ;
    trn:requires trn:HostTransport ;

    jig:stateless true ;
    jig:audioInputs 0 ;
    jig:audioOutputs 0 ;
    jig:renderQuantum 128 ;
    jig:latencyFrames 0 ;

    jig:processor <#processor> ;

    lv2:port <#preset> , <#generations> , <#grow_bars> , <#scale> , <#root> , <#step_size> , <#range> , <#grid> , <#gate> , <#probability> , <#velocity> , <#channel> , <#seed> , <#pitch_source> , <#input_channel> , <#cc_channel> , <#conductor_ch> .

<#processor>
    a jig:Processor ;
    jig:location <sprout-processor.js> ;
    jig:mediaType "text/javascript" ;
    jig:registeredName "sprout" ;
    jig:integrity "sha384-XNKS29b8Prw41IfmDBe2re9FbEKr6QI9ch6/j940NhRRbXpzsIW2kHDhukN7M8qm" .

<#preset>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "preset" ; lv2:name "Grammar" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 6 ;
    jig:paramIndex 0 ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#preset-0> ,
        <#preset-1> ,
        <#preset-2> ,
        <#preset-3> ,
        <#preset-4> ,
        <#preset-5> ,
        <#preset-6> .

<#preset-0> rdfs:label "Plant" ; rdf:value 0 .

<#preset-1> rdfs:label "Koch" ; rdf:value 1 .

<#preset-2> rdfs:label "Dragon" ; rdf:value 2 .

<#preset-3> rdfs:label "Sierpinski" ; rdf:value 3 .

<#preset-4> rdfs:label "Cantor" ; rdf:value 4 .

<#preset-5> rdfs:label "Levy" ; rdf:value 5 .

<#preset-6> rdfs:label "Tree" ; rdf:value 6 .

<#generations>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "generations" ; lv2:name "Generations" ;
    lv2:default 4 ; lv2:minimum 1 ; lv2:maximum 16 ;
    jig:paramIndex 1 .

<#grow_bars>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "grow_bars" ; lv2:name "Grow every (bars, 0 = off)" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 16 ;
    jig:paramIndex 2 .

<#scale>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "scale" ; lv2:name "Scale" ;
    lv2:default 1 ; lv2:minimum 0 ; lv2:maximum 23 ;
    jig:paramIndex 3 ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#scale-0> ,
        <#scale-1> ,
        <#scale-2> ,
        <#scale-3> ,
        <#scale-4> ,
        <#scale-5> ,
        <#scale-6> ,
        <#scale-7> ,
        <#scale-8> ,
        <#scale-9> ,
        <#scale-10> ,
        <#scale-11> ,
        <#scale-12> ,
        <#scale-13> ,
        <#scale-14> ,
        <#scale-15> ,
        <#scale-16> ,
        <#scale-17> ,
        <#scale-18> ,
        <#scale-19> ,
        <#scale-20> ,
        <#scale-21> ,
        <#scale-22> ,
        <#scale-23> .

<#scale-0> rdfs:label "Chromatic" ; rdf:value 0 .

<#scale-1> rdfs:label "Major" ; rdf:value 1 .

<#scale-2> rdfs:label "Ionian" ; rdf:value 2 .

<#scale-3> rdfs:label "Minor" ; rdf:value 3 .

<#scale-4> rdfs:label "Harmonic Minor" ; rdf:value 4 .

<#scale-5> rdfs:label "Melodic Minor" ; rdf:value 5 .

<#scale-6> rdfs:label "Dorian" ; rdf:value 6 .

<#scale-7> rdfs:label "Phrygian" ; rdf:value 7 .

<#scale-8> rdfs:label "Lydian" ; rdf:value 8 .

<#scale-9> rdfs:label "Mixolydian" ; rdf:value 9 .

<#scale-10> rdfs:label "Locrian" ; rdf:value 10 .

<#scale-11> rdfs:label "Phrygian Dominant" ; rdf:value 11 .

<#scale-12> rdfs:label "Neapolitan Major" ; rdf:value 12 .

<#scale-13> rdfs:label "Neapolitan Minor" ; rdf:value 13 .

<#scale-14> rdfs:label "Pentatonic Major" ; rdf:value 14 .

<#scale-15> rdfs:label "Pentatonic Minor" ; rdf:value 15 .

<#scale-16> rdfs:label "Blues" ; rdf:value 16 .

<#scale-17> rdfs:label "Whole Tone" ; rdf:value 17 .

<#scale-18> rdfs:label "Altered" ; rdf:value 18 .

<#scale-19> rdfs:label "Half-Whole Dim" ; rdf:value 19 .

<#scale-20> rdfs:label "Whole-Half Dim" ; rdf:value 20 .

<#scale-21> rdfs:label "Bebop Dominant" ; rdf:value 21 .

<#scale-22> rdfs:label "Bebop Major" ; rdf:value 22 .

<#scale-23> rdfs:label "Bebop Minor" ; rdf:value 23 .

<#root>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "root" ; lv2:name "Root note" ;
    lv2:default 60 ; lv2:minimum 0 ; lv2:maximum 127 ;
    jig:paramIndex 4 .

<#step_size>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "step_size" ; lv2:name "Step size (degrees)" ;
    lv2:default 1 ; lv2:minimum 1 ; lv2:maximum 3 ;
    jig:paramIndex 5 .

<#range>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "range" ; lv2:name "Range (degrees)" ;
    lv2:default 14 ; lv2:minimum 3 ; lv2:maximum 28 ;
    jig:paramIndex 6 .

<#grid>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "grid" ; lv2:name "Step grid" ;
    lv2:default 2 ; lv2:minimum 0 ; lv2:maximum 11 ;
    jig:paramIndex 7 ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#grid-0> ,
        <#grid-1> ,
        <#grid-2> ,
        <#grid-3> ,
        <#grid-4> ,
        <#grid-5> ,
        <#grid-6> ,
        <#grid-7> ,
        <#grid-8> ,
        <#grid-9> ,
        <#grid-10> ,
        <#grid-11> .

<#grid-0> rdfs:label "1/32" ; rdf:value 0 .

<#grid-1> rdfs:label "1/16T" ; rdf:value 1 .

<#grid-2> rdfs:label "1/16" ; rdf:value 2 .

<#grid-3> rdfs:label "1/16." ; rdf:value 3 .

<#grid-4> rdfs:label "1/8T" ; rdf:value 4 .

<#grid-5> rdfs:label "1/8" ; rdf:value 5 .

<#grid-6> rdfs:label "1/8." ; rdf:value 6 .

<#grid-7> rdfs:label "1/4T" ; rdf:value 7 .

<#grid-8> rdfs:label "1/4" ; rdf:value 8 .

<#grid-9> rdfs:label "1/4." ; rdf:value 9 .

<#grid-10> rdfs:label "1/2" ; rdf:value 10 .

<#grid-11> rdfs:label "1 bar" ; rdf:value 11 .

<#gate>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "gate" ; lv2:name "Gate" ;
    lv2:default 0.7 ; lv2:minimum 0.1 ; lv2:maximum 1 ;
    jig:paramIndex 8 .

<#probability>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "probability" ; lv2:name "Probability" ;
    lv2:default 1 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 9 .

<#velocity>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "velocity" ; lv2:name "Velocity" ;
    lv2:default 90 ; lv2:minimum 1 ; lv2:maximum 127 ;
    jig:paramIndex 10 .

<#channel>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "channel" ; lv2:name "Channel" ;
    lv2:default 1 ; lv2:minimum 1 ; lv2:maximum 16 ;
    jig:paramIndex 11 .

<#seed>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "seed" ; lv2:name "Seed" ;
    lv2:default 1 ; lv2:minimum 1 ; lv2:maximum 65535 ;
    jig:paramIndex 12 .

<#pitch_source>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "pitch_source" ; lv2:name "Pitch source" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 2 ;
    jig:paramIndex 13 ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#pitch_source-0> ,
        <#pitch_source-1> ,
        <#pitch_source-2> .

<#pitch_source-0> rdfs:label "Scale" ; rdf:value 0 .

<#pitch_source-1> rdfs:label "Held notes" ; rdf:value 1 .

<#pitch_source-2> rdfs:label "Latched notes" ; rdf:value 2 .

<#input_channel>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "input_channel" ; lv2:name "Input channel (0 = all)" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 16 ;
    jig:paramIndex 14 .

<#cc_channel>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "cc_channel" ; lv2:name "CC channel (0 = off)" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 16 ;
    jig:paramIndex 15 .

<#conductor_ch>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "conductor_ch" ; lv2:name "Conductor channel (0 = off)" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 16 ;
    jig:paramIndex 16 .
