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

@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 pprops: <http://lv2plug.in/ns/ext/port-props#> .
@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 "Monochord" ;
    rdfs:comment "Eight-voice waveguide string, plucked, bowed or hammered: a delay line closed into a tuned loop with damping, stiffness, a pickup comb and a small body." ;
    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:produces trn:Audio ;
    trn:genre "Physical modelling" , "Acoustic" , "Experimental" ;
    trn:caution "A ninth note steals the quietest voice rather than being refused." ;
    trn:caution "Exciter changes apply to the next note. A note already sounding keeps the exciter it started with." ;
    trn:caution "The bow keeps sounding while the key is held and its level follows the note velocity; Hardness does not affect it." ;
    trn:caution "Stiffness above about 0.7 detunes the upper partials audibly on a low note (partial 6 is +3 cents at 0.5, +20 at 0.7, +62 at 0.9)." ;
    trn:format trn:Jig ;
    pu:licenceId "MIT" ;
    trn:requires jig:MidiEvents ;

    jig:audioInputs 0 ;
    jig:audioOutputs 1 ;
    jig:outputChannels 2 ;
    jig:renderQuantum 128 ;
    jig:latencyFrames 0 ;
    jig:tailFrames 96000 ;

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

    lv2:port <#exciter> , <#position> , <#hardness> , <#bow_pressure> , <#decay> , <#damping> , <#stiffness> , <#body_size> , <#body_level> , <#pickup> , <#release> , <#master> , <#velocity> , <#bend_range> .

<#module>
    a jig:Module ;
    jig:location <monochord.wasm> ;
    jig:mediaType "application/wasm" ;
    jig:abi jig:Abi2 ;
    jig:integrity "sha384-tmGPQMMRS1k+wweUG/bic10hX+PTqy2pRbZpbIOmqvp/CFUpUmGPr6gakTVDl+V6" .

<#processor>
    a jig:Processor ;
    jig:location <monochord-processor.js> ;
    jig:mediaType "text/javascript" ;
    jig:registeredName "monochord" ;
    jig:integrity "sha384-8eq3/7qzGNHk2HvxkGpHcIRzCPmzdAgxSwxbaSXWQAs1q/ygioG5gbbNd3rWhtfB" .

<#exciter>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "exciter" ; lv2:name "Exciter" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 2 ;
    jig:paramIndex 0 ;
    jig:controlGroup "Exciter" ;
    rdfs:comment "How the string is set going: plucked, bowed or hammered." ;
    pprops:displayPriority 100 ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#exciter-0> ,
        <#exciter-1> ,
        <#exciter-2> .

<#exciter-0> rdfs:label "Pluck" ; rdf:value 0 .

<#exciter-1> rdfs:label "Bow" ; rdf:value 1 .

<#exciter-2> rdfs:label "Hammer" ; rdf:value 2 .

<#position>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "position" ; lv2:name "Position" ;
    lv2:default 0.2 ; lv2:minimum 0.05 ; lv2:maximum 0.5 ;
    jig:paramIndex 1 ;
    jig:controlGroup "Exciter" .

<#hardness>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "hardness" ; lv2:name "Hardness" ;
    lv2:default 0.6 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 2 ;
    jig:controlGroup "Exciter" ;
    rdfs:comment "How hard the string is plucked or struck." ;
    pprops:displayPriority 80 .

<#bow_pressure>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "bow_pressure" ; lv2:name "Bow pressure" ;
    lv2:default 0.5 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 3 ;
    jig:controlGroup "Exciter" .

<#decay>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "decay" ; lv2:name "Decay" ;
    lv2:default 3 ; lv2:minimum 0.1 ; lv2:maximum 20 ;
    jig:paramIndex 4 ;
    jig:controlGroup "String" ;
    rdfs:comment "How many seconds a note takes to die away." ;
    pprops:displayPriority 90 ;
    units:unit units:s .

<#damping>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "damping" ; lv2:name "Damping" ;
    lv2:default 0.3 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 5 ;
    jig:controlGroup "String" ;
    rdfs:comment "How much the string is damped: more is duller and shorter." ;
    pprops:displayPriority 70 .

<#stiffness>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "stiffness" ; lv2:name "Stiffness" ;
    lv2:default 0.5 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 6 ;
    jig:controlGroup "String" .

<#body_size>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "body_size" ; lv2:name "Body size" ;
    lv2:default 1 ; lv2:minimum 0.5 ; lv2:maximum 2 ;
    jig:paramIndex 7 ;
    jig:controlGroup "Body" .

<#body_level>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "body_level" ; lv2:name "Body level" ;
    lv2:default 0.3 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 8 ;
    jig:controlGroup "Body" .

<#pickup>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "pickup" ; lv2:name "Pickup" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 0.5 ;
    jig:paramIndex 9 ;
    jig:controlGroup "Body" .

<#release>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "release" ; lv2:name "Release" ;
    lv2:default 250 ; lv2:minimum 5 ; lv2:maximum 2000 ;
    jig:paramIndex 10 ;
    jig:controlGroup "Output" ;
    rdfs:comment "How long a note takes to stop after the key is let go." ;
    units:unit units:ms .

<#master>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "master" ; lv2:name "Master" ;
    lv2:default 0.6 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 11 ;
    jig:controlGroup "Output" ;
    rdfs:comment "The overall level of the instrument." ;
    pprops:displayPriority 60 .

<#velocity>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "velocity" ; lv2:name "Velocity" ;
    lv2:default 0.7 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 12 ;
    jig:controlGroup "Output" .

<#bend_range>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "bend_range" ; lv2:name "Bend range" ;
    lv2:default 2 ; lv2:minimum 0 ; lv2:maximum 24 ;
    jig:paramIndex 13 ;
    jig:controlGroup "Output" ;
    units:unit units:semitone12TET .
