# canticle/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/canticle/> .

@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 "Canticle" ;
    rdfs:comment "Twelve-voice polyphonic tonal instrument for the middle of an ensemble: keys, reed, pad, pluck and glass tones for melody, counterpoint and chords." ;
    trn:vendor "danja" ;
    doap:revision "1.0.0" ;
    doap:developer <http://danny.ayers.name> ;
    foaf:homepage <> ;
    trn:role trn:Instrument , trn:AudioInstrument ;
    trn:accepts trn:Midi , trn:MelodyMidi , trn:HarmonyMidi ;
    trn:produces trn:Audio ;
    trn:caution "Twelve voices. A thirteenth note steals the oldest, releasing voices first, rather than being refused." ;
    trn:caution "A velocity-100 single note reaches at least -10 dBFS at the default setting on every model; dense chords stay bounded through the final soft clip." ;
    trn:caution "CC 120 and 123 silence every voice, like an all-notes-off." ;
    trn:format trn:Jig , trn:WebAudio ;
    pu:licenceId "Apache-2.0" ;
    trn:requires jig:MidiEvents ;

    jig:stateless true ;
    jig:audioInputs 0 ;
    jig:audioOutputs 1 ;
    jig:outputChannels 2 ;
    jig:renderQuantum 128 ;
    jig:latencyFrames 0 ;
    jig:tailFrames 153600 ;

    jig:module <#module> ;
    jig:processor <#processor> ;

    lv2:port <#model> , <#tone> , <#body> , <#movement> , <#attack> , <#decay> , <#sustain> , <#release> , <#detune> , <#width> , <#drive> , <#output> , <#metal> , <#articulation> , <#range> , <#ensemble> .

<#module>
    a jig:Module ;
    jig:location <canticle.wasm> ;
    jig:mediaType "application/wasm" ;
    jig:abi jig:Abi1 ;
    jig:integrity "sha384-3+D0GH64/yW9JUtlUKNOcucRCnAryqSpJ/vFIWBpSQtQsQueAYhIBigPmGOYHZpS" .

<#processor>
    a jig:Processor ;
    jig:location <canticle-processor.js> ;
    jig:mediaType "text/javascript" ;
    jig:registeredName "canticle" ;
    jig:integrity "sha384-I3yNZWkZ9Y3Zpar4ttNDu+X8QBP989tfc09CasDWiMVeVonizHOnuFWxZoOiK4fm" .

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

<#model-0> rdfs:label "Keys" ; rdf:value 0 .

<#model-1> rdfs:label "Reed" ; rdf:value 1 .

<#model-2> rdfs:label "Pad" ; rdf:value 2 .

<#model-3> rdfs:label "Pluck" ; rdf:value 3 .

<#model-4> rdfs:label "Glass" ; rdf:value 4 .

<#tone>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "tone" ; lv2:name "Tone" ;
    lv2:default 0.52 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 1 .

<#body>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "body" ; lv2:name "Body" ;
    lv2:default 0.58 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 2 .

<#movement>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "movement" ; lv2:name "Movement" ;
    lv2:default 0.2 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 3 .

<#attack>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "attack" ; lv2:name "Attack" ;
    lv2:default 0.1 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 4 .

<#decay>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "decay" ; lv2:name "Decay" ;
    lv2:default 0.34 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 5 .

<#sustain>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "sustain" ; lv2:name "Sustain" ;
    lv2:default 0.78 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 6 .

<#release>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "release" ; lv2:name "Release" ;
    lv2:default 0.42 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 7 .

<#detune>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "detune" ; lv2:name "Detune" ;
    lv2:default 0.18 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 8 .

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

<#drive>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "drive" ; lv2:name "Drive" ;
    lv2:default 0.1 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 10 .

<#output>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "output" ; lv2:name "Output" ;
    lv2:default 0.68 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 11 .

<#metal>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "metal" ; lv2:name "Metal" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 12 .

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

<#articulation-0> rdfs:label "Natural" ; rdf:value 0 .

<#articulation-1> rdfs:label "Short" ; rdf:value 1 .

<#articulation-2> rdfs:label "Sustain" ; rdf:value 2 .

<#articulation-3> rdfs:label "Bloom" ; rdf:value 3 .

<#range>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "range" ; lv2:name "Register" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 3 ;
    jig:paramIndex 14 ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#range-0> ,
        <#range-1> ,
        <#range-2> ,
        <#range-3> .

<#range-0> rdfs:label "Natural" ; rdf:value 0 .

<#range-1> rdfs:label "Low" ; rdf:value 1 .

<#range-2> rdfs:label "High" ; rdf:value 2 .

<#range-3> rdfs:label "Open" ; rdf:value 3 .

<#ensemble>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "ensemble" ; lv2:name "Ensemble" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 3 ;
    jig:paramIndex 15 ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#ensemble-0> ,
        <#ensemble-1> ,
        <#ensemble-2> ,
        <#ensemble-3> .

<#ensemble-0> rdfs:label "Solo" ; rdf:value 0 .

<#ensemble-1> rdfs:label "Pair" ; rdf:value 1 .

<#ensemble-2> rdfs:label "Chorus" ; rdf:value 2 .

<#ensemble-3> rdfs:label "Wide" ; rdf:value 3 .
