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

@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 "Moka" ;
    rdfs:comment "A stereo MIDI synth built on modal synthesis: each voice is a bank of eight damped sine modes struck by a short mallet transient, giving xylophone, glockenspiel, woodblock, glass bowl, metal sheet and tube voices." ;
    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:caution "Follows per-channel pitch bend (2 semitones, or the range set by RPN 0), so Retune can drive it microtonally. Ported from the Downspout VST3 of the same name; its factory presets and panel are not carried over." ;
    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 ;

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

    jig:processor <#processor> ;

    lv2:port <#instrument> , <#decay> , <#mallet> , <#tone> , <#spread> , <#position> , <#voices> , <#level> , <#release> , <#width> .

<#processor>
    a jig:Processor ;
    jig:location <moka-processor.js> ;
    jig:mediaType "text/javascript" ;
    jig:registeredName "moka" ;
    jig:integrity "sha384-AbKWZi80e54DLMR2zGP0DvbQ0e5/H9ISXDU8luy8/+6n59z1J6kIv4u1EAKL+v0/" .

<#instrument>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "instrument" ; lv2:name "Instrument" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 5 ;
    jig:paramIndex 0 ;
    rdfs:comment "Which kind of struck object the notes sound like." ;
    pprops:displayPriority 100 ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#instrument-0> ,
        <#instrument-1> ,
        <#instrument-2> ,
        <#instrument-3> ,
        <#instrument-4> ,
        <#instrument-5> .

<#instrument-0> rdfs:label "Xylophone" ; rdf:value 0 .

<#instrument-1> rdfs:label "Glockenspiel" ; rdf:value 1 .

<#instrument-2> rdfs:label "Woodblock" ; rdf:value 2 .

<#instrument-3> rdfs:label "Glass Bowl" ; rdf:value 3 .

<#instrument-4> rdfs:label "Metal Sheet" ; rdf:value 4 .

<#instrument-5> rdfs:label "Tube" ; rdf:value 5 .

<#decay>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "decay" ; lv2:name "Decay" ;
    lv2:default 0.55 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 1 ;
    rdfs:comment "How long each note rings." ;
    pprops:displayPriority 80 .

<#mallet>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "mallet" ; lv2:name "Mallet hardness" ;
    lv2:default 0.75 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 2 ;
    rdfs:comment "How hard the mallet is: harder is brighter and sharper." ;
    pprops:displayPriority 70 .

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

<#spread>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "spread" ; lv2:name "Spread" ;
    lv2:default 0.3 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 4 .

<#position>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "position" ; lv2:name "Strike position" ;
    lv2:default 0.45 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 5 .

<#voices>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "voices" ; lv2:name "Voices" ;
    lv2:default 4 ; lv2:minimum 1 ; lv2:maximum 12 ;
    jig:paramIndex 6 ;
    rdfs:comment "How many notes can sound at once." .

<#level>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "level" ; lv2:name "Level" ;
    lv2:default 0.7 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 7 ;
    rdfs:comment "How loud the instrument is." ;
    pprops:displayPriority 60 .

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

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